[Bf-blender-cvs] [41ad8ce] soc-2016-multiview: make refine_flags into an array
Tianwei Shen
noreply at git.blender.org
Wed Jun 8 18:04:03 CEST 2016
Commit: 41ad8cea51e7f4270f665a7afe966577da3b4001
Author: Tianwei Shen
Date: Thu Jun 9 00:03:56 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB41ad8cea51e7f4270f665a7afe966577da3b4001
make refine_flags into an array
===================================================================
M intern/libmv/intern/reconstructionN.cc
M intern/libmv/intern/reconstructionN.h
M source/blender/blenkernel/intern/tracking_correspondence.c
===================================================================
diff --git a/intern/libmv/intern/reconstructionN.cc b/intern/libmv/intern/reconstructionN.cc
index 6a1fd7e..0e1e109 100644
--- a/intern/libmv/intern/reconstructionN.cc
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -46,23 +46,109 @@ using mv::Reconstruction;
using libmv::CameraIntrinsics;
struct libmv_ReconstructionN {
- mv::Reconstruction reconstruction;
+ mv::Reconstruction reconstruction;
- /* Used for per-track average error calculation after reconstruction */
- mv::Tracks tracks;
- libmv::CameraIntrinsics *intrinsics;
+ /* Used for per-track average error calculation after reconstruction */
+ mv::Tracks tracks;
+ libmv::CameraIntrinsics *intrinsics;
- double error;
- bool is_valid;
+ double error;
+ bool is_valid;
};
-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 *libmv_camera_intrinsics_options,
- libmv_ReconstructionOptions *libmv_reconstruction_options,
+ libmv_MultiviewReconstructionOptions *libmv_reconstruction_options,
reconstruct_progress_update_cb progress_update_callback,
void* callback_customdata)
{
+ //libmv_ReconstructionN *libmv_reconstruction =
+ // LIBMV_OBJECT_NEW(libmv_ReconstructionN);
+
+ //Tracks &tracks = *((Tracks *) libmv_tracks);
+ //EuclideanReconstruction &reconstruction =
+ // libmv_reconstruction->reconstruction;
+
+ //ReconstructUpdateCallback update_callback =
+ // ReconstructUpdateCallback(progress_update_callback,
+ // callback_customdata);
+
+ ///* Retrieve reconstruction options from C-API to libmv API. */
+ //CameraIntrinsics *camera_intrinsics;
+ //camera_intrinsics = libmv_reconstruction->intrinsics =
+ // libmv_cameraIntrinsicsCreateFromOptions(libmv_camera_intrinsics_options);
+
+ ///* Invert the camera intrinsics/ */
+ //Tracks normalized_tracks;
+ //libmv_getNormalizedTracks(tracks, *camera_intrinsics, &normalized_tracks);
+
+ ///* keyframe selection. */
+ //int keyframe1 = libmv_reconstruction_options->keyframe1,
+ // keyframe2 = libmv_reconstruction_options->keyframe2;
+
+ //if (libmv_reconstruction_options->select_keyframes) {
+ // LG << "Using automatic keyframe selection";
+
+ // update_callback.invoke(0, "Selecting keyframes");
+
+ // selectTwoKeyframesBasedOnGRICAndVariance(tracks,
+ // normalized_tracks,
+ // *camera_intrinsics,
+ // keyframe1,
+ // keyframe2);
+
+ // /* so keyframes in the interface would be updated */
+ // libmv_reconstruction_options->keyframe1 = keyframe1;
+ // libmv_reconstruction_options->keyframe2 = keyframe2;
+ //}
+
+ ///* Actual reconstruction. */
+ //LG << "frames to init from: " << keyframe1 << " " << keyframe2;
+
+ //libmv::vector<Marker> keyframe_markers =
+ // normalized_tracks.MarkersForTracksInBothImages(keyframe1, keyframe2);
+
+ //LG << "number of markers for init: " << keyframe_markers.size();
+
+ //if (keyframe_markers.size() < 8) {
+ // LG << "No enough markers to initialize from";
+ // libmv_reconstruction->is_valid = false;
+ // return libmv_reconstruction;
+ //}
+
+ //update_callback.invoke(0, "Initial reconstruction");
+
+ //EuclideanReconstructTwoFrames(keyframe_markers, &reconstruction);
+ //EuclideanBundle(normalized_tracks, &reconstruction);
+ //EuclideanCompleteReconstruction(normalized_tracks,
+ // &reconstruction,
+ // &update_callback);
+
+ ///* Refinement/ */
+ //if (libmv_reconstruction_options->refine_intrinsics) {
+ // libmv_solveRefineIntrinsics(
+ // tracks,
+ // libmv_reconstruction_options->refine_intrinsics,
+ // libmv::BUNDLE_NO_CONSTRAINTS,
+ // progress_update_callback,
+ // callback_customdata,
+ // &reconstruction,
+ // camera_intrinsics);
+ //}
+
+ ///* Set reconstruction scale to unity. */
+ //EuclideanScaleToUnity(&reconstruction);
+
+ ///* Finish reconstruction. */
+ //finishReconstruction(tracks,
+ // *camera_intrinsics,
+ // libmv_reconstruction,
+ // progress_update_callback,
+ // callback_customdata);
+
+ //libmv_reconstruction->is_valid = true;
+
+ //return (libmv_Reconstruction *) libmv_reconstruction;
return (libmv_ReconstructionN**) NULL;
}
diff --git a/intern/libmv/intern/reconstructionN.h b/intern/libmv/intern/reconstructionN.h
index a885ed9..727b387 100644
--- a/intern/libmv/intern/reconstructionN.h
+++ b/intern/libmv/intern/reconstructionN.h
@@ -35,11 +35,17 @@ extern "C" {
typedef struct libmv_ReconstructionN libmv_ReconstructionN;
+typedef struct libmv_MultiviewReconstructionOptions {
+ int select_keyframes;
+ int keyframe1, keyframe2;
+ int *all_refine_intrinsics; /* this should be an array since each clip has its own refine_flags */
+} libmv_MultiviewReconstructionOptions;
+
libmv_ReconstructionN** libmv_solveMultiviewReconstruction(
const int clip_num,
const struct libmv_TracksN **all_libmv_tracks,
const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options,
- libmv_ReconstructionOptions* libmv_reconstruction_options,
+ libmv_MultiviewReconstructionOptions* libmv_reconstruction_options,
reconstruct_progress_update_cb progress_update_callback,
void* callback_customdata);
diff --git a/source/blender/blenkernel/intern/tracking_correspondence.c b/source/blender/blenkernel/intern/tracking_correspondence.c
index 7f67b2e..9919e66 100644
--- a/source/blender/blenkernel/intern/tracking_correspondence.c
+++ b/source/blender/blenkernel/intern/tracking_correspondence.c
@@ -64,11 +64,11 @@ typedef struct MovieMultiviewReconstructContext {
libmv_CameraIntrinsicsOptions *all_camera_intrinsics_options; /* camera intrinsic of each camera */
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 */
bool select_keyframes;
int keyframe1, keyframe2; /* the key frames selected from the primary camera */
- int refine_flags;
char object_name[MAX_NAME];
bool is_camera;
short motion_flag;
@@ -172,6 +172,7 @@ BKE_tracking_multiview_reconstruction_context_new(MovieClip **clips,
context->all_camera_intrinsics_options = MEM_callocN(num_clips * sizeof(libmv_CameraIntrinsicsOptions), "MRC camera intrinsics");
context->all_sfra = MEM_callocN(num_clips * sizeof(int), "MRC start frames");
context->all_efra = MEM_callocN(num_clips * sizeof(int), "MRC end frames");
+ context->all_refine_flags = MEM_callocN(num_clips * sizeof(int), "MRC refine flags");
context->keyframe1 = keyframe1;
context->keyframe2 = keyframe2;
context->clip_num = num_clips;
@@ -199,7 +200,6 @@ BKE_tracking_multiview_reconstruction_context_new(MovieClip **clips,
context->motion_flag = tracking->settings.motion_flag;
context->select_keyframes =
(tracking->settings.reconstruction_flag & TRACKING_USE_KEYFRAME_SELECTION) != 0;
- context->refine_flags = multiview_refine_intrinsics_get_flags(tracking, object);
}
tracking_cameraIntrinscisOptionsFromTracking(tracking,
@@ -207,6 +207,7 @@ BKE_tracking_multiview_reconstruction_context_new(MovieClip **clips,
&context->all_camera_intrinsics_options[i]);
context->all_tracks_map[i] = tracks_map_new(context->object_name, context->is_camera, num_tracks, 0);
+ context->all_refine_flags[i] = multiview_refine_intrinsics_get_flags(tracking, object);
track = tracksbase->first;
while (track) {
@@ -260,13 +261,14 @@ void BKE_tracking_multiview_reconstruction_context_free(MovieMultiviewReconstruc
MEM_freeN(context->all_tracks_map);
MEM_freeN(context->all_sfra);
MEM_freeN(context->all_efra);
+ MEM_freeN(context->all_refine_flags);
MEM_freeN(context);
}
/* Fill in multiview reconstruction options structure from reconstruction context. */
-static void reconstructionOptionsFromContext(libmv_ReconstructionOptions *reconstruction_options,
+static void multiviewReconstructionOptionsFromContext(libmv_MultiviewReconstructionOptions *reconstruction_options,
MovieMultiviewReconstructContext *context)
{
reconstruction_options->select_keyframes = context->select_keyframes;
@@ -274,7 +276,7 @@ static void reconstructionOptionsFromContext(libmv_ReconstructionOptions *recons
reconstruction_options->keyframe1 = context->keyframe1;
reconstruction_options->keyframe2 = context->keyframe2;
- reconstruction_options->refine_intrinsics = context->refine_flags;
+ reconstruction_options->all_refine_intrinsics = context->all_refine_flags;
}
/* Callback which is called from libmv side to update progress in the interface. */
@@ -306,7 +308,7 @@ void BKE_tracking_multiview_reconstruction_solve(MovieMultiviewReconstructContex
MultiviewReconstructProgressData progressdata;
- libmv_ReconstructionOptions reconstruction_options;
+ libmv_MultiviewReconstructionOptions reconstruction_options;
progressdata.stop = stop;
progressdata.do_update = do_update;
@@ -314,7 +316,7 @@ void BKE_tracking_multiview_reconstruction_solve(MovieMultiviewReconstructContex
progressdata.stats_message = stats_message;
progressdata.message_size = message_size;
- reconstructionOptionsFromContext(&reconstruction_options, context);
+ multiviewReconstructionOptionsFromContext(&reconstruction_options, context);
if (context->motion_flag & TRACKING_MOTION_MODAL) {
// TODO(tianwei): leave tracking solve object for now
More information about the Bf-blender-cvs
mailing list