[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39718] branches/soc-2011-tomato: Camera tracking integration

Sergey Sharybin g.ulairi at gmail.com
Fri Aug 26 22:14:30 CEST 2011


Revision: 39718
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39718
Author:   nazgul
Date:     2011-08-26 20:14:29 +0000 (Fri, 26 Aug 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Stop tracking when marker is too close to the frame boundary.
- Added marker margin to tracking settings.
- Added option to use auto-adoptation each N frames.
- Highlight keyframed frames on cache line with brighter yellow.

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
    branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py	2011-08-26 20:14:29 UTC (rev 39718)
@@ -520,11 +520,14 @@
 
         layout.prop(settings, "tracker")
 
+        layout.prop(settings, "adjust_frames")
+
         if settings.tracker == "SAD":
             layout.prop(settings, "min_correlation")
 
         layout.prop(settings, "speed")
         layout.prop(settings, "frames_limit")
+        layout.prop(settings, "margin")
 
 
 class CLIP_PT_stabilization(Panel):

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-08-26 20:14:29 UTC (rev 39718)
@@ -486,7 +486,7 @@
 	MovieClipUser user;
 	MovieClip *clip;
 
-	int first_time;
+	int first_time, frames;
 
 	TrackContext *track_context;
 	int num_tracks;
@@ -772,12 +772,25 @@
 	return pixels;
 }
 
+static ImBuf *acquire_frame_ibuf(MovieTrackingContext *context, int framenr)
+{
+	ImBuf *ibuf;
+	int framenr_old= context->user.framenr;
+
+	context->user.framenr= framenr;
+
+	ibuf= BKE_movieclip_acquire_ibuf_flag(context->clip, &context->user, 0);
+
+	context->user.framenr= framenr_old;
+
+	return ibuf;
+}
+
 static ImBuf *acquire_keyframed_ibuf(MovieTrackingContext *context, MovieTrackingTrack *track,
 			MovieTrackingMarker *marker, MovieTrackingMarker **marker_keyed)
 {
-	int framenr_old= context->user.framenr, framenr= marker->framenr;
+	int framenr= marker->framenr;
 	int a= marker-track->markers;
-	ImBuf *ibuf;
 
 	*marker_keyed= marker;
 
@@ -792,26 +805,23 @@
 		else a--;
 	}
 
-	context->user.framenr= framenr;
-
-	ibuf= BKE_movieclip_acquire_ibuf_flag(context->clip, &context->user, 0);
-
-	context->user.framenr= framenr_old;
-
-	return ibuf;
+	return acquire_frame_ibuf(context, framenr);
 }
 
-static ImBuf *acquire_frame_ibuf(MovieTrackingContext *context, int framenr)
+static ImBuf *acquire_adjust_ibuf(MovieTrackingContext *context, MovieTrackingTrack *track, MovieTrackingMarker *marker,
+			int curfra, MovieTrackingMarker **marker_keyed)
 {
-	ImBuf *ibuf;
-	int framenr_old= context->user.framenr;
+	ImBuf *ibuf= NULL;
 
-	context->user.framenr= framenr;
+	if(context->settings.adjframes == 0) {
+		ibuf= acquire_keyframed_ibuf(context, track, marker, marker_keyed);
+	} else {
+		ibuf= acquire_frame_ibuf(context, curfra);
 
-	ibuf= BKE_movieclip_acquire_ibuf_flag(context->clip, &context->user, 0);
+		/* use current marker as keyframed position */
+		*marker_keyed= marker;
+	}
 
-	context->user.framenr= framenr_old;
-
 	return ibuf;
 }
 
@@ -947,19 +957,36 @@
 
 		if(marker && (marker->flag&MARKER_DISABLED)==0 && marker->framenr==curfra) {
 #ifdef WITH_LIBMV
-			int width, height, origin[2], tracked= 0;
-			float pos[2];
+			int width, height, origin[2], tracked= 0, need_readjust= 0;
+			float pos[2], margin[2];
 			double x1, y1, x2, y2;
 			ImBuf *ibuf= NULL;
 			MovieTrackingMarker marker_new, *marker_keyed;
 
-			if(context->settings.tracker==TRACKER_KLT) {
+			if(!context->settings.adjframes) need_readjust= context->first_time;
+			else need_readjust= context->frames%context->settings.adjframes == 0;
+
+			/* margin from frame boundaries */
+			sub_v2_v2v2(margin, track->pat_max, track->pat_min);
+
+			margin[0]= MAX2(margin[0], (float)context->settings.margin / ibuf_new->x);
+			margin[1]= MAX2(margin[1], (float)context->settings.margin / ibuf_new->y);
+
+			/* do not track markers which are too close to boundary */
+			if(marker->pos[0]<margin[0] || marker->pos[0]>1.f-margin[0] ||
+			   marker->pos[1]<margin[1] || marker->pos[1]>1.f-margin[1]) {
+			}
+			else if(context->settings.tracker==TRACKER_KLT) {
 				int wndx, wndy;
 				float *patch_new;
 
-				if(!track_context->patch) {
+				if(need_readjust) {
 					/* calculate patch for keyframed position */
-					ibuf= acquire_keyframed_ibuf(context, track, marker, &marker_keyed);
+					ibuf= acquire_adjust_ibuf(context, track, marker, curfra, &marker_keyed);
+
+					if(track_context->patch)
+						MEM_freeN(track_context->patch);
+
 					track_context->patch= acquire_search_floatbuf(ibuf, track, marker_keyed, &width, &height, pos, origin);
 
 					IMB_freeImBuf(ibuf);
@@ -986,12 +1013,12 @@
 				float corr;
 				float warp[3][2]={{0}};
 
-				if(track_context->pattern==NULL) {
+				if(need_readjust) {
 					unsigned char *image;
 
 					/* calculate pattern for keyframed position */
+					ibuf= acquire_adjust_ibuf(context, track, marker, curfra, &marker_keyed);
 
-					ibuf= acquire_keyframed_ibuf(context, track, marker, &marker_keyed);
 					image= acquire_search_bytebuf(ibuf, track, marker_keyed, &width, &height, pos, origin);
 
 					memset(warp, 0, sizeof(warp));
@@ -1003,7 +1030,9 @@
 					/* pattern size is hardcoded to 16x16px in libmv */
 					track_context->patsize= 16;
 
-					track_context->pattern= MEM_callocN(sizeof(unsigned char)*track_context->patsize*track_context->patsize, "trackking pattern");
+					if(!track_context->pattern)
+						track_context->pattern= MEM_callocN(sizeof(unsigned char)*track_context->patsize*track_context->patsize, "trackking pattern");
+
 					libmv_SADSamplePattern(image, width, warp, track_context->pattern);
 
 					MEM_freeN(image);
@@ -1100,7 +1129,9 @@
 	}
 
 	IMB_freeImBuf(ibuf_new);
+
 	context->first_time= 0;
+	context->frames++;
 
 	return ok;
 }

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c	2011-08-26 20:14:29 UTC (rev 39718)
@@ -127,6 +127,7 @@
 				framenr= marker->framenr;
 
 				if(framenr!=i) glColor4ub(128, 128, 0, 96);
+				else if((marker->flag&MARKER_TRACKED)==0) glColor4ub(255, 255, 0, 196);
 				else glColor4ub(255, 255, 0, 96);
 
 				glRecti((i-sfra)*framelen, 0, (i-sfra+1)*framelen, 4);

Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c	2011-08-26 20:14:29 UTC (rev 39718)
@@ -1235,6 +1235,7 @@
 
 		if(settings->speed==TRACKING_SPEED_HALF) tmj->delay*= 2;
 		else if(settings->speed==TRACKING_SPEED_QUARTER) tmj->delay*= 4;
+		else if(settings->speed==TRACKING_SPEED_DOUBLE) tmj->delay/= 2;
 	}
 
 	track_init_markers(sc, clip);

Modified: branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h
===================================================================
--- branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/source/blender/makesdna/DNA_tracking_types.h	2011-08-26 20:14:29 UTC (rev 39718)
@@ -103,11 +103,13 @@
 	short tracker;	/* tracker to use */
 
 	/* ** common tracker settings ** */
-	short speed;	/* speed of tracking */
-	short frames_limit, pad;	/* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
+	short speed;			/* speed of tracking */
+	short frames_limit;		/* number of frames to be tarcked during single tracking session (if TRACKING_FRAMES_LIMIT is set) */
+	short margin;			/* margin from frame boundaries */
+	int adjframes;			/* re-adjust every N frames */
 
 	/* ** SAD tracker settings ** */
-	float corr, pad2;			/* minimal correlation which is still treated as successful tracking */
+	float corr;					/* minimal correlation which is still treated as successful tracking */
 
 	/* ** reconstructionsettings ** */
 	int keyframe1, keyframe2;	/* two keyframes for reconstrution initialization */
@@ -184,6 +186,7 @@
 #define TRACKING_SPEED_REALTIME		1
 #define TRACKING_SPEED_HALF			2
 #define TRACKING_SPEED_QUARTER		4
+#define TRACKING_SPEED_DOUBLE		5
 
 /* MovieTrackingStrabilization->flag */
 #define TRACKING_2D_STABILIZATION	(1<<0)

Modified: branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c	2011-08-26 20:12:54 UTC (rev 39717)
+++ branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c	2011-08-26 20:14:29 UTC (rev 39718)
@@ -224,6 +224,7 @@
 
 	static EnumPropertyItem speed_items[] = {
 		{0, "FASTEST", 0, "Fastest", "Track as fast as it's possible"},
+	    {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"},
 		{TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"},
 		{TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"},
 		{TRACKING_SPEED_QUARTER, "QUARTER", 0, "Quarter", "Track with quarter of realtime speed"},
@@ -245,14 +246,6 @@
 	RNA_def_property_enum_items(prop, tracker_items);
 	RNA_def_property_ui_text(prop, "tracker", "Tracking algorithm to use");
 
-	/* limit frames */
-	prop= RNA_def_property(srna, "min_correlation", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
-	RNA_def_property_float_sdna(prop, NULL, "corr");
-	RNA_def_property_range(prop, -1.0f, 1.0f);
-	RNA_def_property_ui_range(prop, -1.f, 1.f, .1, 3);
-	RNA_def_property_ui_text(prop, "Correlation", "Minimal value of correlation between mathed pattern and reference which is still treated as successful tracking");
-
 	/* speed */
 	prop= RNA_def_property(srna, "speed", PROP_ENUM, PROP_NONE);
 	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
@@ -266,6 +259,20 @@
 	RNA_def_property_range(prop, 0, INT_MAX);
 	RNA_def_property_ui_text(prop, "Frames Limit", "Amount of frames to be tracked during single tracking operation");
 
+	/* adjust frames */
+	prop= RNA_def_property(srna, "adjust_frames", PROP_INT, PROP_NONE);
+	RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list