[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