Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/extern
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-12-02 23:40:20 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-12-02 23:40:20 +0400
commitb7aefff198fddd8df0ca9149ec7cdcbb1034fa54 (patch)
treea0bce7de801ca4534314d675eef89cd4d6ab2acc /extern
parent48c5820049ecd26cd315478c50cc53855c78a61f (diff)
parent069f46ac89871ab5df5fce83230ff6a5ba0e5bc9 (diff)
Merging r42193 through r42349 from trunk into soc-2011-tomato
Diffstat (limited to 'extern')
-rw-r--r--extern/libmv/CMakeLists.txt6
-rwxr-xr-xextern/libmv/bundle.sh6
-rw-r--r--extern/libmv/libmv-capi.cpp8
-rw-r--r--extern/libmv/libmv-capi.h4
-rw-r--r--extern/libmv/libmv/tracking/esm_region_tracker.cc6
-rw-r--r--extern/libmv/libmv/tracking/klt_region_tracker.cc2
-rw-r--r--extern/libmv/libmv/tracking/lmicklt_region_tracker.cc6
-rw-r--r--extern/libmv/libmv/tracking/sad.cc23
-rw-r--r--extern/libmv/libmv/tracking/trklt_region_tracker.cc2
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.