[Bf-blender-cvs] [8f85a4e] soc-2016-multiview: update correspondence data structure

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


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 {




More information about the Bf-blender-cvs mailing list