[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56726] trunk/blender/source/blender/ blenkernel/intern/tracking.c: Fix for keyed marker search not happening correct in some cases

Sergey Sharybin sergey.vfx at gmail.com
Sun May 12 23:57:57 CEST 2013


Revision: 56726
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56726
Author:   nazgul
Date:     2013-05-12 21:57:57 +0000 (Sun, 12 May 2013)
Log Message:
-----------
Fix for keyed marker search not happening correct in some cases

Was an heuristic failure writen for cases when there's no keyframe
in desired direction. Shall all be fine now.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/tracking.c

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2013-05-12 19:05:45 UTC (rev 56725)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2013-05-12 21:57:57 UTC (rev 56726)
@@ -2488,8 +2488,9 @@
 static MovieTrackingMarker *tracking_context_get_keyframed_marker(MovieTrackingTrack *track,
                                                                   int curfra, bool backwards)
 {
-	MovieTrackingMarker *marker_keyed = BKE_tracking_marker_get(track, curfra);
-	int a = marker_keyed - track->markers;
+	MovieTrackingMarker *marker_keyed = NULL;
+	MovieTrackingMarker *marker_keyed_fallback = NULL;
+	int a = BKE_tracking_marker_get(track, curfra) - track->markers;
 
 	while (a >= 0 && a < track->markersnr) {
 		int next = backwards ? a + 1 : a - 1;
@@ -2500,11 +2501,18 @@
 		if (next >= 0 && next < track->markersnr)
 			next_marker = &track->markers[next];
 
-		/* if next mrker is disabled, stop searching keyframe and use current frame as keyframe */
-		if (next_marker && next_marker->flag & MARKER_DISABLED)
-			is_keyframed = true;
+		if ((cur_marker->flag & MARKER_DISABLED) == 0) {
+			/* If it'll happen so we didn't find a real keyframe marker,
+			 * fallback to the first marker in current tracked segment
+			 * as a keyframe.
+			 */
+			if (next_marker && next_marker->flag & MARKER_DISABLED) {
+				if (marker_keyed_fallback == NULL)
+					marker_keyed_fallback = cur_marker;
+			}
 
-		is_keyframed |= (cur_marker->flag & MARKER_TRACKED) == 0;
+			is_keyframed |= (cur_marker->flag & MARKER_TRACKED) == 0;
+		}
 
 		if (is_keyframed) {
 			marker_keyed = cur_marker;
@@ -2515,6 +2523,9 @@
 		a = next;
 	}
 
+	if (marker_keyed == NULL)
+		marker_keyed = marker_keyed_fallback;
+
 	return marker_keyed;
 }
 




More information about the Bf-blender-cvs mailing list