[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