[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50743] trunk/blender/source/blender/ blenkernel/intern/tracking.c: Tracking: fixed crash when reference frame fails to be loaded

Sergey Sharybin sergey.vfx at gmail.com
Wed Sep 19 14:43:32 CEST 2012


Revision: 50743
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50743
Author:   nazgul
Date:     2012-09-19 12:43:32 +0000 (Wed, 19 Sep 2012)
Log Message:
-----------
Tracking: fixed crash when reference frame fails to be loaded

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	2012-09-19 12:11:28 UTC (rev 50742)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-09-19 12:43:32 UTC (rev 50743)
@@ -2281,9 +2281,9 @@
 	return ibuf;
 }
 
-static void track_context_update_reference(MovieTrackingContext *context, TrackContext *track_context,
-                                           MovieTrackingTrack *track, MovieTrackingMarker *marker, int curfra,
-                                           int frame_width, int frame_height)
+static int track_context_update_reference(MovieTrackingContext *context, TrackContext *track_context,
+                                          MovieTrackingTrack *track, MovieTrackingMarker *marker, int curfra,
+                                          int frame_width, int frame_height)
 {
 	MovieTrackingMarker *marker_keyed = NULL;
 	ImBuf *reference_ibuf = NULL;
@@ -2291,6 +2291,10 @@
 
 	/* calculate patch for keyframed position */
 	reference_ibuf = tracking_context_get_reference_ibuf(context, track, marker, curfra, &marker_keyed);
+
+	if (!reference_ibuf)
+		return FALSE;
+
 	track_context->marker = *marker_keyed;
 
 	if (track_context->search_area) {
@@ -2309,6 +2313,8 @@
 	}
 
 	IMB_freeImBuf(reference_ibuf);
+
+	return TRUE;
 }
 
 static void tracking_configure_tracker(TrackContext *track_context, MovieTrackingTrack *track,
@@ -2473,8 +2479,12 @@
 				float *patch_new;
 
 				if (need_readjust) {
-					track_context_update_reference(context, track_context, track, marker,
-					                               curfra, frame_width, frame_height);
+					if (track_context_update_reference(context, track_context, track, marker,
+					                                   curfra, frame_width, frame_height) == FALSE)
+					{
+						/* happens when reference frame fails to be loaded */
+						continue;
+					}
 				}
 
 				/* for now track to the same search area dimension as marker has got for current frame




More information about the Bf-blender-cvs mailing list