Commit: 683febfbca6279c3b4c377bb966372c895fccb4c
Author: Tianwei Shen
Date:   Thu Jun 16 15:56:58 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB683febfbca6279c3b4c377bb966372c895fccb4c

get corresondences into libmv

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

M       intern/libmv/intern/reconstructionN.cc
M       intern/libmv/intern/reconstructionN.h
M       intern/libmv/intern/tracksN.cc
M       intern/libmv/intern/tracksN.h
M       intern/libmv/libmv/autotrack/reconstruction.cc
M       intern/libmv/libmv/autotrack/tracks.cc
M       intern/libmv/libmv/autotrack/tracks.h
M       source/blender/blenkernel/intern/tracking_correspondence.c

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

diff --git a/intern/libmv/intern/reconstructionN.cc 
b/intern/libmv/intern/reconstructionN.cc
index aa0512e..1960b13 100644
--- a/intern/libmv/intern/reconstructionN.cc
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -47,6 +47,7 @@
 using mv::Tracks;
 using mv::Marker;
 using mv::Reconstruction;
+using mv::Correspondences;
 
 using libmv::CameraIntrinsics;
 using libmv::ProgressUpdateCallback;
@@ -106,9 +107,11 @@ void libmv_reconstructionNDestroy(libmv_ReconstructionN* 
libmv_reconstructionN)
        LIBMV_OBJECT_DELETE(libmv_reconstructionN, libmv_ReconstructionN);
 }
 
-libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
+libmv_ReconstructionN** libmv_solveMultiviewReconstruction(
+        const int clip_num,
         const libmv_TracksN **all_libmv_tracks,
         const libmv_CameraIntrinsicsOptions 
*all_libmv_camera_intrinsics_options,
+        const libmv_CorrespondencesN * libmv_correspondences,
         libmv_MultiviewReconstructionOptions *libmv_reconstruction_options,
         multiview_reconstruct_progress_update_cb progress_update_callback,
         void* callback_customdata)
@@ -180,6 +183,8 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
        update_callback.invoke(0, "Initial reconstruction");
 
        ///* TODO(tianwei): chain the tracks and correspondences */
+       Correspondences &correspondences = *((Correspondences*) 
libmv_correspondences);
+       printf("corrs in the libmv %d\n", correspondences.GetCorrNum());
 
        // reconstruct two views from the main clip
        if(!mv::ReconstructTwoFrames(keyframe_markers, 0, 
*(all_libmv_reconstruction[0]->intrinsics), &reconstruction))
diff --git a/intern/libmv/intern/reconstructionN.h 
b/intern/libmv/intern/reconstructionN.h
index a9acaae..d265e3f 100644
--- a/intern/libmv/intern/reconstructionN.h
+++ b/intern/libmv/intern/reconstructionN.h
@@ -34,6 +34,7 @@ extern "C" {
 #endif
 
 typedef struct libmv_ReconstructionN libmv_ReconstructionN;
+typedef struct libmv_CorrespondencesN libmv_CorrespondencesN;
 
 typedef struct libmv_MultiviewReconstructionOptions {
        int select_keyframes;
@@ -50,6 +51,7 @@ void libmv_reconstructionNDestroy(libmv_ReconstructionN* 
libmv_reconstructionN);
 libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
         const struct libmv_TracksN **all_libmv_tracks,
         const libmv_CameraIntrinsicsOptions 
*all_libmv_camera_intrinsics_options,
+        const libmv_CorrespondencesN *libmv_correspondences,
         libmv_MultiviewReconstructionOptions* libmv_reconstruction_options,
         multiview_reconstruct_progress_update_cb progress_update_callback,
         void* callback_customdata);
diff --git a/intern/libmv/intern/tracksN.cc b/intern/libmv/intern/tracksN.cc
index 9e1da88..ecb549c 100644
--- a/intern/libmv/intern/tracksN.cc
+++ b/intern/libmv/intern/tracksN.cc
@@ -31,6 +31,7 @@
 
 using mv::Marker;
 using mv::Tracks;
+using mv::Correspondences;
 
 void libmv_apiMarkerToMarker(const libmv_Marker& libmv_marker,
                              Marker *marker) {
@@ -136,3 +137,18 @@ int libmv_tracksMaxTrackN(libmv_TracksN* libmv_tracks) {
 int libmv_tracksNumMarkersN(libmv_TracksN* libmv_tracks) {
   return ((Tracks*) libmv_tracks)->NumMarkers();
 }
+
+/* --------    libmv_CorrespondencesN  ------------------- */
+libmv_CorrespondencesN* libmv_correspondencesNewN(void) {
+       Correspondences* corrs = LIBMV_OBJECT_NEW(Correspondences);
+       return (libmv_CorrespondencesN*) corrs;
+}
+
+void libmv_CorrespondencesDestroyN(libmv_CorrespondencesN* 
libmv_correspondences) {
+       LIBMV_OBJECT_DELETE(libmv_correspondences, Correspondences);
+}
+
+void libmv_AddCorrespondenceN(libmv_CorrespondencesN* libmv_correspondences,
+                              int clip1, int clip2, int track1, int track2) {
+       ((Correspondences*) libmv_correspondences)->AddCorrespondence(clip1, 
clip2, track1, track2);
+}
diff --git a/intern/libmv/intern/tracksN.h b/intern/libmv/intern/tracksN.h
index d0cb54e..0366da3 100644
--- a/intern/libmv/intern/tracksN.h
+++ b/intern/libmv/intern/tracksN.h
@@ -36,6 +36,7 @@ extern "C" {
 #endif
 
 typedef struct libmv_TracksN libmv_TracksN;
+typedef struct libmv_CorrespondencesN libmv_CorrespondencesN;
 
 // Keep order in this enums exactly the same as in mv::Marker.
 // Otherwise API wouldn't convert the values properly.
@@ -88,40 +89,41 @@ typedef struct libmv_Marker {
 namespace mv {
   struct Marker;
 }
+
+/* --------    libmv_Marker    ------------------- */
 void libmv_apiMarkerToMarker(const libmv_Marker& libmv_marker,
                              mv::Marker *marker);
-
 void libmv_markerToApiMarker(const mv::Marker& marker,
                              libmv_Marker *libmv_marker);
 #endif
 
+/* --------    libmv_Tracks    ------------------- */
 libmv_TracksN* libmv_tracksNewN(void);
-
 void libmv_tracksDestroyN(libmv_TracksN* libmv_tracks);
-
-
 void libmv_tracksAddMarkerN(libmv_TracksN* libmv_tracks,
                             const libmv_Marker* libmv_marker);
-
 void libmv_tracksGetMarkerN(libmv_TracksN* libmv_tracks,
                             int clip,
                             int frame,
                             int track,
                             libmv_Marker* libmv_marker);
-
 void libmv_tracksRemoveMarkerN(libmv_TracksN* libmv_tracks,
                                int clip,
                                int frame,
                                int track);
-
 void libmv_tracksRemoveMarkersForTrack(libmv_TracksN* libmv_tracks,
                                        int track);
-
 int libmv_tracksMaxClipN(libmv_TracksN* libmv_tracks);
 int libmv_tracksMaxFrameN(libmv_TracksN* libmv_tracks, int clip);
 int libmv_tracksMaxTrackN(libmv_TracksN* libmv_tracks);
 int libmv_tracksNumMarkersN(libmv_TracksN* libmv_tracks);
 
+/* --------    libmv_CorrespondencesN  ------------------- */
+libmv_CorrespondencesN* libmv_correspondencesNewN(void);
+void libmv_CorrespondencesDestroyN(libmv_CorrespondencesN* 
libmv_correspondences);
+void libmv_AddCorrespondenceN(libmv_CorrespondencesN* libmv_correspondences,
+                              int clip1, int clip2, int track1, int track2);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/intern/libmv/libmv/autotrack/reconstruction.cc 
b/intern/libmv/libmv/autotrack/reconstruction.cc
index 748ef53..1873369 100644
--- a/intern/libmv/libmv/autotrack/reconstruction.cc
+++ b/intern/libmv/libmv/autotrack/reconstruction.cc
@@ -107,8 +107,6 @@ bool ReconstructTwoFrames(const vector<Marker> &markers,
                return false;
        }
 
-       printf("%d, %d, %d\n", cam_intrinsics.image_width(), 
cam_intrinsics.image_height(), cam_intrinsics.focal_length());
-
        // frame 1 gets the reference frame, frame 2 gets the relative motion.
        int cam_intrinsic_index = 
reconstruction->AddCameraIntrinsics(&cam_intrinsics);
        CameraPose pose1(clip, frame1, cam_intrinsic_index, Mat3::Identity(), 
Vec3::Zero());
diff --git a/intern/libmv/libmv/autotrack/tracks.cc 
b/intern/libmv/libmv/autotrack/tracks.cc
index a15e87c..38fa6b2 100644
--- a/intern/libmv/libmv/autotrack/tracks.cc
+++ b/intern/libmv/libmv/autotrack/tracks.cc
@@ -203,4 +203,16 @@ int Tracks::NumMarkers() const {
   return markers_.size();
 }
 
+void Correspondences::AddCorrespondence(int clip1, int clip2, int track1, int 
track2) {
+       Correspondence corr(clip1, clip2, track1, track2);
+       corrs.push_back(corr);
+}
+
+void Correspondences::AddCorrespondence(const Correspondence &corr) {
+       corrs.push_back(corr);
+}
+
+int Correspondences::GetCorrNum() const {
+       return corrs.size();
+}
 }  // namespace mv
diff --git a/intern/libmv/libmv/autotrack/tracks.h 
b/intern/libmv/libmv/autotrack/tracks.h
index 38e41df..39d6181 100644
--- a/intern/libmv/libmv/autotrack/tracks.h
+++ b/intern/libmv/libmv/autotrack/tracks.h
@@ -82,6 +82,22 @@ class Tracks {
   // linear lookup penalties for the accessors.
 };
 
+struct Correspondence {
+       Correspondence(int clip1_, int clip2_, int track1_, int track2_):
+           clip1(clip1_), clip2(clip2_), track1(track1_), track2(track2_) {}
+       int clip1, clip2;               /* clip id is indexed by the order of 
clips when constructing context */
+       int track1, track2;             /* track id is the per clip id */
+};
+
+class Correspondences {
+public:
+       void AddCorrespondence(const Correspondence &corr);
+       void AddCorrespondence(int clip1, int clip2, int track1, int track2);
+       int GetCorrNum() const;
+private:
+       vector<Correspondence> corrs;
+};
+
 }  // namespace mv
 
 #endif  // LIBMV_AUTOTRACK_TRACKS_H_
diff --git a/source/blender/blenkernel/intern/tracking_correspondence.c 
b/source/blender/blenkernel/intern/tracking_correspondence.c
index 6723c26..3bc7bf5 100644
--- a/source/blender/blenkernel/intern/tracking_correspondence.c
+++ b/source/blender/blenkernel/intern/tracking_correspondence.c
@@ -65,7 +65,7 @@ typedef struct MovieMultiviewReconstructContext {
        TracksMap **all_tracks_map;                             /* tracks_map 
of each clip */
        int *all_sfra, *all_efra;                               /* start and 
end frame of each clip */
        int *all_refine_flags;                          /* refine flags of each 
clip */
-       ListBase *corr_base;                    /* a set of correspondence 
across clips */
+       struct libmv_CorrespondencesN *correspondences;                 /* 
libmv correspondence api*/
 
        bool select_keyframes;
        int keyframe1, keyframe2;               /* the key frames selected from 
the primary camera */
@@ -184,6 +184,67 @@ static struct libmv_TracksN 
*libmv_multiview_tracks_new(MovieClip *clip, int cli
        return tracks;
 }
 
+/* get correspondences from blender tracking to libmv correspondences
+ * return the number of correspondences converted
+ */
+static int libmv_CorrespondencesFromTracking(ListBase 
*tracking_correspondences,
+                                             MovieClip **clips,
+                                             const int clip_num,
+                                             struct libmv_CorrespondencesN 
*libmv_correspondences)
+{
+       int num_valid_corrs = 0;
+       MovieTrackingCorrespondence *corr;
+       corr = tracking_correspondences->first;
+       while(corr)
+       {
+               int clip1 = -1, clip2 = -1, track1 = -1, track2 = -1;
+               MovieClip *self_clip = corr->self_clip;
+               MovieClip *other_clip = corr->other_clip;
+               // iterate through all the clips to get the local clip id
+               for(int i = 0; i < clip_num; i++) {
+                       if(self_clip == c

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