[Bf-blender-cvs] [058e3f0] master: Tracking: Decouple C-API module into more granular files

Sergey Sharybin noreply at git.blender.org
Thu Sep 25 13:07:42 CEST 2014


Commit: 058e3f087e4db827e0dcb2b8ea662fa7cdc1ff6b
Author: Sergey Sharybin
Date:   Thu Sep 25 17:01:06 2014 +0600
Branches: master
https://developer.blender.org/rB058e3f087e4db827e0dcb2b8ea662fa7cdc1ff6b

Tracking: Decouple C-API module into more granular files

This way maintaining the C-API is a bit less tedious job
and makes code cleaner to follow.

Should be no functional changes.

===================================================================

M	extern/libmv/CMakeLists.txt
M	extern/libmv/SConscript
M	extern/libmv/bundle.sh
A	extern/libmv/intern/camera_intrinsics.cc
A	extern/libmv/intern/camera_intrinsics.h
A	extern/libmv/intern/detector.cc
A	extern/libmv/intern/detector.h
A	extern/libmv/intern/homography.cc
A	extern/libmv/intern/homography.h
A	extern/libmv/intern/image.cc
A	extern/libmv/intern/image.h
A	extern/libmv/intern/logging.cc
A	extern/libmv/intern/logging.h
A	extern/libmv/intern/reconstruction.cc
A	extern/libmv/intern/reconstruction.h
A	extern/libmv/intern/region.h
A	extern/libmv/intern/stub.cc
A	extern/libmv/intern/track_region.cc
A	extern/libmv/intern/track_region.h
A	extern/libmv/intern/tracks.cc
A	extern/libmv/intern/tracks.h
A	extern/libmv/intern/utildefines.h
D	extern/libmv/libmv-capi.cc
M	extern/libmv/libmv-capi.h
D	extern/libmv/libmv-capi_intern.h
D	extern/libmv/libmv-capi_stub.cc
D	extern/libmv/libmv-util.cc
D	extern/libmv/libmv-util.h
M	source/blender/blenkernel/intern/tracking.c

===================================================================

diff --git a/extern/libmv/CMakeLists.txt b/extern/libmv/CMakeLists.txt
index 9030ae9..d482819 100644
--- a/extern/libmv/CMakeLists.txt
+++ b/extern/libmv/CMakeLists.txt
@@ -35,12 +35,10 @@ set(INC_SYS
 
 set(SRC
 	libmv-capi.h
-	libmv-capi_intern.h
 )
 
 if(WITH_LIBMV)
 	add_definitions(
-		-DWITH_LIBMV
 		-DWITH_LIBMV_GUARDED_ALLOC
 		-DGOOGLE_GLOG_DLL_DECL=
 		-DLIBMV_NO_FAST_DETECTOR=
@@ -73,8 +71,14 @@ if(WITH_LIBMV)
 	)
 
 	list(APPEND SRC
-		libmv-capi.cc
-		libmv-util.cc
+		intern/camera_intrinsics.cc
+		intern/detector.cc
+		intern/homography.cc
+		intern/image.cc
+		intern/logging.cc
+		intern/reconstruction.cc
+		intern/track_region.cc
+		intern/tracks.cc
 		libmv/base/aligned_malloc.cc
 		libmv/image/array_nd.cc
 		libmv/image/convolve.cc
@@ -109,7 +113,15 @@ if(WITH_LIBMV)
 		libmv/tracking/track_region.cc
 		libmv/tracking/trklt_region_tracker.cc
 
-		libmv-util.h
+
+		intern/camera_intrinsics.h
+		intern/detector.h
+		intern/homography.h
+		intern/image.h
+		intern/logging.h
+		intern/reconstruction.h
+		intern/track_region.h
+		intern/tracks.h
 		libmv/base/aligned_malloc.h
 		libmv/base/id_generator.h
 		libmv/base/scoped_ptr.h
@@ -217,7 +229,7 @@ if(WITH_LIBMV)
 	endif()
 else()
 	list(APPEND SRC
-		libmv-capi_stub.cc
+		intern/stub.cc
 	)
 endif()
 
diff --git a/extern/libmv/SConscript b/extern/libmv/SConscript
index 6156dd4..857d7de 100644
--- a/extern/libmv/SConscript
+++ b/extern/libmv/SConscript
@@ -24,11 +24,10 @@ if env['WITH_BF_LIBMV']:
         defs.append('CERES_TR1_SHARED_PTR')
 
     defs.append('GOOGLE_GLOG_DLL_DECL=')
-    defs.append('WITH_LIBMV')
     defs.append('WITH_LIBMV_GUARDED_ALLOC')
     defs.append('LIBMV_NO_FAST_DETECTOR')
 
-    src = env.Glob('*.cc')
+    src = env.Glob('intern/*.cc')
     src += env.Glob('libmv/base/*.cc')
     src += env.Glob('libmv/image/*.cc')
     src += env.Glob('libmv/multiview/*.cc')
@@ -52,7 +51,7 @@ if env['WITH_BF_LIBMV']:
         src += env.Glob("third_party/glog/src/*.cc")
         incs += ' ./third_party/glog/src'
 else:
-    src = env.Glob("libmv-capi_stub.cc")
+    src = env.Glob("intern/stub.cc")
 
 src = [src for src in src if src.find('_test.cc') == -1]
 
diff --git a/extern/libmv/bundle.sh b/extern/libmv/bundle.sh
index 0560ab0..d394d2c 100755
--- a/extern/libmv/bundle.sh
+++ b/extern/libmv/bundle.sh
@@ -7,7 +7,7 @@ else
   exit 1
 fi
 
-BRANCH="devel"
+BRANCH="master"
 
 repo="git://git.blender.org/libmv.git"
 tmp=`mktemp -d`
@@ -128,12 +128,10 @@ set(INC_SYS
 
 set(SRC
 	libmv-capi.h
-	libmv-capi_intern.h
 )
 
 if(WITH_LIBMV)
 	add_definitions(
-		-DWITH_LIBMV
 		-DWITH_LIBMV_GUARDED_ALLOC
 		-DGOOGLE_GLOG_DLL_DECL=
 		-DLIBMV_NO_FAST_DETECTOR=
@@ -166,11 +164,29 @@ if(WITH_LIBMV)
 	)
 
 	list(APPEND SRC
-		libmv-capi.cc
-		libmv-util.cc
+		intern/camera_intrinsics.cc
+		intern/detector.cc
+		intern/frame_accessor.cc
+		intern/homography.cc
+		intern/image.cc
+		intern/logging.cc
+		intern/reconstruction.cc
+		intern/track_region.cc
+		intern/tracks.cc
+		intern/tracksN.cc
 ${sources}
 ${third_sources}
-		libmv-util.h
+
+		intern/camera_intrinsics.h
+		intern/detector.h
+		intern/frame_accessor.h
+		intern/homography.h
+		intern/image.h
+		intern/logging.h
+		intern/reconstruction.h
+		intern/track_region.h
+		intern/tracks.h
+		intern/tracksN.h
 ${headers}
 
 ${third_headers}
@@ -287,11 +303,10 @@ if env['WITH_BF_LIBMV']:
         defs.append('CERES_TR1_SHARED_PTR')
 
     defs.append('GOOGLE_GLOG_DLL_DECL=')
-    defs.append('WITH_LIBMV')
     defs.append('WITH_LIBMV_GUARDED_ALLOC')
     defs.append('LIBMV_NO_FAST_DETECTOR')
 
-    src = env.Glob('*.cc')
+    src = env.Glob('intern/*.cc')
 $src
 
     incs += ' ../Eigen3 third_party/gflags third_party/glog/src third_party/ceres/include third_party/ceres/config ../../intern/guardedalloc'
@@ -309,7 +324,7 @@ ${win_src}
         src += env.Glob("third_party/glog/src/*.cc")
         incs += ' ./third_party/glog/src'
 else:
-    src = env.Glob("libmv-capi_stub.cc")
+    src = env.Glob("intern/stub.cc")
 
 src = [src for src in src if src.find('_test.cc') == -1]
 
diff --git a/extern/libmv/intern/camera_intrinsics.cc b/extern/libmv/intern/camera_intrinsics.cc
new file mode 100644
index 0000000..e8b9997
--- /dev/null
+++ b/extern/libmv/intern/camera_intrinsics.cc
@@ -0,0 +1,354 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2011 Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Blender Foundation,
+ *                 Sergey Sharybin
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "intern/camera_intrinsics.h"
+#include "intern/utildefines.h"
+#include "libmv/simple_pipeline/camera_intrinsics.h"
+
+using libmv::CameraIntrinsics;
+using libmv::DivisionCameraIntrinsics;
+using libmv::PolynomialCameraIntrinsics;
+
+libmv_CameraIntrinsics *libmv_cameraIntrinsicsNew(
+    const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options) {
+  CameraIntrinsics *camera_intrinsics =
+    libmv_cameraIntrinsicsCreateFromOptions(libmv_camera_intrinsics_options);
+  return (libmv_CameraIntrinsics *) camera_intrinsics;
+}
+
+libmv_CameraIntrinsics *libmv_cameraIntrinsicsCopy(
+    const libmv_CameraIntrinsics* libmv_intrinsics) {
+  const CameraIntrinsics *orig_intrinsics =
+    (const CameraIntrinsics *) libmv_intrinsics;
+
+  CameraIntrinsics *new_intrinsics = NULL;
+  switch (orig_intrinsics->GetDistortionModelType()) {
+    case libmv::DISTORTION_MODEL_POLYNOMIAL:
+      {
+        const PolynomialCameraIntrinsics *polynomial_intrinsics =
+          static_cast<const PolynomialCameraIntrinsics*>(orig_intrinsics);
+        new_intrinsics = LIBMV_OBJECT_NEW(PolynomialCameraIntrinsics,
+                                          *polynomial_intrinsics);
+        break;
+      }
+    case libmv::DISTORTION_MODEL_DIVISION:
+      {
+        const DivisionCameraIntrinsics *division_intrinsics =
+          static_cast<const DivisionCameraIntrinsics*>(orig_intrinsics);
+        new_intrinsics = LIBMV_OBJECT_NEW(DivisionCameraIntrinsics,
+                                          *division_intrinsics);
+        break;
+      }
+    default:
+      assert(!"Unknown distortion model");
+  }
+  return (libmv_CameraIntrinsics *) new_intrinsics;
+}
+
+void libmv_cameraIntrinsicsDestroy(libmv_CameraIntrinsics* libmv_intrinsics) {
+  LIBMV_OBJECT_DELETE(libmv_intrinsics, CameraIntrinsics);
+}
+
+void libmv_cameraIntrinsicsUpdate(
+    const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
+    libmv_CameraIntrinsics* libmv_intrinsics) {
+  CameraIntrinsics *camera_intrinsics = (CameraIntrinsics *) libmv_intrinsics;
+
+  double focal_length = libmv_camera_intrinsics_options->focal_length;
+  double principal_x = libmv_camera_intrinsics_options->principal_point_x;
+  double principal_y = libmv_camera_intrinsics_options->principal_point_y;
+  int image_width = libmv_camera_intrinsics_options->image_width;
+  int image_height = libmv_camera_intrinsics_options->image_height;
+
+  /* Try avoid unnecessary updates, so pre-computed distortion grids
+   * are not freed.
+   */
+
+  if (camera_intrinsics->focal_length() != focal_length) {
+    camera_intrinsics->SetFocalLength(focal_length, focal_length);
+  }
+
+  if (camera_intrinsics->principal_point_x() != principal_x ||
+      camera_intrinsics->principal_point_y() != principal_y) {
+    camera_intrinsics->SetPrincipalPoint(principal_x, principal_y);
+  }
+
+  if (camera_intrinsics->image_width() != image_width ||
+      camera_intrinsics->image_height() != image_height) {
+    camera_intrinsics->SetImageSize(image_width, image_height);
+  }
+
+  switch (libmv_camera_intrinsics_options->distortion_model) {
+    case LIBMV_DISTORTION_MODEL_POLYNOMIAL:
+      {
+        assert(camera_intrinsics->GetDistortionModelType() ==
+               libmv::DISTORTION_MODEL_POLYNOMIAL);
+
+        PolynomialCameraIntrinsics *polynomial_intrinsics =
+          (PolynomialCameraIntrinsics *) camera_intrinsics;
+
+        double k1 = libmv_camera_intrinsics_options->polynomial_k1;
+        double k2 = libmv_camera_intrinsics_options->polynomial_k2;
+        double k3 = libmv_camera_intrinsics_options->polynomial_k3;
+
+        if (polynomial_intrinsics->k1() != k1 ||
+            polynomial_intrinsics->k2() != k2 ||
+            polynomial_intrinsics->k3() != k3) {
+          polynomial_intrinsics->SetRadialDistortion(k1, k2, k3);
+        }
+        break;
+      }
+
+    case LIBMV_DISTORTION_MODEL_DIVISION:
+      {
+        assert(camera_intrinsics->GetDistortionModelType() ==
+               libmv::DISTORTION_MODEL_DIVISION);
+
+        DivisionCameraIntrinsics *division_intrinsics =
+          (DivisionCameraIntrinsics *) camera_intrinsics;
+
+        double k1 = libmv_camera_intrinsics_options->division_k1;
+        double k2 = libmv_camera_intrinsics_options->division_k2;
+
+        if (division_intrinsics->k1() != k1 ||
+            division_intrinsics->k2() != k2) {
+          division_intrinsics->SetDistortion(k1, k2);
+        }
+
+        break;
+      }
+
+    default:
+      assert(!"Unknown distortion model");
+  }
+}
+
+void libmv_cameraIntrinsicsSetThreads(libmv_CameraIntrinsics* libmv_intrinsics,
+                                      int threads) {
+  CameraIntrinsics *camera_intrinsics = (CameraIntrinsics *) libmv_intrinsics;
+  camera_intrinsics->SetThreads(threads);
+}
+
+void libmv_cameraIntrinsicsExtractOptions(
+    const libmv_CameraIntrinsics* libmv_intrinsics,
+    libmv_Came

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list