diff options
Diffstat (limited to 'source/blender/blenkernel/intern/tracking_auto.c')
-rw-r--r-- | source/blender/blenkernel/intern/tracking_auto.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/source/blender/blenkernel/intern/tracking_auto.c b/source/blender/blenkernel/intern/tracking_auto.c index 55b8f0bd3ab..22a380ea835 100644 --- a/source/blender/blenkernel/intern/tracking_auto.c +++ b/source/blender/blenkernel/intern/tracking_auto.c @@ -383,13 +383,17 @@ bool BKE_autotrack_context_step(AutoTrackContext *context) int frame = BKE_movieclip_remap_scene_to_clip_frame( context->clips[options->clip_index], context->user.framenr); + bool has_marker; - if (libmv_autoTrackGetMarker(context->autotrack, - options->clip_index, - frame, - options->track_index, - &libmv_current_marker)) - { + BLI_spin_lock(&context->spin_lock); + has_marker = libmv_autoTrackGetMarker(context->autotrack, + options->clip_index, + frame, + options->track_index, + &libmv_current_marker); + BLI_spin_unlock(&context->spin_lock); + + if (has_marker) { if (!tracking_check_marker_margin(&libmv_current_marker, options->track->margin, context->frame_width, @@ -427,7 +431,7 @@ bool BKE_autotrack_context_step(AutoTrackContext *context) } else { options->is_failed = true; - options->failed_frame = frame; + options->failed_frame = frame + frame_delta; } ok = true; } @@ -442,11 +446,11 @@ bool BKE_autotrack_context_step(AutoTrackContext *context) void BKE_autotrack_context_sync(AutoTrackContext *context) { - int newframe = context->user.framenr, - frame_delta = context->backwards ? -1 : 1; + int newframe, frame_delta = context->backwards ? -1 : 1; int clip, frame; BLI_spin_lock(&context->spin_lock); + newframe = context->user.framenr; for (frame = context->sync_frame; frame != (context->backwards ? newframe - 1 : newframe + 1); frame += frame_delta) @@ -459,22 +463,18 @@ void BKE_autotrack_context_sync(AutoTrackContext *context) AutoTrackOptions *options = &context->options[track]; int track_frame = BKE_movieclip_remap_scene_to_clip_frame( context->clips[options->clip_index], frame); - if (options->is_failed) { - if (options->failed_frame == track_frame) { - MovieTrackingMarker *prev_marker = - BKE_tracking_marker_get_exact( - options->track, - frame); - if (prev_marker) { - marker = *prev_marker; - marker.framenr = context->backwards ? - track_frame - 1 : - track_frame + 1; - marker.flag |= MARKER_DISABLED; - BKE_tracking_marker_insert(options->track, &marker); - } + if (options->is_failed && options->failed_frame == track_frame) { + MovieTrackingMarker *prev_marker = + BKE_tracking_marker_get_exact(options->track, frame); + if (prev_marker) { + marker = *prev_marker; + marker.framenr = context->backwards ? + track_frame - 1 : + track_frame + 1; + marker.flag |= MARKER_DISABLED; + BKE_tracking_marker_insert(options->track, &marker); + continue; } - continue; } if (libmv_autoTrackGetMarker(context->autotrack, clip, |