Fix T79453: Motion Tracking: marker does not remember 'enabled' state

Caused by rB63ee3db96107.

While above commit corrected the clip offset, it also removed logic to
ensure a marker on a particular frame. This is needed though, otherwise
changes on a particular frame are applied to the marker being returned
by 'BKE_tracking_marker_get' which can be a completely different marker
if none exist for that frame yet.

This patch partly reverts rB63ee3db96107 and reintroduces the framenr
for the MarkerUpdateCb and uses that to ensure a marker on that frame.

Candidate for backporting to 2.83 LTS?

Reviewers: sergey, jacqueslucke

Subscribers:
This commit is contained in:
Philipp Oeser 2020-08-03 15:57:07 +02:00
parent a9e0aeaf65
commit f921ae4665
Notes: blender-bot 2023-02-14 10:29:30 +01:00
Referenced by issue #79453, Motion Tracking: marker does not remember 'enabled' state
1 changed files with 8 additions and 2 deletions

View File

@ -259,6 +259,8 @@ typedef struct {
MovieTrackingTrack *track;
MovieTrackingMarker *marker;
/** current frame number */
int framenr;
/** position of marker in pixel coords */
float marker_pos[2];
/** position and dimensions of marker pattern in pixel coords */
@ -286,7 +288,8 @@ static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
return;
}
MovieTrackingMarker *marker = cb->marker;
int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(cb->clip, cb->framenr);
MovieTrackingMarker *marker = BKE_tracking_marker_ensure(cb->track, clip_framenr);
marker->flag = cb->marker_flag;
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL);
@ -300,7 +303,9 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
BKE_movieclip_get_size(cb->clip, cb->user, &width, &height);
MovieTrackingMarker *marker = cb->marker;
int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(cb->clip, cb->framenr);
MovieTrackingMarker *marker = BKE_tracking_marker_ensure(cb->track, clip_framenr);
if (event == B_MARKER_POS) {
marker->pos[0] = cb->marker_pos[0] / width;
marker->pos[1] = cb->marker_pos[1] / height;
@ -456,6 +461,7 @@ void uiTemplateMarker(uiLayout *layout,
cb->track = track;
cb->marker = marker;
cb->marker_flag = marker->flag;
cb->framenr = user->framenr;
if (compact) {
block = uiLayoutGetBlock(layout);