[Bf-blender-cvs] [33a9441] soc-2016-multiview: change iterating-all-windows-to-find-witness-clip

Tianwei Shen noreply at git.blender.org
Mon Aug 8 05:21:28 CEST 2016


Commit: 33a9441946951fd49e25c8811bdaf23616fb9f31
Author: Tianwei Shen
Date:   Sun Aug 7 12:43:20 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB33a9441946951fd49e25c8811bdaf23616fb9f31

change iterating-all-windows-to-find-witness-clip

- Previously we need to iterate all windows to get witness clips, now we
  don't need to do that because it can be accessed by secondary_clip
  poitner in SpaceClip. Correspondence links are confined to
  'correspondenc' mode.

- Restore 'synchronize two frame bars'

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

M	source/blender/editors/space_clip/clip_ops.c
M	source/blender/editors/space_clip/space_clip.c
M	source/blender/editors/space_clip/tracking_ops_correspondence.c

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

diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c
index 876ef3e..a0790ec 100644
--- a/source/blender/editors/space_clip/clip_ops.c
+++ b/source/blender/editors/space_clip/clip_ops.c
@@ -1038,18 +1038,17 @@ static int change_frame_poll(bContext *C)
 
 static void change_frame_apply(bContext *C, wmOperator *op)
 {
-	//Scene *scene = CTX_data_scene(C);
+	Scene *scene = CTX_data_scene(C);
 
 	/* set the new frame number */
-	//CFRA = RNA_int_get(op->ptr, "frame");
-	//FRAMENUMBER_MIN_CLAMP(CFRA);
-	//SUBFRA = 0.0f;
+	CFRA = RNA_int_get(op->ptr, "frame");
+	FRAMENUMBER_MIN_CLAMP(CFRA);
+	SUBFRA = 0.0f;
 
 	/* do updates */
-	//BKE_sound_seek_scene(CTX_data_main(C), scene);
-	//WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
+	BKE_sound_seek_scene(CTX_data_main(C), scene);
+	WM_event_add_notifier(C, NC_SCENE | ND_FRAME, scene);
 
-	// TODO(Tianwei): decouple frame for now, find a better way
 	SpaceClip *sc = CTX_wm_space_clip(C);
 	BKE_movieclip_user_set_frame(&sc->user, RNA_int_get(op->ptr, "frame"));
 	WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, NULL);
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index e998cc7..207f19d 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -902,7 +902,7 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 {
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *window = CTX_wm_window(C);
-	//Scene *scene = CTX_data_scene(C);
+	Scene *scene = CTX_data_scene(C);
 	SpaceClip *sc = (SpaceClip *)sa->spacedata.first;
 	ARegion *ar_main = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
 	ARegion *ar_tools = BKE_area_find_region_type(sa, RGN_TYPE_TOOLS);
@@ -1096,8 +1096,7 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 		ED_area_tag_redraw(sa);
 	}
 
-	// TODO(tianwei): find a better way to decouple frames
-	//BKE_movieclip_user_set_frame(&sc->user, scene->r.cfra);
+	BKE_movieclip_user_set_frame(&sc->user, scene->r.cfra);
 }
 
 /********************* main region ********************/
diff --git a/source/blender/editors/space_clip/tracking_ops_correspondence.c b/source/blender/editors/space_clip/tracking_ops_correspondence.c
index 51ab371..1d20965 100644
--- a/source/blender/editors/space_clip/tracking_ops_correspondence.c
+++ b/source/blender/editors/space_clip/tracking_ops_correspondence.c
@@ -86,32 +86,22 @@ static MovieTrackingTrack *get_single_track(SpaceClip *sc, ListBase *tracksbase)
 static int add_correspondence_exec(bContext *C, wmOperator *op)
 {
 	SpaceClip *sc = CTX_wm_space_clip(C);
-	ARegion *ar = CTX_wm_region(C);
-	MovieClip *clip = ED_space_clip_get_clip_in_region(sc, ar);
+	/* get primary clip */
+	MovieClip *clip = ED_space_clip_get_clip(sc);
 	MovieTracking *tracking = &clip->tracking;
 	ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
 
-	// get one track from each clip and link them
+	/* get one track from each clip and link them */
 	MovieTrackingTrack *primary_track = NULL, *witness_track = NULL;
 
-	// get a single selected tracks in the primary camera
+	/* get a single selected tracks in the primary camera */
 	primary_track = get_single_track(sc, tracksbase);
 
-	// get a single selected tracks in the witness camera, only one witness camera is allowed
-	wmWindow *window = CTX_wm_window(C);
-	MovieClip *second_clip = NULL;
-	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 && second_sc->view == SC_VIEW_CLIP) {
-				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);
-				witness_track = get_single_track(second_sc, second_tracksbase);
-				break;
-			}
-		}
-	}
+	/* get a single selected tracks in the witness camera, only one witness camera is allowed */
+	MovieClip *second_clip = ED_space_clip_get_secondary_clip(sc);
+	MovieTracking *second_tracking = &second_clip->tracking;
+	ListBase *second_tracksbase = BKE_tracking_get_active_tracks(second_tracking);
+	witness_track = get_single_track(sc, second_tracksbase);
 
 	if (!primary_track || !witness_track) {
 		BKE_report(op->reports, RPT_ERROR, "Select exactly one track in each clip");
@@ -154,12 +144,12 @@ static int delete_correspondence_exec(bContext *C, wmOperator *UNUSED(op))
 	MovieTracking *tracking = &clip->tracking;
 	bool changed = false;
 
-	/* Remove track correspondences from correspondence base
-	 */
+	/* Remove track correspondences from correspondence base */
 	ListBase *correspondence_base = &tracking->correspondences;
 	for (MovieTrackingCorrespondence *corr = correspondence_base->first;
 	     corr != NULL;
-	     corr = corr->next) {
+	     corr = corr->next)
+	{
 		MovieTrackingTrack *track;
 		track = corr->self_track;
 		if (TRACK_VIEW_SELECTED(sc, track)) {
@@ -222,7 +212,7 @@ static bool solve_multiview_initjob(bContext *C,
 	MovieTrackingObject *object = BKE_tracking_object_get_active(tracking);
 	int width, height;
 
-	// count all clips number, primary clip will always be the first
+	/* count all clips number, primary clip will always be the first */
 	smj->clip_num = 1;
 	wmWindow *window = CTX_wm_window(C);
 	for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = sa->next) {
@@ -237,7 +227,9 @@ static bool solve_multiview_initjob(bContext *C,
 	smj->clips = MEM_callocN(smj->clip_num * sizeof(MovieClip*), "multiview clip pointers");
 	smj->clips[0] = clip;
 
-	// do multi-view reconstruction
+	/* do multi-view reconstruction
+	 * TODO(tianwei): it can only count clip that are open?
+	 * */
 	if (smj->clip_num > 1) {
 		int count = 1;		// witness cameras start from 1
 		for (ScrArea *sa = window->screen->areabase.first; sa != NULL; sa = sa->next) {




More information about the Bf-blender-cvs mailing list