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);
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs