[Bf-blender-cvs] [cb8dc23] soc-2016-multiview: add reconstructN.* files, refine data structures

Tianwei Shen noreply at git.blender.org
Tue Jun 7 18:08:26 CEST 2016


Commit: cb8dc230c972cab3349882675d8e0a07494ed67e
Author: Tianwei Shen
Date:   Wed Jun 8 00:08:23 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rBcb8dc230c972cab3349882675d8e0a07494ed67e

add reconstructN.* files, refine data structures

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

M	intern/libmv/CMakeLists.txt
A	intern/libmv/intern/reconstructionN.cc
A	intern/libmv/intern/reconstructionN.h
M	intern/libmv/libmv-capi.h
M	intern/libmv/libmv/autotrack/reconstruction.h
M	source/blender/blenkernel/BKE_tracking.h
M	source/blender/blenkernel/intern/tracking_correspondence.c
M	source/blender/blenkernel/intern/tracking_solver.c
M	source/blender/editors/space_clip/tracking_ops_correspondence.c

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

diff --git a/intern/libmv/CMakeLists.txt b/intern/libmv/CMakeLists.txt
index cd89f1d..bf0ad3f 100644
--- a/intern/libmv/CMakeLists.txt
+++ b/intern/libmv/CMakeLists.txt
@@ -70,6 +70,7 @@ if(WITH_LIBMV)
 		intern/image.cc
 		intern/logging.cc
 		intern/reconstruction.cc
+		intern/reconstructionN.cc
 		intern/track_region.cc
 		intern/tracks.cc
 		intern/tracksN.cc
@@ -119,6 +120,7 @@ if(WITH_LIBMV)
 		intern/image.h
 		intern/logging.h
 		intern/reconstruction.h
+		intern/reconstructionN.h
 		intern/track_region.h
 		intern/tracks.h
 		intern/tracksN.h
diff --git a/intern/libmv/libmv-capi.h b/intern/libmv/intern/reconstructionN.cc
similarity index 57%
copy from intern/libmv/libmv-capi.h
copy to intern/libmv/intern/reconstructionN.cc
index 92e206a..d73362d 100644
--- a/intern/libmv/libmv-capi.h
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -24,19 +24,34 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef LIBMV_C_API_H
-#define LIBMV_C_API_H
-
-#include "intern/autotrack.h"
+#include "intern/reconstructionN.h"
 #include "intern/camera_intrinsics.h"
-#include "intern/detector.h"
-#include "intern/frame_accessor.h"
-#include "intern/homography.h"
-#include "intern/image.h"
-#include "intern/logging.h"
-#include "intern/reconstruction.h"
-#include "intern/track_region.h"
-#include "intern/tracks.h"
 #include "intern/tracksN.h"
+#include "intern/utildefines.h"
+
+#include "libmv/logging/logging.h"
+#include "libmv/autotrack/autotrack.h"
+#include "libmv/autotrack/frame_accessor.h"
+#include "libmv/autotrack/marker.h"
+#include "libmv/autotrack/model.h"
+#include "libmv/autotrack/predict_tracks.h"
+#include "libmv/autotrack/quad.h"
+#include "libmv/autotrack/reconstruction.h"
+#include "libmv/autotrack/region.h"
+#include "libmv/autotrack/tracks.h"
+
+using mv::Tracks;
+using mv::Reconstruction;
+
+using libmv::CameraIntrinsics;
+
+struct libmv_ReconstructionN {
+  mv::Reconstruction reconstruction;
+
+  /* Used for per-track average error calculation after reconstruction */
+  mv::Tracks tracks;
+  libmv::CameraIntrinsics *intrinsics;
 
-#endif  // LIBMV_C_API_H
+  double error;
+  bool is_valid;
+};
diff --git a/intern/libmv/libmv-capi.h b/intern/libmv/intern/reconstructionN.h
similarity index 70%
copy from intern/libmv/libmv-capi.h
copy to intern/libmv/intern/reconstructionN.h
index 92e206a..0908e3d 100644
--- a/intern/libmv/libmv-capi.h
+++ b/intern/libmv/intern/reconstructionN.h
@@ -24,19 +24,17 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-#ifndef LIBMV_C_API_H
-#define LIBMV_C_API_H
+#ifndef LIBMV_C_API_RECONSTRUCTION_H_
+#define LIBMV_C_API_RECONSTRUCTION_H_
 
-#include "intern/autotrack.h"
-#include "intern/camera_intrinsics.h"
-#include "intern/detector.h"
-#include "intern/frame_accessor.h"
-#include "intern/homography.h"
-#include "intern/image.h"
-#include "intern/logging.h"
-#include "intern/reconstruction.h"
-#include "intern/track_region.h"
-#include "intern/tracks.h"
-#include "intern/tracksN.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
 
-#endif  // LIBMV_C_API_H
+typedef struct libmv_ReconstructionN libmv_ReconstructionN;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif   // LIBMV_C_API_RECONSTRUCTION_H_
diff --git a/intern/libmv/libmv-capi.h b/intern/libmv/libmv-capi.h
index 92e206a..55a4caf 100644
--- a/intern/libmv/libmv-capi.h
+++ b/intern/libmv/libmv-capi.h
@@ -35,6 +35,7 @@
 #include "intern/image.h"
 #include "intern/logging.h"
 #include "intern/reconstruction.h"
+#include "intern/reconstructionN.h"
 #include "intern/track_region.h"
 #include "intern/tracks.h"
 #include "intern/tracksN.h"
diff --git a/intern/libmv/libmv/autotrack/reconstruction.h b/intern/libmv/libmv/autotrack/reconstruction.h
index e1d4e88..48bfa70 100644
--- a/intern/libmv/libmv/autotrack/reconstruction.h
+++ b/intern/libmv/libmv/autotrack/reconstruction.h
@@ -31,6 +31,8 @@ namespace mv {
 
 using libmv::CameraIntrinsics;
 using libmv::vector;
+using libmv::Mat3;
+using libmv::Vec3;
 
 class Model;
 
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 93a7804..7432207 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -34,7 +34,7 @@
 
 struct bGPDlayer;
 struct ImBuf;
-struct ListBase;
+struct MovieClip;
 struct MovieReconstructContext;
 struct MovieMultiviewReconstructContext;
 struct MovieTrackingTrack;
@@ -291,17 +291,20 @@ void BKE_tracking_dopesheet_update(struct MovieTracking *tracking);
 
 /* Correspondence */
 void BKE_tracking_correspondence_unique_name(struct ListBase *tracksbase, struct MovieTrackingCorrespondence *corr);
-struct MovieTrackingCorrespondence *BKE_tracking_correspondence_add(struct MovieTracking *tracking, struct ListBase *corr_base,
+struct MovieTrackingCorrespondence *BKE_tracking_correspondence_add(struct ListBase *corr_base,
                                                                     struct MovieTrackingTrack *self_track,
                                                                     struct MovieTrackingTrack *other_track,
                                                                     struct MovieClip *self_clip,
                                                                     struct MovieClip *other_clip);
 void BKE_tracking_multiview_reconstruction_solve(struct MovieMultiviewReconstructContext *context, short *stop, short *do_update,
                                                  float *progress, char *stats_message, int message_size);
-struct MovieMultiviewReconstructContext *BKE_tracking_multiview_reconstruction_context_new(struct ListBase *clips,
+struct MovieMultiviewReconstructContext *BKE_tracking_multiview_reconstruction_context_new(struct MovieClip **clips,
+                                                                                           int num_clips,
                                                                                            struct MovieTrackingObject *object,
                                                                                            int keyframe1, int keyframe2,
                                                                                            int width, int height);
+bool BKE_tracking_multiview_reconstruction_check(struct MovieClip **clips, struct MovieTrackingObject *object,
+                                                 int clip_num, char *error_msg, int error_size);
 
 #define TRACK_SELECTED(track)               ((track)->flag & SELECT || (track)->pat_flag & SELECT || (track)->search_flag & SELECT)
 
diff --git a/source/blender/blenkernel/intern/tracking_correspondence.c b/source/blender/blenkernel/intern/tracking_correspondence.c
index 3540637..068a93b 100644
--- a/source/blender/blenkernel/intern/tracking_correspondence.c
+++ b/source/blender/blenkernel/intern/tracking_correspondence.c
@@ -41,6 +41,7 @@
 #include "BLI_listbase.h"
 #include "BLI_string.h"
 #include "BLI_math.h"
+#include "BLI_ghash.h"
 
 #include "BKE_tracking.h"
 #include "BKE_fcurve.h"
@@ -56,24 +57,22 @@
 struct ReconstructProgressData;
 
 typedef struct MovieMultiviewReconstructContext {
-	struct libmv_Tracks *tracks;
+	struct libmv_TracksN **all_tracks;		/* set of tracks from all clips (API in autotrack) */
+
+	// TODO(tianwei): might be proper to make it libmv_multiview_Reconstruction
+	struct libmv_ReconstructionN **all_reconstruction;	/* reconstruction for each clip (API in autotrack) */
+	libmv_CameraIntrinsicsOptions *all_camera_intrinsics_options;	/* camera intrinsic of each camera */
+	TracksMap **all_tracks_map;				/* tracks_map of each clip */
+	int *all_sfra, *all_efra;				/* start and end frame of each clip */
+	ListBase *corr_base;			/* a set of correspondence across clips */
+
 	bool select_keyframes;
 	int keyframe1, keyframe2;		/* the key frames selected from the primary camera */
 	int refine_flags;
-
-	struct libmv_Reconstruction *reconstruction;
-
 	char object_name[MAX_NAME];
 	bool is_camera;
 	short motion_flag;
-
-	libmv_CameraIntrinsicsOptions camera_intrinsics_options;
-
-	float reprojection_error;
-
-	TracksMap *tracks_map;
-
-	int sfra, efra;
+	float reprojection_error;		/* average reprojection error for all clips and tracks */
 } MovieMultiviewReconstructContext;
 
 typedef struct MultiviewReconstructProgressData {
@@ -158,71 +157,89 @@ static struct libmv_Tracks *libmv_multiview_tracks_new(MovieClip *clip, ListBase
  * reconstruction job is in progress.
  */
 MovieMultiviewReconstructContext *
-BKE_tracking_multiview_reconstruction_context_new(ListBase *clips,
+BKE_tracking_multiview_reconstruction_context_new(MovieClip **clips,
+                                                  int num_clips,
                                                   MovieTrackingObject *object,
                                                   int keyframe1, int keyframe2,
                                                   int width, int height)
 {
-	MovieClip *clip = clips->first;		// the primary clip
-	MovieTracking *tracking = &clip->tracking;
 	MovieMultiviewReconstructContext *context = MEM_callocN(sizeof(MovieMultiviewReconstructContext),
-	                                                        "MovieMultiviewReconstructContext data");
-	ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, object);
-	float aspy = 1.0f / tracking->camera.pixel_aspect;
-	int num_tracks = BLI_listbase_count(tracksbase);
-	int sfra = INT_MAX, efra = INT_MIN;
-	MovieTrackingTrack *track;
+	                                                        "MRC data");
+	// alloc memory for the field members
+	context->all_tracks = MEM_callocN(num_clips * sizeof(libmv_TracksN*), "MRC libmv_Tracks");
+	context->all_reconstruction = MEM_callocN(num_clips * sizeof(struct libmv_ReconstructionN*), "MRC libmv_Reconstruction");
+	context->all_tracks_map = MEM_callocN(num_clips * sizeof(TracksMap*), "MRC TracksMap");
+	context->all_camera_intrinsics_options = MEM_callocN(num_clips * sizeof(libmv_CameraIntrinsicsOptions), "MRC camera intrinsics");
+	context->all_sfra = MEM_callocN(num_clips * sizeof(int), "MRC start frames");
+	context->all_efra = MEM_callocN(num_clips * sizeof(int), "MRC end frames");
+	context->keyframe1 = keyframe1;
+	context->keyframe2 = keyframe2;
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list