Fix T73228: UI shows settings of wrong marker when movie clip is offset
This commit is contained in:
parent
5929dd7129
commit
63ee3db961
Notes:
blender-bot
2023-02-14 02:58:19 +01:00
Referenced by commit f921ae4665
, Fix T79453: Motion Tracking: marker does not remember 'enabled' state
Referenced by issue #85061, Blender freezes, but does not crash
Referenced by issue #83420, Closing Preferences Panel crashes Blender
Referenced by issue #83272, Evee does not show textures in view port or render properly
Referenced by issue #81908, Blender 2.90.1 lags and crashes unpredictably
Referenced by issue #79453, Motion Tracking: marker does not remember 'enabled' state
Referenced by issue #73228, Motion tracker viewfinder broken when start frame not 1
|
@ -58,6 +58,7 @@
|
|||
#include "BKE_unit.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_curveprofile.h"
|
||||
#include "BKE_movieclip.h"
|
||||
|
||||
#include "IMB_colormanagement.h"
|
||||
|
||||
|
@ -7339,8 +7340,10 @@ static bool ui_numedit_but_TRACKPREVIEW(
|
|||
}
|
||||
|
||||
if (!scopes->track_locked) {
|
||||
if (scopes->marker->framenr != scopes->framenr) {
|
||||
scopes->marker = BKE_tracking_marker_ensure(scopes->track, scopes->framenr);
|
||||
const MovieClip *clip = CTX_data_edit_movieclip(C);
|
||||
int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scopes->framenr);
|
||||
if (scopes->marker->framenr != clip_framenr) {
|
||||
scopes->marker = BKE_tracking_marker_ensure(scopes->track, clip_framenr);
|
||||
}
|
||||
|
||||
scopes->marker->flag &= ~(MARKER_DISABLED | MARKER_TRACKED);
|
||||
|
|
|
@ -259,8 +259,6 @@ 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 */
|
||||
|
@ -283,14 +281,12 @@ static void to_pixel_space(float r[2], float a[2], int width, int height)
|
|||
static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
|
||||
{
|
||||
MarkerUpdateCb *cb = (MarkerUpdateCb *)arg_cb;
|
||||
MovieTrackingMarker *marker;
|
||||
|
||||
if (!cb->compact) {
|
||||
return;
|
||||
}
|
||||
|
||||
marker = BKE_tracking_marker_ensure(cb->track, cb->framenr);
|
||||
|
||||
MovieTrackingMarker *marker = cb->marker;
|
||||
marker->flag = cb->marker_flag;
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, NULL);
|
||||
|
@ -299,14 +295,12 @@ static void marker_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
|
|||
static void marker_block_handler(bContext *C, void *arg_cb, int event)
|
||||
{
|
||||
MarkerUpdateCb *cb = (MarkerUpdateCb *)arg_cb;
|
||||
MovieTrackingMarker *marker;
|
||||
int width, height;
|
||||
bool ok = false;
|
||||
|
||||
BKE_movieclip_get_size(cb->clip, cb->user, &width, &height);
|
||||
|
||||
marker = BKE_tracking_marker_ensure(cb->track, cb->framenr);
|
||||
|
||||
MovieTrackingMarker *marker = cb->marker;
|
||||
if (event == B_MARKER_POS) {
|
||||
marker->pos[0] = cb->marker_pos[0] / width;
|
||||
marker->pos[1] = cb->marker_pos[1] / height;
|
||||
|
@ -452,7 +446,8 @@ void uiTemplateMarker(uiLayout *layout,
|
|||
user = userptr->data;
|
||||
track = trackptr->data;
|
||||
|
||||
marker = BKE_tracking_marker_get(track, user->framenr);
|
||||
int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, user->framenr);
|
||||
marker = BKE_tracking_marker_get(track, clip_framenr);
|
||||
|
||||
cb = MEM_callocN(sizeof(MarkerUpdateCb), "uiTemplateMarker update_cb");
|
||||
cb->compact = compact;
|
||||
|
@ -461,7 +456,6 @@ void uiTemplateMarker(uiLayout *layout,
|
|||
cb->track = track;
|
||||
cb->marker = marker;
|
||||
cb->marker_flag = marker->flag;
|
||||
cb->framenr = user->framenr;
|
||||
|
||||
if (compact) {
|
||||
block = uiLayoutGetBlock(layout);
|
||||
|
|
Loading…
Reference in New Issue