[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49279] trunk/blender/source/blender/ blenkernel: Added utility function to return marker's subframe position

Sergey Sharybin sergey.vfx at gmail.com
Fri Jul 27 12:12:59 CEST 2012


Revision: 49279
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49279
Author:   nazgul
Date:     2012-07-27 10:12:58 +0000 (Fri, 27 Jul 2012)
Log Message:
-----------
Added utility function to return marker's subframe position

Used in mask parenting stuff.

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

Modified: trunk/blender/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-07-27 09:32:47 UTC (rev 49278)
+++ trunk/blender/source/blender/blenkernel/BKE_tracking.h	2012-07-27 10:12:58 UTC (rev 49279)
@@ -110,6 +110,8 @@
 
 void BKE_tracking_marker_pattern_minmax(const struct MovieTrackingMarker *marker, float min[2], float max[2]);
 
+void BKE_tracking_marker_get_subframe_position(struct MovieTrackingTrack *track, float framenr, float pos[2]);
+
 /* **** Object **** */
 struct MovieTrackingObject *BKE_tracking_object_add(struct MovieTracking *tracking, const char *name);
 void BKE_tracking_object_delete(struct MovieTracking *tracking, struct MovieTrackingObject *object);

Modified: trunk/blender/source/blender/blenkernel/intern/mask.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask.c	2012-07-27 09:32:47 UTC (rev 49278)
+++ trunk/blender/source/blender/blenkernel/intern/mask.c	2012-07-27 10:12:58 UTC (rev 49279)
@@ -1635,9 +1635,8 @@
 				user.framenr = ctime;
 
 				if (track) {
-					MovieTrackingMarker *marker = BKE_tracking_marker_get(track, clip_framenr);
 					float marker_pos_ofs[2];
-					add_v2_v2v2(marker_pos_ofs, marker->pos, track->offset);
+					BKE_tracking_marker_get_subframe_position(track, clip_framenr, marker_pos_ofs);
 					BKE_mask_coord_from_movieclip(clip, &user, r_co, marker_pos_ofs);
 
 					return TRUE;

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-07-27 09:32:47 UTC (rev 49278)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2012-07-27 10:12:58 UTC (rev 49279)
@@ -916,7 +916,7 @@
 	BKE_tracking_track_flag_clear(track, area, SELECT);
 }
 
-/*********************** Marker  *************************/
+/*********************** Marker *************************/
 
 MovieTrackingMarker *BKE_tracking_marker_insert(MovieTrackingTrack *track, MovieTrackingMarker *marker)
 {
@@ -1133,6 +1133,36 @@
 	DO_MINMAX2(marker->pattern_corners[3], min, max);
 }
 
+void BKE_tracking_marker_get_subframe_position(MovieTrackingTrack *track, float framenr, float pos[2])
+{
+	MovieTrackingMarker *marker = BKE_tracking_marker_get(track, (int) framenr);
+	MovieTrackingMarker *marker_last = track->markers + (track->markersnr - 1);
+
+	if (marker != marker_last) {
+		MovieTrackingMarker *marker_next = marker + 1;
+
+		if (marker_next->framenr == marker->framenr + 1) {
+			/* currently only do subframing inside tracked ranges, do not extrapolate tracked segments
+			 * could be changed when / if mask parent would be interpolating position in-between
+			 * tracked segments
+			 */
+
+			float fac = (framenr - (int) framenr) / (marker_next->framenr - marker->framenr);
+
+			interp_v2_v2v2(pos, marker->pos, marker_next->pos, fac);
+		}
+		else {
+			copy_v2_v2(pos, marker->pos);
+		}
+	}
+	else {
+		copy_v2_v2(pos, marker->pos);
+	}
+
+	/* currently track offset is always wanted to be applied here, could be made an option later */
+	add_v2_v2(pos, track->offset);
+}
+
 /*********************** Object *************************/
 
 MovieTrackingObject *BKE_tracking_object_add(MovieTracking *tracking, const char *name)




More information about the Bf-blender-cvs mailing list