diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-02 23:40:20 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-02 23:40:20 +0400 |
commit | b7aefff198fddd8df0ca9149ec7cdcbb1034fa54 (patch) | |
tree | a0bce7de801ca4534314d675eef89cd4d6ab2acc /extern/libmv | |
parent | 48c5820049ecd26cd315478c50cc53855c78a61f (diff) | |
parent | 069f46ac89871ab5df5fce83230ff6a5ba0e5bc9 (diff) |
Merging r42193 through r42349 from trunk into soc-2011-tomato
Diffstat (limited to 'extern/libmv')
-rw-r--r-- | extern/libmv/CMakeLists.txt | 6 | ||||
-rwxr-xr-x | extern/libmv/bundle.sh | 6 | ||||
-rw-r--r-- | extern/libmv/libmv-capi.cpp | 8 | ||||
-rw-r--r-- | extern/libmv/libmv-capi.h | 4 | ||||
-rw-r--r-- | extern/libmv/libmv/tracking/esm_region_tracker.cc | 6 | ||||
-rw-r--r-- | extern/libmv/libmv/tracking/klt_region_tracker.cc | 2 | ||||
-rw-r--r-- | extern/libmv/libmv/tracking/lmicklt_region_tracker.cc | 6 | ||||
-rw-r--r-- | extern/libmv/libmv/tracking/sad.cc | 23 | ||||
-rw-r--r-- | extern/libmv/libmv/tracking/trklt_region_tracker.cc | 2 |
9 files changed, 40 insertions, 23 deletions
diff --git a/extern/libmv/CMakeLists.txt b/extern/libmv/CMakeLists.txt index 6f0d5f3d126..0349ad72000 100644 --- a/extern/libmv/CMakeLists.txt +++ b/extern/libmv/CMakeLists.txt @@ -175,9 +175,9 @@ if(WIN32) if(MSVC) set(MSVC_OFLAGS O1 O2 Ox) - foreach(FLAG ) - string(REPLACE "" "Od" CMAKE_CXX_FLAGS_RELEASE "") - string(REPLACE "" "Od" CMAKE_C_FLAGS_RELWITHDEBINFO "") + foreach(FLAG ${MSVC_OFLAGS}) + string(REPLACE "${FLAG}" "Od" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + string(REPLACE "${FLAG}" "Od" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") endforeach() endif() else(WIN32) diff --git a/extern/libmv/bundle.sh b/extern/libmv/bundle.sh index 690f78df387..fb336c66d61 100755 --- a/extern/libmv/bundle.sh +++ b/extern/libmv/bundle.sh @@ -183,9 +183,9 @@ IF(WIN32) IF(MSVC) set(MSVC_OFLAGS O1 O2 Ox) - foreach(FLAG ${MSVC_OFLAGS}) - string(REPLACE "${FLAG}" "Od" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") - string(REPLACE "${FLAG}" "Od" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + foreach(FLAG \${MSVC_OFLAGS}) + string(REPLACE "\${FLAG}" "Od" CMAKE_CXX_FLAGS_RELEASE "\${CMAKE_CXX_FLAGS_RELEASE}") + string(REPLACE "\${FLAG}" "Od" CMAKE_C_FLAGS_RELWITHDEBINFO "\${CMAKE_C_FLAGS_RELWITHDEBINFO}") endforeach() ENDIF(MSVC) ELSE(WIN32) diff --git a/extern/libmv/libmv-capi.cpp b/extern/libmv/libmv-capi.cpp index f08aea9fbd1..aa05279d731 100644 --- a/extern/libmv/libmv-capi.cpp +++ b/extern/libmv/libmv-capi.cpp @@ -297,16 +297,16 @@ void libmv_regionTrackerDestroy(libmv_RegionTracker *libmv_tracker) /* ************ Tracks ************ */ void libmv_SADSamplePattern(unsigned char *image, int stride, - float warp[3][2], unsigned char *pattern) + float warp[3][2], unsigned char *pattern, int pattern_size) { libmv::mat32 mat32; memcpy(mat32.data, warp, sizeof(float)*3*2); - libmv::SamplePattern(image, stride, mat32, pattern, 16); + libmv::SamplePattern(image, stride, mat32, pattern, pattern_size); } -float libmv_SADTrackerTrack(unsigned char *pattern, unsigned char *warped, unsigned char *image, int stride, +float libmv_SADTrackerTrack(unsigned char *pattern, unsigned char *warped, int pattern_size, unsigned char *image, int stride, int width, int height, float warp[3][2]) { float result; @@ -314,7 +314,7 @@ float libmv_SADTrackerTrack(unsigned char *pattern, unsigned char *warped, unsig memcpy(mat32.data, warp, sizeof(float)*3*2); - result = libmv::Track(pattern, warped, 16, image, stride, width, height, &mat32, 16, 16); + result = libmv::Track(pattern, warped, pattern_size, image, stride, width, height, &mat32, 16, 16); memcpy(warp, mat32.data, sizeof(float)*3*2); diff --git a/extern/libmv/libmv-capi.h b/extern/libmv/libmv-capi.h index 536f8a5f14c..321593520b5 100644 --- a/extern/libmv/libmv-capi.h +++ b/extern/libmv/libmv-capi.h @@ -50,8 +50,8 @@ void libmv_regionTrackerDestroy(struct libmv_RegionTracker *libmv_tracker); /* SAD Tracker */ void libmv_SADSamplePattern(unsigned char *image, int stride, - float warp[3][2], unsigned char *pattern); -float libmv_SADTrackerTrack(unsigned char *pattern, unsigned char *warped, unsigned char *image, + float warp[3][2], unsigned char *pattern, int pattern_size); +float libmv_SADTrackerTrack(unsigned char *pattern, unsigned char *warped, int pattern_size, unsigned char *image, int stride, int width, int height, float warp[3][2]); /* Tracks */ diff --git a/extern/libmv/libmv/tracking/esm_region_tracker.cc b/extern/libmv/libmv/tracking/esm_region_tracker.cc index 01edee3bbb5..844b5ff3cb9 100644 --- a/extern/libmv/libmv/tracking/esm_region_tracker.cc +++ b/extern/libmv/libmv/tracking/esm_region_tracker.cc @@ -31,7 +31,7 @@ namespace libmv { // TODO(keir): Reduce duplication between here and the other region trackers. -bool RegionIsInBounds(const FloatImage &image1, +static bool RegionIsInBounds(const FloatImage &image1, double x, double y, int half_window_size) { // Check the minimum coordinates. @@ -56,7 +56,7 @@ bool RegionIsInBounds(const FloatImage &image1, // Sample a region centered at x,y in image with size extending by half_width // from x,y. Channels specifies the number of channels to sample from. -void SamplePattern(const FloatImage &image, +static void SamplePattern(const FloatImage &image, double x, double y, int half_width, int channels, @@ -74,7 +74,7 @@ void SamplePattern(const FloatImage &image, // Estimate "reasonable" error by computing autocorrelation for a small shift. // TODO(keir): Add a facility for -double EstimateReasonableError(const FloatImage &image, +static double EstimateReasonableError(const FloatImage &image, double x, double y, int half_width) { double error = 0.0; diff --git a/extern/libmv/libmv/tracking/klt_region_tracker.cc b/extern/libmv/libmv/tracking/klt_region_tracker.cc index 78ce0be603c..c8e605de572 100644 --- a/extern/libmv/libmv/tracking/klt_region_tracker.cc +++ b/extern/libmv/libmv/tracking/klt_region_tracker.cc @@ -63,7 +63,7 @@ static void ComputeTrackingEquation(const Array3Df &image_and_gradient1, } } -bool RegionIsInBounds(const FloatImage &image1, +static bool RegionIsInBounds(const FloatImage &image1, double x, double y, int half_window_size) { // Check the minimum coordinates. diff --git a/extern/libmv/libmv/tracking/lmicklt_region_tracker.cc b/extern/libmv/libmv/tracking/lmicklt_region_tracker.cc index 5ac96e66175..c06a1d3302c 100644 --- a/extern/libmv/libmv/tracking/lmicklt_region_tracker.cc +++ b/extern/libmv/libmv/tracking/lmicklt_region_tracker.cc @@ -29,7 +29,7 @@ namespace libmv { // TODO(keir): Reduce duplication between here and the other region trackers. -bool RegionIsInBounds(const FloatImage &image1, +static bool RegionIsInBounds(const FloatImage &image1, double x, double y, int half_window_size) { // Check the minimum coordinates. @@ -54,7 +54,7 @@ bool RegionIsInBounds(const FloatImage &image1, // Sample a region centered at x,y in image with size extending by half_width // from x,y. Channels specifies the number of channels to sample from. -void SamplePattern(const FloatImage &image, +static void SamplePattern(const FloatImage &image, double x, double y, int half_width, int channels, @@ -71,7 +71,7 @@ void SamplePattern(const FloatImage &image, } // Estimate "reasonable" error by computing autocorrelation for a small shift. -double EstimateReasonableError(const FloatImage &image, +static double EstimateReasonableError(const FloatImage &image, double x, double y, int half_width) { double error = 0.0; diff --git a/extern/libmv/libmv/tracking/sad.cc b/extern/libmv/libmv/tracking/sad.cc index 9b446bb4c35..0876ef2fe73 100644 --- a/extern/libmv/libmv/tracking/sad.cc +++ b/extern/libmv/libmv/tracking/sad.cc @@ -25,6 +25,7 @@ #include "libmv/tracking/sad.h" #include <stdlib.h> #include <math.h> +#include <stdio.h> namespace libmv { @@ -78,15 +79,31 @@ void SamplePattern(ubyte* image, int stride, mat32 warp, ubyte* pattern, int siz #ifdef __SSE2__ #include <emmintrin.h> -static uint SAD(const ubyte* pattern, const ubyte* image, int stride, int size) { + static uint SAD(/*const*/ ubyte* pattern, /*const*/ ubyte* image, int stride, int size) { + uint sad = 0; __m128i a = _mm_setzero_si128(); + for(int i = 0; i < size; i++) { - for(int j = 0; j < size/16; j++) { + int j = 0; + + for(j = 0; j < size/16; j++) { + if((i*size/16+j) % 32 == 0) { + sad += _mm_extract_epi16(a,0) + _mm_extract_epi16(a,4); + a = _mm_setzero_si128(); + } + a = _mm_adds_epu16(a, _mm_sad_epu8( _mm_loadu_si128((__m128i*)(pattern+i*size+j*16)), _mm_loadu_si128((__m128i*)(image+i*stride+j*16)))); } + + for(j = j*16; j < size; j++) { + sad += abs((int)pattern[i*size+j] - image[i*stride+j]); + } } - return _mm_extract_epi16(a,0) + _mm_extract_epi16(a,4); + + sad += _mm_extract_epi16(a,0) + _mm_extract_epi16(a,4); + + return sad; } #else static uint SAD(const ubyte* pattern, const ubyte* image, int stride, int size) { diff --git a/extern/libmv/libmv/tracking/trklt_region_tracker.cc b/extern/libmv/libmv/tracking/trklt_region_tracker.cc index 7e51787ebac..f19315b6b11 100644 --- a/extern/libmv/libmv/tracking/trklt_region_tracker.cc +++ b/extern/libmv/libmv/tracking/trklt_region_tracker.cc @@ -81,7 +81,7 @@ static void ComputeTrackingEquation(const Array3Df &image_and_gradient1, *e = (A + lambda*Mat2f::Identity())*Di*(V - W) + 0.5*(S - R); } -bool RegionIsInBounds(const FloatImage &image1, +static bool RegionIsInBounds(const FloatImage &image1, double x, double y, int half_window_size) { // Check the minimum coordinates. |