Commit: 8f85a4e989441e43a2f74f67ac8d6f2cae6c2644
Author: Tianwei Shen
Date:   Mon Jun 6 21:51:51 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB8f85a4e989441e43a2f74f67ac8d6f2cae6c2644

update correspondence data structure

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

M       source/blender/blenkernel/BKE_tracking.h
M       source/blender/blenkernel/intern/tracking_correspondence.c
M       source/blender/editors/space_clip/tracking_ops_correspondence.c
M       source/blender/makesdna/DNA_tracking_types.h

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

diff --git a/source/blender/blenkernel/BKE_tracking.h 
b/source/blender/blenkernel/BKE_tracking.h
index 0ed83de..93a7804 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -292,10 +292,16 @@ 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 
MovieTrackingTrack *primary_track,
-                                                                    struct 
MovieTrackingTrack *witness_track);
+                                                                    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 MovieTrackingObject *object,
+                                                                               
            int keyframe1, int keyframe2,
+                                                                               
            int width, int height);
 
 #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 290f9a9..3540637 100644
--- a/source/blender/blenkernel/intern/tracking_correspondence.c
+++ b/source/blender/blenkernel/intern/tracking_correspondence.c
@@ -58,7 +58,7 @@ struct ReconstructProgressData;
 typedef struct MovieMultiviewReconstructContext {
        struct libmv_Tracks *tracks;
        bool select_keyframes;
-       int keyframe1, keyframe2;
+       int keyframe1, keyframe2;               /* the key frames selected from 
the primary camera */
        int refine_flags;
 
        struct libmv_Reconstruction *reconstruction;
@@ -158,11 +158,12 @@ static struct libmv_Tracks 
*libmv_multiview_tracks_new(MovieClip *clip, ListBase
  * reconstruction job is in progress.
  */
 MovieMultiviewReconstructContext *
-BKE_tracking_multiview_reconstruction_context_new(MovieClip *clip,
+BKE_tracking_multiview_reconstruction_context_new(ListBase *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");
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c 
b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index 588ffd1..7172d06 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -78,15 +78,19 @@ void BKE_tracking_correspondence_unique_name(ListBase 
*tracksbase, MovieTracking
 /* Add new correspondence to a specified correspondence base.
  */
 MovieTrackingCorrespondence *BKE_tracking_correspondence_add(MovieTracking 
*tracking, ListBase *corr_base,
-                                                             
MovieTrackingTrack *primary_track,
-                                                             
MovieTrackingTrack *witness_track)
+                                                             
MovieTrackingTrack *self_track,
+                                                             
MovieTrackingTrack *other_track,
+                                                             MovieClip* 
self_clip,
+                                                             MovieClip* 
other_clip)
 {
        MovieTrackingCorrespondence *corr;
 
        corr = MEM_callocN(sizeof(MovieTrackingCorrespondence), "add 
correspondence");
        strcpy(corr->name, "Correspondence");
-       corr->primary_track = primary_track;
-       corr->witness_track = witness_track;
+       corr->self_track = self_track;
+       corr->other_track = other_track;
+       corr->self_clip = self_clip;
+       corr->other_clip = other_clip;
 
        BLI_addtail(corr_base, corr);
        BKE_tracking_correspondence_unique_name(corr_base, corr);
@@ -119,11 +123,12 @@ static int add_correspondence_exec(bContext *C, 
wmOperator *op)
        // get number of selected tracks in the witness camera
        // TODO(tianwei): there might be multiple witness cameras, now just 
work with one witness camera
        wmWindow *window = CTX_wm_window(C);
+       MovieClip *second_clip;
        for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = 
sa->next) {
                if (sa->spacetype == SPACE_CLIP) {
                        SpaceClip *second_sc = sa->spacedata.first;
                        if(second_sc != sc) {
-                               MovieClip *second_clip = 
ED_space_clip_get_clip(second_sc);
+                               second_clip = ED_space_clip_get_clip(second_sc);
                                MovieTracking *second_tracking = 
&second_clip->tracking;
                                ListBase *second_tracksbase = 
BKE_tracking_get_active_tracks(second_tracking);
                                for (track = second_tracksbase->first; track; 
track = track->next) {
@@ -132,6 +137,7 @@ static int add_correspondence_exec(bContext *C, wmOperator 
*op)
                                                num_witness_selected++;
                                        }
                                }
+                               break;
                        }
                }
        }
@@ -144,7 +150,8 @@ static int add_correspondence_exec(bContext *C, wmOperator 
*op)
        // TODO(tianwei): link two tracks, mark these two tracks in a different 
color
 
        // add these correspondence
-       BKE_tracking_correspondence_add(tracking, &(tracking->correspondences), 
primary_track, witness_track);
+       BKE_tracking_correspondence_add(tracking, &(tracking->correspondences), 
primary_track, witness_track,
+                                       clip, second_clip);
 
        return OPERATOR_FINISHED;
 }
@@ -234,7 +241,8 @@ void CLIP_OT_delete_correspondence(wmOperatorType *ot)
 
 typedef struct {
        Scene *scene;
-       MovieClip *clip;
+       //MovieClip *clip;
+       ListBase *clips;
        MovieClipUser user;
 
        ReportList *reports;
@@ -268,18 +276,20 @@ static bool solve_multiview_initjob(bContext *C,
        /* Could fail if footage uses images with different sizes. */
        BKE_movieclip_get_size(clip, &sc->user, &width, &height);
 
-       scj->clip = clip;
+       BLI_addtail(scj->clips, clip);
+       //BKE_tracking_clip_unique_name(scj->clips, clip);
+       //scj->clips = clip;
        scj->scene = scene;
        scj->reports = op->reports;
        scj->user = sc->user;
 
        // create multiview reconstruction context and pass the tracks and 
markers to libmv
-       scj->context = BKE_tracking_reconstruction_context_new(clip,
-                                                              object,
-                                                              
object->keyframe1,
-                                                              
object->keyframe2,
-                                                              width,
-                                                              height);
+       scj->context = 
BKE_tracking_multiview_reconstruction_context_new(scj->clips,
+                                                                        object,
+                                                                        
object->keyframe1,
+                                                                        
object->keyframe2,
+                                                                        width,
+                                                                        
height);
 
        tracking->stats = MEM_callocN(sizeof(MovieTrackingStats), "solve 
multiview stats");
 
@@ -289,7 +299,8 @@ static bool solve_multiview_initjob(bContext *C,
 static void solve_multiview_updatejob(void *scv)
 {
        SolveMultiviewJob *scj = (SolveMultiviewJob *)scv;
-       MovieTracking *tracking = &scj->clip->tracking;
+       MovieClip *primary_clip = scj->clips->first;
+       MovieTracking *tracking = &primary_clip->tracking;
 
        BLI_strncpy(tracking->stats->message,
                    scj->stats_message,
@@ -310,9 +321,10 @@ static void solve_multiview_startjob(void *scv, short 
*stop, short *do_update, f
 static void solve_multiview_freejob(void *scv)
 {
        SolveMultiviewJob *scj = (SolveMultiviewJob *)scv;
-       MovieTracking *tracking = &scj->clip->tracking;
+       MovieClip *clip = scj->clips->first;            // primary clip
+       MovieTracking *tracking = &clip->tracking;
        Scene *scene = scj->scene;
-       MovieClip *clip = scj->clip;
+       //MovieClip *clip = scj->clip;
        int solved;
 
        if (!scj->context) {
diff --git a/source/blender/makesdna/DNA_tracking_types.h 
b/source/blender/makesdna/DNA_tracking_types.h
index df3ef6b..4e0f991 100644
--- a/source/blender/makesdna/DNA_tracking_types.h
+++ b/source/blender/makesdna/DNA_tracking_types.h
@@ -44,6 +44,7 @@
 
 struct bGPdata;
 struct Image;
+struct MovieClip;
 struct MovieReconstructedCamera;
 struct MovieTrackingCamera;
 struct MovieTrackingMarker;
@@ -162,14 +163,16 @@ typedef struct MovieTrackingTrack {
        float weight, pad;
 } MovieTrackingTrack;
 
-//TODO(tianwei): expand the fields, now only two tracks
 typedef struct MovieTrackingCorrespondence {
        struct MovieTrackingCorrespondence *next, *prev;
 
        char name[64];  /* MAX_NAME */
 
-       MovieTrackingTrack *primary_track;
-       MovieTrackingTrack *witness_track;
+       MovieTrackingTrack *self_track;
+       MovieTrackingTrack *other_track;
+
+       struct MovieClip *self_clip;
+       struct MovieClip *other_clip;
 } MovieTrackingCorrespondence;
 
 typedef struct MovieTrackingPlaneMarker {

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

Reply via email to