[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