[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