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

Sergey Sharybin g.ulairi at gmail.com
Thu Nov 10 12:16:41 CET 2011


Revision: 41726
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41726
Author:   nazgul
Date:     2011-11-10 11:16:40 +0000 (Thu, 10 Nov 2011)
Log Message:
-----------
Camera tracking integration: more code cleanup

Modified Paths:
--------------
    branches/soc-2011-tomato/extern/libmv/libmv-capi.cpp
    branches/soc-2011-tomato/extern/libmv/libmv-capi.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c

Modified: branches/soc-2011-tomato/extern/libmv/libmv-capi.cpp
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv-capi.cpp	2011-11-10 11:16:33 UTC (rev 41725)
+++ branches/soc-2011-tomato/extern/libmv/libmv-capi.cpp	2011-11-10 11:16:40 UTC (rev 41726)
@@ -59,13 +59,6 @@
 #  define snprintf _snprintf
 #endif
 
-#define DEFAULT_WINDOW_HALFSIZE	5
-
-typedef struct libmv_RegionTracker {
-	libmv::EsmRegionTracker *klt_region_tracker;
-	libmv::RegionTracker *region_tracker;
-} libmv_RegionTracker;
-
 typedef struct libmv_Reconstruction {
 	libmv::EuclideanReconstruction reconstruction;
 
@@ -113,22 +106,18 @@
 
 /* ************ RegionTracker ************ */
 
-libmv_RegionTracker *libmv_regionTrackerNew(int max_iterations, int pyramid_level)
+libmv_RegionTracker *libmv_regionTrackerNew(int max_iterations, int pyramid_level, int half_window_size)
 {
 	libmv::EsmRegionTracker *klt_region_tracker = new libmv::EsmRegionTracker;
 
-	klt_region_tracker->half_window_size = DEFAULT_WINDOW_HALFSIZE;
+	klt_region_tracker->half_window_size = half_window_size;
 	klt_region_tracker->max_iterations = max_iterations;
 	klt_region_tracker->min_determinant = 1e-4;
 
 	libmv::PyramidRegionTracker *region_tracker =
 		new libmv::PyramidRegionTracker(klt_region_tracker, pyramid_level);
 
-	libmv_RegionTracker *configured_region_tracker = new libmv_RegionTracker;
-	configured_region_tracker->klt_region_tracker = klt_region_tracker;
-	configured_region_tracker->region_tracker = region_tracker;
-
-	return configured_region_tracker;
+	return (libmv_RegionTracker *)region_tracker;
 }
 
 static void floatBufToImage(const float *buf, int width, int height, libmv::FloatImage *image)
@@ -270,18 +259,11 @@
 #endif
 
 int libmv_regionTrackerTrack(libmv_RegionTracker *libmv_tracker, const float *ima1, const float *ima2,
-			 int width, int height, int half_window_size,
-			 double x1, double y1, double *x2, double *y2)
+			 int width, int height, double x1, double y1, double *x2, double *y2)
 {
-	libmv::RegionTracker *region_tracker;
-	libmv::EsmRegionTracker *klt_region_tracker;
+	libmv::RegionTracker *region_tracker = (libmv::RegionTracker *)libmv_tracker;
 	libmv::FloatImage old_patch, new_patch;
 
-	klt_region_tracker = libmv_tracker->klt_region_tracker;
-	region_tracker = libmv_tracker->region_tracker;
-
-	klt_region_tracker->half_window_size = half_window_size;
-
 	floatBufToImage(ima1, width, height, &old_patch);
 	floatBufToImage(ima2, width, height, &new_patch);
 
@@ -304,8 +286,9 @@
 
 void libmv_regionTrackerDestroy(libmv_RegionTracker *libmv_tracker)
 {
-	delete libmv_tracker->region_tracker;
-	delete libmv_tracker;
+	libmv::RegionTracker *region_tracker= (libmv::RegionTracker *)libmv_tracker;
+
+	delete region_tracker;
 }
 
 /* ************ Tracks ************ */

Modified: branches/soc-2011-tomato/extern/libmv/libmv-capi.h
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv-capi.h	2011-11-10 11:16:33 UTC (rev 41725)
+++ branches/soc-2011-tomato/extern/libmv/libmv-capi.h	2011-11-10 11:16:40 UTC (rev 41726)
@@ -43,10 +43,9 @@
 void libmv_setLoggingVerbosity(int verbosity);
 
 /* RegionTracker */
-struct libmv_RegionTracker *libmv_regionTrackerNew(int max_iterations, int pyramid_level);
+struct libmv_RegionTracker *libmv_regionTrackerNew(int max_iterations, int pyramid_level, int half_window_size);
 int libmv_regionTrackerTrack(struct libmv_RegionTracker *libmv_tracker, const float *ima1, const float *ima2,
-			int width, int height, int half_window_size,
-			double  x1, double  y1, double *x2, double *y2);
+			int width, int height, double  x1, double  y1, double *x2, double *y2);
 void libmv_regionTrackerDestroy(struct libmv_RegionTracker *libmv_tracker);
 
 /* SAD Tracker */

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-11-10 11:16:33 UTC (rev 41725)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c	2011-11-10 11:16:40 UTC (rev 41726)
@@ -118,10 +118,6 @@
 		}
 	}
 	else if(event==CLAMP_SEARCH_DIM) {
-		float max_pyramid_level_factor = 1.0;
-		if (track->tracker == TRACKER_KLT) {
-			max_pyramid_level_factor = 1 << (track->pyramid_levels - 1);
-		}
 		for(a= 0; a<2; a++) {
 			/* search shouldn't be resized smaller than pattern */
 			track->search_min[a]= MIN2(pat_min[a], track->search_min[a]);
@@ -144,7 +140,6 @@
 			}
 		}
 	}
-
 	else if(event==CLAMP_PYRAMID_LEVELS || (event==CLAMP_SEARCH_DIM && track->tracker == TRACKER_KLT))  {
 		float dim[2];
 		sub_v2_v2v2(dim, track->pat_max, track->pat_min);
@@ -616,18 +611,23 @@
 							float search_size_y= (track->search_max[1]-track->search_min[1])*height;
 							float pattern_size_x= (track->pat_max[0]-track->pat_min[0])*width;
 							float pattern_size_y= (track->pat_max[1]-track->pat_min[1])*height;
+							int wndx, wndy;
 
 							/* compute the maximum pyramid size */
-							double search_to_pattern_ratio= MIN2(search_size_x,  search_size_y)
+							float search_to_pattern_ratio= MIN2(search_size_x,  search_size_y)
 								/ MAX2(pattern_size_x, pattern_size_y);
-							double log2_search_to_pattern_ratio = log(floor(search_to_pattern_ratio)) / M_LN2;
+							float log2_search_to_pattern_ratio = log(floor(search_to_pattern_ratio)) / M_LN2;
 							int max_pyramid_levels= floor(log2_search_to_pattern_ratio + 1);
 
 							/* try to accomodate the user's choice of pyramid level in a way
 							 * that doesn't cause the coarsest pyramid pattern to be larger
 							 * than the search size */
 							int level= MIN2(track_context->track->pyramid_levels, max_pyramid_levels);
-							track_context->region_tracker= libmv_regionTrackerNew(100, level);
+
+							wndx= (int)((track->pat_max[0]-track->pat_min[0])*width)/2;
+							wndy= (int)((track->pat_max[1]-track->pat_min[1])*height)/2;
+
+							track_context->region_tracker= libmv_regionTrackerNew(100, level, MAX2(wndx, wndy));
 						}
 						else if(track_context->track->tracker==TRACKER_SAD) {
 							/* nothing to initialize */
@@ -877,7 +877,7 @@
 	while(a>=0 && a<track->markersnr) {
 		int next= (context->backwards) ? a+1 : a-1;
 		int is_keyframed= 0;
-		MovieTrackingMarker *marker= &track->markers[a];
+		MovieTrackingMarker *cur_marker= &track->markers[a];
 		MovieTrackingMarker *next_marker= NULL;
 
 		if(next>=0 && next<track->markersnr)
@@ -887,11 +887,11 @@
 		if(next_marker && next_marker->flag&MARKER_DISABLED)
 			is_keyframed= 1;
 
-		is_keyframed|= (marker->flag&MARKER_TRACKED)==0;
+		is_keyframed|= (cur_marker->flag&MARKER_TRACKED)==0;
 
 		if(is_keyframed) {
-			framenr= marker->framenr;
-			*marker_keyed= marker;
+			framenr= cur_marker->framenr;
+			*marker_keyed= cur_marker;
 			break;
 		}
 
@@ -1077,7 +1077,6 @@
 				onbound= 1;
 			}
 			else if(track_context->track->tracker==TRACKER_KLT) {
-				int wndx, wndy;
 				float *patch_new;
 
 				if(need_readjust) {
@@ -1100,11 +1099,8 @@
 				x2= pos[0];
 				y2= pos[1];
 
-				wndx= (int)((track->pat_max[0]-track->pat_min[0])*ibuf_new->x)/2;
-				wndy= (int)((track->pat_max[1]-track->pat_min[1])*ibuf_new->y)/2;
-
 				tracked= libmv_regionTrackerTrack(track_context->region_tracker, track_context->patch, patch_new,
-							width, height, MAX2(wndx, wndy), x1, y1, &x2, &y2);
+							width, height, x1, y1, &x2, &y2);
 
 				MEM_freeN(patch_new);
 			}




More information about the Bf-blender-cvs mailing list