[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56769] trunk/blender: Cleanup and small improvements to libmv

Sergey Sharybin sergey.vfx at gmail.com
Mon May 13 16:39:06 CEST 2013


Revision: 56769
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56769
Author:   nazgul
Date:     2013-05-13 14:39:06 +0000 (Mon, 13 May 2013)
Log Message:
-----------
Cleanup and small improvements to libmv

- Added const modifiers where it makes sense and
  helps keep code safe.
- Reshuffled argument to match <inputs>,<outputs>
  convention on parameters.
- Pass values to ApplyRadialDistortionCameraIntrinsics
  by a constant reference.
  This will save lots of CPU ticks passing relatively
  heavy jet objects to this function when running
  bundle adjustment.

Modified Paths:
--------------
    trunk/blender/extern/libmv/ChangeLog
    trunk/blender/extern/libmv/libmv/simple_pipeline/camera_intrinsics.h
    trunk/blender/extern/libmv/libmv/simple_pipeline/detect.cc
    trunk/blender/extern/libmv/libmv/simple_pipeline/detect.h
    trunk/blender/extern/libmv/libmv/simple_pipeline/reconstruction_scale.cc
    trunk/blender/extern/libmv/libmv-capi.cc
    trunk/blender/extern/libmv/libmv-capi.h
    trunk/blender/source/blender/blenkernel/intern/tracking.c

Modified: trunk/blender/extern/libmv/ChangeLog
===================================================================
--- trunk/blender/extern/libmv/ChangeLog	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/ChangeLog	2013-05-13 14:39:06 UTC (rev 56769)
@@ -1,3 +1,19 @@
+commit 61ac890908a397860cabc60207500039876532cc
+Author: Sergey Sharybin <sergey.vfx at gmail.com>
+Date:   Mon May 13 04:44:14 2013 +0600
+
+    Pass ApplyRadialDistortionCameraIntrinsics input arguments by reference
+    
+    This shall save some CPU time on calling copy constructor and give
+    some boost of bundle adjuster (where jet could take some time to
+    be passed by value).
+
+commit 4d005ff0771e0e28159be25f8da69d983641384f
+Author: Sergey Sharybin <sergey.vfx at gmail.com>
+Date:   Mon May 13 04:22:05 2013 +0600
+
+    Minor code style cleanup.
+
 commit f003b9e3031db4592c2d91b1ea2538c73b7e767d
 Author: Sergey Sharybin <sergey.vfx at gmail.com>
 Date:   Sun May 12 22:34:54 2013 +0600
@@ -618,26 +634,3 @@
     This information is useful, but in cases when you, say,
     working on a bundler it's annoying to scroll all the
     information up.
-
-commit ac252bb1250b3028b9c94736b644e7ab4e7b14b8
-Author: Sergey Sharybin <sergey.vfx at gmail.com>
-Date:   Fri Mar 1 17:36:19 2013 +0600
-
-    Move radial distortion code to own templated function
-    
-    This shall not lead to any functional changes, just
-    avoids radial distortion code duplicated in camera
-    intrinsics and bundling code.
-    
-    For fancier bundle adjustment support of  different
-    distortion models this is not actually enough and
-    would need to make some bigger changes, but this
-    changes makes code a bit easier to maintain already.
-
-commit c253b794612dd529e1d3a9bd7a7c41c32c9a9abb
-Author: Sergey Sharybin <sergey.vfx at gmail.com>
-Date:   Fri Mar 1 17:33:27 2013 +0600
-
-    Use threaded cost function, jacobian and linear solver
-    computation, so bundling is as fast as it could be with
-    current parameter block structure.

Modified: trunk/blender/extern/libmv/libmv/simple_pipeline/camera_intrinsics.h
===================================================================
--- trunk/blender/extern/libmv/libmv/simple_pipeline/camera_intrinsics.h	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/libmv/simple_pipeline/camera_intrinsics.h	2013-05-13 14:39:06 UTC (rev 56769)
@@ -172,14 +172,17 @@
 // camera coordinates (i.e. the principal point is at (0, 0)) to get image
 // coordinates in pixels. Templated for use with autodifferentiation.
 template <typename T>
-inline void ApplyRadialDistortionCameraIntrinsics(T focal_length_x,
-                                                  T focal_length_y,
-                                                  T principal_point_x,
-                                                  T principal_point_y,
-                                                  T k1, T k2, T k3,
-                                                  T p1, T p2,
-                                                  T normalized_x,
-                                                  T normalized_y,
+inline void ApplyRadialDistortionCameraIntrinsics(const T &focal_length_x,
+                                                  const T &focal_length_y,
+                                                  const T &principal_point_x,
+                                                  const T &principal_point_y,
+                                                  const T &k1,
+                                                  const T &k2,
+                                                  const T &k3,
+                                                  const T &p1,
+                                                  const T &p2,
+                                                  const T &normalized_x,
+                                                  const T &normalized_y,
                                                   T *image_x,
                                                   T *image_y) {
   T x = normalized_x;

Modified: trunk/blender/extern/libmv/libmv/simple_pipeline/detect.cc
===================================================================
--- trunk/blender/extern/libmv/libmv/simple_pipeline/detect.cc	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/libmv/simple_pipeline/detect.cc	2013-05-13 14:39:06 UTC (rev 56769)
@@ -132,7 +132,7 @@
 }
 #endif
 
-void DetectMORAVEC(ubyte* image,
+void DetectMORAVEC(const ubyte* image,
                    int stride, int width, int height,
                    Feature* detected, int* count,
                    int distance,
@@ -144,7 +144,7 @@
   const int r = 1;  // radius for self similarity comparison
   for (int y = distance; y < height-distance; y++) {
     for (int x = distance; x < width-distance; x++) {
-      ubyte* s = &image[y*stride+x];
+      const ubyte* s = &image[y*stride+x];
       int score =  // low self-similarity with overlapping patterns
                    // OPTI: load pattern once
           SAD(s, s-r*stride-r, stride, stride)+SAD(s, s-r*stride, stride, stride)+SAD(s, s-r*stride+r, stride, stride)+

Modified: trunk/blender/extern/libmv/libmv/simple_pipeline/detect.h
===================================================================
--- trunk/blender/extern/libmv/libmv/simple_pipeline/detect.h	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/libmv/simple_pipeline/detect.h	2013-05-13 14:39:06 UTC (rev 56769)
@@ -88,7 +88,7 @@
     \note \a You can crop the image (to avoid detecting markers near the borders) without copying:
              image += marginY*stride+marginX, width -= 2*marginX, height -= 2*marginY;
 */
-void DetectMORAVEC(ubyte* image, int stride, int width, int height,
+void DetectMORAVEC(const ubyte* image, int stride, int width, int height,
                    Feature* detected, int* count, int distance /*=32*/,
                    ubyte* pattern /*=0*/);
 

Modified: trunk/blender/extern/libmv/libmv/simple_pipeline/reconstruction_scale.cc
===================================================================
--- trunk/blender/extern/libmv/libmv/simple_pipeline/reconstruction_scale.cc	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/libmv/simple_pipeline/reconstruction_scale.cc	2013-05-13 14:39:06 UTC (rev 56769)
@@ -38,8 +38,9 @@
   double max_distance = 0.0;
   for (int i = 0; i < all_cameras.size(); ++i) {
     double distance = (all_cameras[i].t - cameras_mass_center).squaredNorm();
-    if (distance > max_distance)
+    if (distance > max_distance) {
       max_distance = distance;
+    }
   }
 
   if (max_distance == 0.0) {

Modified: trunk/blender/extern/libmv/libmv-capi.cc
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.cc	2013-05-13 14:31:45 UTC (rev 56768)
+++ trunk/blender/extern/libmv/libmv-capi.cc	2013-05-13 14:39:06 UTC (rev 56769)
@@ -139,7 +139,8 @@
 }
 
 #if defined(DUMP_FAILURE) || defined (DUMP_ALWAYS)
-static void savePNGImage(png_bytep *row_pointers, int width, int height, int depth, int color_type, char *file_name)
+static void savePNGImage(png_bytep *row_pointers, int width, int height, int depth, int color_type,
+                         const char *file_name)
 {
 	png_infop info_ptr;
 	png_structp png_ptr;
@@ -421,10 +422,13 @@
 	void *callback_customdata_;
 };
 
-static void libmv_solveRefineIntrinsics(libmv::Tracks *tracks, libmv::CameraIntrinsics *intrinsics,
-			libmv::EuclideanReconstruction *reconstruction, int refine_intrinsics,
-			reconstruct_progress_update_cb progress_update_callback, void *callback_customdata,
-			int bundle_constraints = libmv::BUNDLE_NO_CONSTRAINTS)
+static void libmv_solveRefineIntrinsics(const libmv::Tracks &tracks,
+                                        const int refine_intrinsics,
+                                        const int bundle_constraints,
+                                        reconstruct_progress_update_cb progress_update_callback,
+                                        void *callback_customdata,
+                                        libmv::EuclideanReconstruction *reconstruction,
+                                        libmv::CameraIntrinsics *intrinsics)
 {
 	/* only a few combinations are supported but trust the caller */
 	int bundle_intrinsics = 0;
@@ -444,15 +448,15 @@
 
 	progress_update_callback(callback_customdata, 1.0, "Refining solution");
 
-	libmv::EuclideanBundleCommonIntrinsics(*(libmv::Tracks *)tracks,
+	libmv::EuclideanBundleCommonIntrinsics(tracks,
 	                                       bundle_intrinsics,
 	                                       bundle_constraints,
 	                                       reconstruction,
 	                                       intrinsics);
 }
 
-static void cameraIntrinsicsFromOptions(libmv::CameraIntrinsics *camera_intrinsics,
-                                        libmv_cameraIntrinsicsOptions *camera_intrinsics_options)
+static void cameraIntrinsicsFromOptions(const libmv_cameraIntrinsicsOptions *camera_intrinsics_options,
+                                        libmv::CameraIntrinsics *camera_intrinsics)
 {
 	camera_intrinsics->SetFocalLength(camera_intrinsics_options->focal_length,
 	                                  camera_intrinsics_options->focal_length);
@@ -468,47 +472,47 @@
 	                                camera_intrinsics_options->image_height);
 }
 
-static libmv::Tracks getNormalizedTracks(libmv::Tracks *tracks, libmv::CameraIntrinsics *camera_intrinsics)
+static libmv::Tracks getNormalizedTracks(const libmv::Tracks &tracks, const libmv::CameraIntrinsics &camera_intrinsics)
 {
-	libmv::vector<libmv::Marker> markers = tracks->AllMarkers();
+	libmv::vector<libmv::Marker> markers = tracks.AllMarkers();
 
 	for (int i = 0; i < markers.size(); ++i) {
-		camera_intrinsics->InvertIntrinsics(markers[i].x, markers[i].y,
+		camera_intrinsics.InvertIntrinsics(markers[i].x, markers[i].y,
 			&(markers[i].x), &(markers[i].y));
 	}
 
 	return libmv::Tracks(markers);
 }
 
-static void finishReconstruction(libmv::Tracks *tracks, libmv::CameraIntrinsics *camera_intrinsics,
+static void finishReconstruction(const libmv::Tracks &tracks, const libmv::CameraIntrinsics &camera_intrinsics,
                                  libmv_Reconstruction *libmv_reconstruction,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list