[Bf-blender-cvs] [380a0b096a3] tracking_scopes: Tracking: Deal with gaps and long tracked segments better
Sergey Sharybin
noreply at git.blender.org
Mon Mar 1 16:24:36 CET 2021
Commit: 380a0b096a31113cffce7643113a7fb486f053fa
Author: Sergey Sharybin
Date: Mon Mar 1 16:22:39 2021 +0100
Branches: tracking_scopes
https://developer.blender.org/rB380a0b096a31113cffce7643113a7fb486f053fa
Tracking: Deal with gaps and long tracked segments better
When there is a gap during looking for a reference marker for the
scopes use the first marker after the gap. It helps re-positioning
the marker back in place after it got ocluded.
Also cosmetic changes on the labels.
===================================================================
M release/scripts/startup/bl_ui/space_clip.py
M source/blender/blenkernel/intern/movieclip.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index bfdc941f8f4..7e648ecdb03 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -730,7 +730,7 @@ class CLIP_PT_track(CLIP_PT_tracking_panel, Panel):
sub.prop(act_track, "lock", text="", icon=icon)
col = layout.column()
- col.label(text="Previous Keyframe")
+ col.label(text="Previous Reference")
col.template_track(sc, "scopes_prev")
col = layout.column()
@@ -738,7 +738,7 @@ class CLIP_PT_track(CLIP_PT_tracking_panel, Panel):
col.template_track(sc, "scopes")
col = layout.column()
- col.label(text="Next Marker")
+ col.label(text="Next Reference")
col.template_track(sc, "scopes_next")
row = layout.row(align=True)
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 6945e2bfbc6..128b854c5d8 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -1721,18 +1721,29 @@ static MovieTrackingMarker *marker_previous_keyframe_get(MovieTrackingTrack *tra
/* Start with the previous marker, so that if the current marker is a keyframe by itself it is
* not used as a result. */
MovieTrackingMarker *marker_it = marker - 1;
+ MovieTrackingMarker *last_known_marker = NULL;
+ bool gap_encountered = false;
while (marker_it >= track->markers) {
if (marker_it->flag & MARKER_DISABLED) {
- return NULL;
+ gap_encountered = true;
+ --marker_it;
+ continue;
+ }
+
+ if (gap_encountered) {
+ return marker_it;
}
+
+ last_known_marker = marker_it;
+
if ((marker_it->flag & MARKER_TRACKED) == 0) {
return marker_it;
}
--marker_it;
}
- return NULL;
+ return last_known_marker;
}
static MovieTrackingMarker *marker_next_keyframe_get(MovieTrackingTrack *track,
@@ -1741,20 +1752,30 @@ static MovieTrackingMarker *marker_next_keyframe_get(MovieTrackingTrack *track,
/* Start with the next marker, so that if the current marker is a keyframe by itself it is
* not used as a result. */
MovieTrackingMarker *marker_it = marker + 1;
-
+ MovieTrackingMarker *last_known_marker = NULL;
const MovieTrackingMarker *marker_end = track->markers + track->markersnr;
+ bool gap_encountered = false;
while (marker_it < marker_end) {
if (marker_it->flag & MARKER_DISABLED) {
- return NULL;
+ gap_encountered = true;
+ ++marker_it;
+ continue;
+ }
+
+ if (gap_encountered) {
+ return marker_it;
}
+
+ last_known_marker = marker_it;
+
if ((marker_it->flag & MARKER_TRACKED) == 0) {
return marker_it;
}
++marker_it;
}
- return NULL;
+ return last_known_marker;
}
static MovieTrackingMarker *reference_marker_for_scopes_get(MovieClip *clip,
More information about the Bf-blender-cvs
mailing list