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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to