Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extern/libmv/libmv-capi.cpp44
-rw-r--r--extern/libmv/libmv-capi.h17
-rw-r--r--source/blender/blenkernel/BKE_movieclip.h1
-rw-r--r--source/blender/blenkernel/BKE_tracking.h6
-rw-r--r--source/blender/blenkernel/intern/movieclip.c8
-rw-r--r--source/blender/blenkernel/intern/tracking.c19
-rw-r--r--source/blender/editors/include/ED_clip.h1
-rw-r--r--source/blender/editors/space_clip/clip_draw.c9
-rw-r--r--source/blender/editors/space_clip/clip_editor.c18
-rw-r--r--source/blender/editors/space_clip/space_clip.c3
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c5
11 files changed, 69 insertions, 62 deletions
diff --git a/extern/libmv/libmv-capi.cpp b/extern/libmv/libmv-capi.cpp
index 6b6ecf15908..00f140b31e6 100644
--- a/extern/libmv/libmv-capi.cpp
+++ b/extern/libmv/libmv-capi.cpp
@@ -261,7 +261,7 @@ static void saveBytesImage(unsigned char *data, int width, int height)
}
#endif
-int libmv_regionTrackerTrack(libmv_RegionTracker *tracker, const float *ima1, const float *ima2,
+int libmv_regionTrackerTrack(libmv_RegionTracker *libmv_tracker, const float *ima1, const float *ima2,
int width, int height, int half_window_size,
double x1, double y1, double *x2, double *y2)
{
@@ -269,8 +269,8 @@ int libmv_regionTrackerTrack(libmv_RegionTracker *tracker, const float *ima1, co
libmv::TrkltRegionTracker *trklt_region_tracker;
libmv::FloatImage old_patch, new_patch;
- trklt_region_tracker = tracker->trklt_region_tracker;
- region_tracker = tracker->region_tracker;
+ trklt_region_tracker = libmv_tracker->trklt_region_tracker;
+ region_tracker = libmv_tracker->region_tracker;
trklt_region_tracker->half_window_size = half_window_size;
@@ -294,29 +294,29 @@ int libmv_regionTrackerTrack(libmv_RegionTracker *tracker, const float *ima1, co
#endif
}
-void libmv_regionTrackerDestroy(libmv_RegionTracker *tracker)
+void libmv_regionTrackerDestroy(libmv_RegionTracker *libmv_tracker)
{
- delete tracker->region_tracker;
- delete tracker;
+ delete libmv_tracker->region_tracker;
+ delete libmv_tracker;
}
/* ************ Tracks ************ */
libmv_Tracks *libmv_tracksNew(void)
{
- libmv::Tracks *tracks = new libmv::Tracks();
+ libmv::Tracks *libmv_tracks = new libmv::Tracks();
- return (libmv_Tracks *)tracks;
+ return (libmv_Tracks *)libmv_tracks;
}
-void libmv_tracksInsert(struct libmv_Tracks *tracks, int image, int track, double x, double y)
+void libmv_tracksInsert(struct libmv_Tracks *libmv_tracks, int image, int track, double x, double y)
{
- ((libmv::Tracks*)tracks)->Insert(image, track, x, y);
+ ((libmv::Tracks*)libmv_tracks)->Insert(image, track, x, y);
}
-void libmv_tracksDestroy(libmv_Tracks *tracks)
+void libmv_tracksDestroy(libmv_Tracks *libmv_tracks)
{
- delete (libmv::Tracks*)tracks;
+ delete (libmv::Tracks*)libmv_tracks;
}
/* ************ Reconstruction solver ************ */
@@ -406,7 +406,7 @@ int libmv_reporojectionCameraForImage(libmv_Reconstruction *libmv_reconstruction
return 0;
}
-float libmv_reprojectionError(libmv_Reconstruction *libmv_reconstruction)
+double libmv_reprojectionError(libmv_Reconstruction *libmv_reconstruction)
{
return libmv_reconstruction->error;
}
@@ -421,21 +421,21 @@ void libmv_destroyReconstruction(libmv_Reconstruction *libmv_reconstruction)
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride)
{
std::vector<libmv::Corner> detect= libmv::Detect(data, width, height, stride);
- std::vector<libmv::Corner> *corners= new std::vector<libmv::Corner>();
+ std::vector<libmv::Corner> *libmv_corners= new std::vector<libmv::Corner>();
- corners->insert(corners->begin(), detect.begin(), detect.end());
+ libmv_corners->insert(libmv_corners->begin(), detect.begin(), detect.end());
- return (libmv_Corners *)corners;
+ return (libmv_Corners *)libmv_corners;
}
-int libmv_countCorners(struct libmv_Corners *corners)
+int libmv_countCorners(struct libmv_Corners *libmv_corners)
{
- return ((std::vector<libmv::Corner> *)corners)->size();
+ return ((std::vector<libmv::Corner> *)libmv_corners)->size();
}
-void libmv_getCorner(struct libmv_Corners *corners, int number, float *x, float *y, float *score, float *size)
+void libmv_getCorner(struct libmv_Corners *libmv_corners, int number, double *x, double *y, double *score, double *size)
{
- libmv::Corner corner = ((std::vector<libmv::Corner> *)corners)->at(number);
+ libmv::Corner corner = ((std::vector<libmv::Corner> *)libmv_corners)->at(number);
*x = corner.x;
*y = corner.y;
@@ -443,9 +443,9 @@ void libmv_getCorner(struct libmv_Corners *corners, int number, float *x, float
*size = corner.size;
}
-void libmv_destroyCorners(struct libmv_Corners *corners)
+void libmv_destroyCorners(struct libmv_Corners *libmv_corners)
{
- delete (std::vector<libmv::Corner> *)corners;
+ delete (std::vector<libmv::Corner> *)libmv_corners;
}
/* ************ utils ************ */
diff --git a/extern/libmv/libmv-capi.h b/extern/libmv/libmv-capi.h
index 12881f9cb3e..c28b0f570d0 100644
--- a/extern/libmv/libmv-capi.h
+++ b/extern/libmv/libmv-capi.h
@@ -45,30 +45,29 @@ void libmv_setLoggingVerbosity(int verbosity);
/* RegionTracker */
struct libmv_RegionTracker *libmv_regionTrackerNew(int max_iterations, int pyramid_level, double tolerance);
-int libmv_regionTrackerTrack(struct libmv_RegionTracker *tracker, const float *ima1, const float *ima2,
+int libmv_regionTrackerTrack(struct libmv_RegionTracker *libmv_tracker, const float *ima1, const float *ima2,
int width, int height, int half_window_size,
double x1, double y1, double *x2, double *y2);
-void libmv_regionTrackerDestroy(struct libmv_RegionTracker *tracker);
+void libmv_regionTrackerDestroy(struct libmv_RegionTracker *libmv_tracker);
/* Tracks */
struct libmv_Tracks *libmv_tracksNew(void);
-void libmv_tracksInsert(struct libmv_Tracks *tracks, int image, int track, double x, double y);
-void libmv_tracksDestroy(struct libmv_Tracks *tracks);
+void libmv_tracksInsert(struct libmv_Tracks *libmv_tracks, int image, int track, double x, double y);
+void libmv_tracksDestroy(struct libmv_Tracks *libmv_tracks);
/* Reconstruction solver */
struct libmv_Reconstruction *libmv_solveReconstruction(struct libmv_Tracks *tracks, int keyframe1, int keyframe2,
double focal_length, double principal_x, double principal_y, double k1, double k2, double k3);
int libmv_reporojectionPointForTrack(struct libmv_Reconstruction *libmv_reconstruction, int track, double pos[3]);
int libmv_reporojectionCameraForImage(struct libmv_Reconstruction *libmv_reconstruction, int image, double mat[4][4]);
-float libmv_reprojectionError(struct libmv_Reconstruction *libmv_reconstruction);
+double libmv_reprojectionError(struct libmv_Reconstruction *libmv_reconstruction);
void libmv_destroyReconstruction(struct libmv_Reconstruction *libmv_reconstruction);
/* feature detector */
-
struct libmv_Corners *libmv_detectCorners(unsigned char *data, int width, int height, int stride);
-int libmv_countCorners(struct libmv_Corners *corners);
-void libmv_getCorner(struct libmv_Corners *corners, int number, float *x, float *y, float *score, float *size);
-void libmv_destroyCorners(struct libmv_Corners *corners);
+int libmv_countCorners(struct libmv_Corners *libmv_corners);
+void libmv_getCorner(struct libmv_Corners *libmv_corners, int number, double *x, double *y, double *score, double *size);
+void libmv_destroyCorners(struct libmv_Corners *libmv_corners);
/* utils */
void libmv_applyCameraIntrinsics(double focal_length, double principal_x, double principal_y, double k1, double k2, double k3,
diff --git a/source/blender/blenkernel/BKE_movieclip.h b/source/blender/blenkernel/BKE_movieclip.h
index 29a0a02c740..259e6ed2dca 100644
--- a/source/blender/blenkernel/BKE_movieclip.h
+++ b/source/blender/blenkernel/BKE_movieclip.h
@@ -50,6 +50,7 @@ void BKE_movieclip_reload(struct MovieClip *clip);
struct ImBuf *BKE_movieclip_acquire_ibuf(struct MovieClip *clip, struct MovieClipUser *user);
struct ImBuf *BKE_movieclip_acquire_stable_ibuf(struct MovieClip *clip, struct MovieClipUser *user, float loc[2], float *scale);
void BKE_movieclip_acquire_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height);
+void BKE_movieclip_aspect(struct MovieClip *clip, float *aspx, float *aspy);
int BKE_movieclip_has_frame(struct MovieClip *clip, struct MovieClipUser *user);
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr);
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index a3df096f8d6..58425bb3b53 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -71,7 +71,7 @@ void BKE_tracking_sync(struct MovieTrackingContext *context);
void BKE_tracking_sync_user(struct MovieClipUser *user, struct MovieTrackingContext *context);
int BKE_tracking_next(struct MovieTrackingContext *context);
-float BKE_tracking_solve_reconstruction(struct MovieTracking *tracking, int width, int height);
+float BKE_tracking_solve_reconstruction(struct MovieTracking *tracking, int width, int height, float aspx, float aspy);
void BKE_track_unique_name(struct MovieTracking *tracking, struct MovieTrackingTrack *track);
struct MovieTrackingTrack *BKE_find_track_by_name(struct MovieTracking *tracking, const char *name);
@@ -80,8 +80,8 @@ struct MovieReconstructedCamera *BKE_tracking_get_reconstructed_camera(struct Mo
void BKE_get_tracking_mat(struct Scene *scene, float mat[4][4]);
void BKE_tracking_projection_matrix(struct MovieTracking *tracking, int framenr, int winx, int winy, float mat[4][4]);
-void BKE_tracking_apply_intrinsics(struct MovieTracking *tracking, float co[2], float width, float height, float nco[2]);
-void BKE_tracking_invert_intrinsics(struct MovieTracking *tracking, float co[2], float width, float height, float nco[2]);
+void BKE_tracking_apply_intrinsics(struct MovieTracking *tracking, float co[2], float nco[2]);
+void BKE_tracking_invert_intrinsics(struct MovieTracking *tracking, float co[2], float nco[2]);
void BKE_tracking_detect(struct MovieTracking *tracking, struct ImBuf *imbuf, int framenr);
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 4e1e42e0caa..40ab2273fbe 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -422,6 +422,14 @@ void BKE_movieclip_acquire_size(MovieClip *clip, MovieClipUser *user, int *width
}
}
+void BKE_movieclip_aspect(MovieClip *clip, float *aspx, float *aspy)
+{
+ *aspx= *aspy= 1.0;
+
+ /* x is always 1 */
+ *aspy = clip->aspy/clip->aspx;
+}
+
/* get segments of cached frames. useful for debugging cache policies */
void BKE_movieclip_get_cache_segments(MovieClip *clip, int *totseg_r, int **points_r)
{
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 9c2a2247206..ab90bfad3b6 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -875,7 +875,7 @@ static struct libmv_Tracks *create_libmv_tracks(MovieTracking *tracking, int wid
{
int tracknr= 0;
MovieTrackingTrack *track;
- struct libmv_Tracks *tracks= libmv_tracksNew();;
+ struct libmv_Tracks *tracks= libmv_tracksNew();
track= tracking->tracks.first;
while(track) {
@@ -885,7 +885,8 @@ static struct libmv_Tracks *create_libmv_tracks(MovieTracking *tracking, int wid
MovieTrackingMarker *marker= &track->markers[a];
if((marker->flag&MARKER_DISABLED)==0)
- libmv_tracksInsert(tracks, marker->framenr, tracknr, marker->pos[0]*width, marker->pos[1]*height);
+ libmv_tracksInsert(tracks, marker->framenr, tracknr,
+ marker->pos[0]*width, marker->pos[1]*height);
}
track= track->next;
@@ -988,15 +989,16 @@ static int retrive_libmv_reconstruct(MovieTracking *tracking, struct libmv_Recon
#endif
-float BKE_tracking_solve_reconstruction(MovieTracking *tracking, int width, int height)
+float BKE_tracking_solve_reconstruction(MovieTracking *tracking, int width, int height, float aspx, float aspy)
{
#if WITH_LIBMV
{
MovieTrackingCamera *camera= &tracking->camera;
- struct libmv_Tracks *tracks= create_libmv_tracks(tracking, width, height);
+ struct libmv_Tracks *tracks= create_libmv_tracks(tracking, width*aspx, height*aspy);
struct libmv_Reconstruction *reconstruction = libmv_solveReconstruction(tracks,
tracking->settings.keyframe1, tracking->settings.keyframe2,
- camera->focal, camera->principal[0], camera->principal[1],
+ camera->focal,
+ camera->principal[0]*aspx, camera->principal[1]*aspy,
camera->k1, camera->k2, camera->k3);
float error= libmv_reprojectionError(reconstruction);
@@ -1106,7 +1108,7 @@ void BKE_tracking_projection_matrix(MovieTracking *tracking, int framenr, int wi
} else copy_m4_m4(mat, winmat);
}
-void BKE_tracking_apply_intrinsics(MovieTracking *tracking, float co[2], float width, float height, float nco[2])
+void BKE_tracking_apply_intrinsics(MovieTracking *tracking, float co[2], float nco[2])
{
MovieTrackingCamera *camera= &tracking->camera;
@@ -1126,7 +1128,7 @@ void BKE_tracking_apply_intrinsics(MovieTracking *tracking, float co[2], float w
#endif
}
-void BKE_tracking_invert_intrinsics(MovieTracking *tracking, float co[2], float width, float height, float nco[2])
+void BKE_tracking_invert_intrinsics(MovieTracking *tracking, float co[2], float nco[2])
{
MovieTrackingCamera *camera= &tracking->camera;
@@ -1186,8 +1188,7 @@ void BKE_tracking_detect(MovieTracking *tracking, ImBuf *ibuf, int framenr)
a= libmv_countCorners(corners);
while(a--) {
MovieTrackingTrack *track;
-
- float x, y, size, score;
+ double x, y, size, score;
libmv_getCorner(corners, a, &x, &y, &score, &size);
diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index 1d06b4709e6..13f222fb136 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -46,7 +46,6 @@ void ED_space_clip_set(struct bContext *C, struct SpaceClip *sc, struct MovieCli
struct MovieClip *ED_space_clip(struct SpaceClip *sc);
void ED_space_clip_size(struct SpaceClip *sc, int *width, int *height);
void ED_space_clip_zoom(struct SpaceClip *sc, ARegion *ar, float *zoomx, float *zoomy);
-void ED_clip_aspect(struct MovieClip *clip, float *aspx, float *aspy);
void ED_space_clip_aspect(struct SpaceClip *sc, float *aspx, float *aspy);
struct ImBuf *ED_space_clip_acquire_buffer(struct SpaceClip *sc);
diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c
index a4ed17c3409..19114dcad6d 100644
--- a/source/blender/editors/space_clip/clip_draw.c
+++ b/source/blender/editors/space_clip/clip_draw.c
@@ -750,7 +750,7 @@ static void draw_distorion_grid(MovieTracking *tracking, int width, int height)
for(y= 0; y<=n; y++) {
for(x= 0; x<=n; x++) {
- BKE_tracking_invert_intrinsics(tracking, pos, width, height, grid[y][x]);
+ BKE_tracking_invert_intrinsics(tracking, pos, grid[y][x]);
grid[y][x][0]/= width;
grid[y][x][1]/= height;
@@ -870,12 +870,13 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip,
}
if(sc->flag&SC_SHOW_BUNDLES) {
- float pos[4], vec[4], mat[4][4];
+ float pos[4], vec[4], mat[4][4], aspx, aspy;
glEnable(GL_POINT_SMOOTH);
glPointSize(3.0f);
- BKE_tracking_projection_matrix(tracking, framenr, width, height, mat);
+ BKE_movieclip_aspect(clip, &aspx, &aspy);
+ BKE_tracking_projection_matrix(tracking, framenr, width*aspx, height*aspy, mat);
track= tracking->tracks.first;
while(track) {
@@ -891,7 +892,7 @@ static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip,
pos[0]= (pos[0]/(pos[3]*2.0f)+0.5f)*width;
pos[1]= (pos[1]/(pos[3]*2.0f)+0.5f)*height;
- BKE_tracking_apply_intrinsics(tracking, pos, width, height, pos);
+ BKE_tracking_apply_intrinsics(tracking, pos, pos);
vec[0]= (marker->pos[0]+track->offset[0])*width;
vec[1]= (marker->pos[1]+track->offset[1])*height;
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index ed8ac00beeb..6f6c08c3bf7 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -124,20 +124,14 @@ void ED_space_clip_zoom(SpaceClip *sc, ARegion *ar, float *zoomx, float *zoomy)
*zoomy= (float)(ar->winrct.ymax - ar->winrct.ymin + 1)/(float)((ar->v2d.cur.ymax - ar->v2d.cur.ymin)*height);
}
-void ED_clip_aspect(MovieClip *clip, float *aspx, float *aspy)
-{
- *aspx= *aspy= 1.0;
-
- if(clip == NULL || clip->aspx==0.0f || clip->aspy==0.0f)
- return;
-
- /* x is always 1 */
- *aspy = clip->aspy/clip->aspx;
-}
-
void ED_space_clip_aspect(SpaceClip *sc, float *aspx, float *aspy)
{
- ED_clip_aspect(ED_space_clip(sc), aspx, aspy);
+ MovieClip *clip= ED_space_clip(sc);
+
+ if(clip)
+ BKE_movieclip_aspect(clip, aspx, aspy);
+ else
+ *aspx= *aspy= 1.f;
}
void ED_clip_update_frame(const Main *mainp, int cfra)
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 86b65e59b39..597f0c32b60 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -391,6 +391,9 @@ static void clip_keymap(struct wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "CLIP_OT_join_tracks", JKEY, KM_PRESS, KM_CTRL, 0);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_context_toggle", MKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "space_data.use_mute_footage");
+
transform_keymap_for_space(keyconf, keymap, SPACE_CLIP);
}
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index eb5e34928d2..ef3bdc45e6f 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -1465,7 +1465,7 @@ static int solve_camera_exec(bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
MovieTracking *tracking= &clip->tracking;
int width, height;
- float error;
+ float error, aspx, aspy;
if(!check_solve_track_count(tracking)) {
BKE_report(op->reports, RPT_ERROR, "At least 10 tracks on both of keyframes are needed for reconstruction");
@@ -1474,8 +1474,9 @@ static int solve_camera_exec(bContext *C, wmOperator *op)
/* could fail if footage uses images with different sizes */
BKE_movieclip_acquire_size(clip, NULL, &width, &height);
+ BKE_movieclip_aspect(clip, &aspx, &aspy);
- error= BKE_tracking_solve_reconstruction(tracking, width, height);
+ error= BKE_tracking_solve_reconstruction(tracking, width, height, aspx, aspy);
if(error<0)
BKE_report(op->reports, RPT_WARNING, "Some data failed to reconstruct, see console for details");