[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