[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59765] trunk/blender/source/blender/ blenkernel/intern/tracking.c: Fix #36587: Tracking markers fail to track near the left and right edge of a movie clip .

Sergey Sharybin sergey.vfx at gmail.com
Tue Sep 3 12:39:56 CEST 2013


Revision: 59765
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59765
Author:   nazgul
Date:     2013-09-03 10:39:55 +0000 (Tue, 03 Sep 2013)
Log Message:
-----------
Fix #36587: Tracking markers fail to track near the left and right edge of a movie clip.

Track margin checks needed some tweaks to deal better with the fact
that normalized values for the same pixel values might be different
across X and Y axis.

Also, non-centered patters are expected to be handling better 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-09-03 09:18:08 UTC (rev 59764)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2013-09-03 10:39:55 UTC (rev 59765)
@@ -2900,19 +2900,24 @@
 static bool tracking_check_marker_margin(MovieTrackingTrack *track, MovieTrackingMarker *marker,
                                          int frame_width, int frame_height)
 {
-	float pat_min[2], pat_max[2], dim[2], margin[2];
+	float pat_min[2], pat_max[2];
+	float margin_left, margin_top, margin_right, margin_bottom;
+	float normalized_track_margin[2];
 
 	/* margin from frame boundaries */
 	BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
-	sub_v2_v2v2(dim, pat_max, pat_min);
-	margin[0] = margin[1] = max_ff(dim[0], dim[1]) / 2.0f;
 
-	margin[0] = max_ff(margin[0], (float)track->margin / frame_width);
-	margin[1] = max_ff(margin[1], (float)track->margin / frame_height);
+	normalized_track_margin[0] = (float)track->margin / frame_width;
+	normalized_track_margin[1] = (float)track->margin / frame_height;
 
+	margin_left   = max_ff(-pat_min[0], normalized_track_margin[0]);
+	margin_top    = max_ff( pat_max[1], normalized_track_margin[1]);
+	margin_right  = max_ff( pat_max[0], normalized_track_margin[0]);
+	margin_bottom = max_ff(-pat_min[1], normalized_track_margin[1]);
+
 	/* do not track markers which are too close to boundary */
-	if (marker->pos[0] < margin[0] || marker->pos[0] > 1.0f - margin[0] ||
-	    marker->pos[1] < margin[1] || marker->pos[1] > 1.0f - margin[1])
+	if (marker->pos[0] < margin_left || marker->pos[0] > 1.0f - margin_right ||
+	    marker->pos[1] < margin_bottom || marker->pos[1] > 1.0f - margin_top)
 	{
 		return false;
 	}




More information about the Bf-blender-cvs mailing list