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:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-06-06 22:58:30 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-06-06 22:58:30 +0400
commitf43a733f591377f2cdce0555443dba003c05fd30 (patch)
tree6574507d07111ea418e5c09ce1adb4feac32561d /source/blender/blenkernel/intern
parent3e3e5b2ea3a8dadfbd1dcfe295ddf28bc2236141 (diff)
Changed semantic of recently added start_frame
Now it's indicates at which scene frame number movie clip starts playing back. This this setting is still belongs to clip datavlock and used by all users of clip such as movie compositor nodes, constraints and so. After long discussion and thoughts about this it was decided that this would match image's current behavior (which initially seen a bit crappy), but that's actually allows: - Keep semantics of start frame in image and clip datablocks in sync - Allows to support features like support of loading image sequences with crappy numbers in suffix which doesn't fit long int. - Allows to eliminate extra boolean checkbox to control such kind of offset. Hopefully from pipeline POV it wouldn't hurt because idea of having this things implemented in original way was working only if sequence before processing started naming form 001.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/constraint.c13
-rw-r--r--source/blender/blenkernel/intern/movieclip.c39
-rw-r--r--source/blender/blenkernel/intern/tracking.c12
3 files changed, 37 insertions, 27 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index c6a0ecc057a..afd50de8159 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3897,6 +3897,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
MovieTrackingTrack *track;
MovieTrackingObject *tracking_object;
Object *camob = data->camera ? data->camera : scene->camera;
+ int framenr;
if (data->flag & FOLLOWTRACK_ACTIVECLIP)
clip = scene->clip;
@@ -3919,6 +3920,8 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
if (!track)
return;
+ framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra);
+
if (data->flag & FOLLOWTRACK_USE_3D_POSITION) {
if (track->flag & TRACK_HAS_BUNDLE) {
float obmat[4][4], mat[4][4];
@@ -3930,7 +3933,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
copy_m4_m4(mat, camob->obmat);
- BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, imat);
+ BKE_tracking_get_interpolated_camera(tracking, tracking_object, framenr, imat);
invert_m4(imat);
mul_serie_m4(cob->matrix, obmat, mat, imat, NULL, NULL, NULL, NULL, NULL);
@@ -3969,7 +3972,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
CameraParams params;
float pos[2], rmat[4][4];
- marker = BKE_tracking_get_marker(track, scene->r.cfra);
+ marker = BKE_tracking_get_marker(track, framenr);
add_v2_v2v2(pos, marker->pos, track->offset);
@@ -4092,8 +4095,9 @@ static void camerasolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
float mat[4][4], obmat[4][4];
MovieTracking *tracking = &clip->tracking;
MovieTrackingObject *object = BKE_tracking_get_camera_object(tracking);
+ int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra);
- BKE_tracking_get_interpolated_camera(tracking, object, scene->r.cfra, mat);
+ BKE_tracking_get_interpolated_camera(tracking, object, framenr, mat);
copy_m4_m4(obmat, cob->matrix);
@@ -4156,10 +4160,11 @@ static void objectsolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase
if (object) {
float mat[4][4], obmat[4][4], imat[4][4], cammat[4][4], camimat[4][4], parmat[4][4];
+ int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra);
BKE_object_where_is_calc_mat4(scene, camob, cammat);
- BKE_tracking_get_interpolated_camera(tracking, object, scene->r.cfra, mat);
+ BKE_tracking_get_interpolated_camera(tracking, object, framenr, mat);
invert_m4_m4(camimat, cammat);
mult_m4_m4m4(parmat, cammat, data->invmat);
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index a90fc28cd1e..de12926f3eb 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -153,18 +153,13 @@ static void get_sequence_fname(MovieClip *clip, int framenr, char *name)
BLI_strncpy(name, clip->name, sizeof(clip->name));
BLI_stringdec(name, head, tail, &numlen);
- if (clip->flag & MCLIP_CUSTOM_START_FRAME) {
- offset = clip->start_frame;
- }
- else {
- /* movieclips always points to first image from sequence,
- * autoguess offset for now. could be something smarter in the future
- */
- offset = sequence_guess_offset(clip->name, strlen(head), numlen);
- }
+ /* movieclips always points to first image from sequence,
+ * autoguess offset for now. could be something smarter in the future
+ */
+ offset = sequence_guess_offset(clip->name, strlen(head), numlen);
if (numlen)
- BLI_stringenc(name, head, tail, numlen, offset + framenr - 1);
+ BLI_stringenc(name, head, tail, numlen, offset + framenr - clip->start_frame);
else
BLI_strncpy(name, clip->name, sizeof(clip->name));
@@ -176,6 +171,7 @@ static void get_proxy_fname(MovieClip *clip, int proxy_render_size, int undistor
{
int size = rendersize_to_number(proxy_render_size);
char dir[FILE_MAX], clipdir[FILE_MAX], clipfile[FILE_MAX];
+ int proxynr = framenr - clip->start_frame + 1;
BLI_split_dirfile(clip->name, clipdir, clipfile, FILE_MAX, FILE_MAX);
@@ -187,9 +183,9 @@ static void get_proxy_fname(MovieClip *clip, int proxy_render_size, int undistor
}
if (undistorted)
- BLI_snprintf(name, FILE_MAX, "%s/%s/proxy_%d_undistorted/%08d", dir, clipfile, size, framenr);
+ BLI_snprintf(name, FILE_MAX, "%s/%s/proxy_%d_undistorted/%08d", dir, clipfile, size, proxynr);
else
- BLI_snprintf(name, FILE_MAX, "%s/%s/proxy_%d/%08d", dir, clipfile, size, framenr);
+ BLI_snprintf(name, FILE_MAX, "%s/%s/proxy_%d/%08d", dir, clipfile, size, proxynr);
BLI_path_abs(name, G.main->name);
BLI_path_frame(name, 1, 0);
@@ -254,11 +250,7 @@ static ImBuf *movieclip_load_movie_file(MovieClip *clip, MovieClipUser *user, in
int fra;
dur = IMB_anim_get_duration(clip->anim, tc);
- fra = framenr - 1;
-
- if (clip->flag & MCLIP_CUSTOM_START_FRAME) {
- fra += clip->start_frame - 1;
- }
+ fra = framenr - clip->start_frame;
if (fra < 0)
fra = 0;
@@ -1038,7 +1030,8 @@ void BKE_movieclip_update_scopes(MovieClip *clip, MovieClipUser *user, MovieClip
if (act_track) {
MovieTrackingTrack *track = act_track;
- MovieTrackingMarker *marker = BKE_tracking_get_marker(track, user->framenr);
+ int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, user->framenr);
+ MovieTrackingMarker *marker = BKE_tracking_get_marker(track, framenr);
if (marker->flag & MARKER_DISABLED) {
scopes->track_disabled = TRUE;
@@ -1230,3 +1223,13 @@ void BKE_movieclip_unlink(Main *bmain, MovieClip *clip)
clip->id.us = 0;
}
+
+int BKE_movieclip_remap_scene_to_clip_frame(MovieClip *clip, int framenr)
+{
+ return framenr - clip->start_frame + 1;
+}
+
+int BKE_movieclip_remap_clip_to_scene_frame(MovieClip *clip, int framenr)
+{
+ return framenr + clip->start_frame - 1;
+}
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index b0745ebf1c8..4abb461bc81 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -972,7 +972,8 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
track = tracksbase->first;
while (track) {
if (TRACK_SELECTED(track) && (track->flag & (TRACK_LOCKED | TRACK_HIDDEN)) == 0) {
- MovieTrackingMarker *marker = BKE_tracking_get_marker(track, user->framenr);
+ int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, user->framenr);
+ MovieTrackingMarker *marker = BKE_tracking_get_marker(track, framenr);
if ((marker->flag & MARKER_DISABLED) == 0)
num_tracks++;
@@ -993,7 +994,8 @@ MovieTrackingContext *BKE_tracking_context_new(MovieClip *clip, MovieClipUser *u
track = tracksbase->first;
while (track) {
if (TRACK_SELECTED(track) && (track->flag & (TRACK_HIDDEN | TRACK_LOCKED)) == 0) {
- MovieTrackingMarker *marker = BKE_tracking_get_marker(track, user->framenr);
+ int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, user->framenr);
+ MovieTrackingMarker *marker = BKE_tracking_get_marker(track, framenr);
if ((marker->flag & MARKER_DISABLED) == 0) {
TrackContext track_context;
@@ -1311,7 +1313,7 @@ static ImBuf *get_frame_ibuf(MovieTrackingContext *context, int framenr)
ImBuf *ibuf;
MovieClipUser user = context->user;
- user.framenr = framenr;
+ user.framenr = BKE_movieclip_remap_clip_to_scene_frame(context->clip, framenr);
ibuf = BKE_movieclip_get_ibuf_flag(context->clip, &user, context->clip_flag, MOVIECLIP_CACHE_SKIP);
@@ -1399,7 +1401,7 @@ void BKE_tracking_sync_user(MovieClipUser *user, MovieTrackingContext *context)
int BKE_tracking_next(MovieTrackingContext *context)
{
ImBuf *ibuf_new;
- int curfra = context->user.framenr;
+ int curfra = BKE_movieclip_remap_scene_to_clip_frame(context->clip, context->user.framenr);
int a, ok = FALSE, map_size;
map_size = tracks_map_size(context->tracks_map);
@@ -1529,7 +1531,7 @@ int BKE_tracking_next(MovieTrackingContext *context)
marker_new.framenr = nextfra;
marker_new.flag |= MARKER_DISABLED;
- #pragma omp critical
+ //#pragma omp critical
{
BKE_tracking_insert_marker(track, &marker_new);
}