87 if (track->frames_limit) {
88 if (frames_limit == 0) {
89 frames_limit = track->frames_limit;
92 frames_limit =
min_ii(frames_limit,
int(track->frames_limit));
98 *r_frames_limit = frames_limit;
134 tmj->
efra = scene->r.sfra;
137 tmj->
efra = scene->r.efra;
153 tmj->
efra = std::max(tmj->
efra, tmj->
sfra - frames_limit);
156 tmj->
efra = std::min(tmj->
efra, tmj->
sfra + frames_limit);
161 tmj->
delay = 1.0f / scene->r.frs_sec * 1000.0f;
176 clip->tracking_context = tmj->
context;
206 int framenr = tmj->
sfra;
210 while (framenr != tmj->
efra) {
211 if (tmj->
delay > 0) {
226 if (tmj->
delay >
float(exec_time)) {
301 if (clip->tracking_context) {
309 tmj = MEM_cnew<TrackMarkersJob>(
"TrackMarkersJob data");
316 if (use_job && sequence) {
329 if (tmj->
delay > 0) {
375 switch (event->
type) {
390 if (backwards && sequence) {
391 return TIP_(
"Track the selected markers backward for the entire clip");
393 if (backwards && !sequence) {
394 return TIP_(
"Track the selected markers backward by one frame");
396 if (!backwards && sequence) {
397 return TIP_(
"Track the selected markers forward for the entire clip");
399 if (!backwards && !sequence) {
400 return TIP_(
"Track the selected markers forward by one frame");
410 ot->
name =
"Track Markers";
412 ot->
idname =
"CLIP_OT_track_markers";
430 "Track marker during image sequence rather than "
460 ot->
name =
"Refine Markers";
462 "Refine selected markers positions "
463 "by running the tracker from track's reference "
465 ot->
idname =
"CLIP_OT_refine_markers";
bScreen * CTX_wm_screen(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
float BKE_movieclip_remap_scene_to_clip_frame(const struct MovieClip *clip, float framenr)
float BKE_movieclip_remap_clip_to_scene_frame(const struct MovieClip *clip, float framenr)
struct AutoTrackContext * BKE_autotrack_context_new(struct MovieClip *clip, struct MovieClipUser *user, bool is_backwards)
void BKE_autotrack_context_finish(struct AutoTrackContext *context)
struct MovieTrackingMarker * BKE_tracking_marker_ensure(struct MovieTrackingTrack *track, int framenr)
bool BKE_autotrack_context_step(struct AutoTrackContext *context)
#define TRACK_SELECTED(track)
void BKE_autotrack_context_free(struct AutoTrackContext *context)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
void BKE_tracking_refine_marker(struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker, bool backwards)
#define TRACK_VIEW_SELECTED(sc, track)
void BKE_autotrack_context_start(struct AutoTrackContext *context)
void BKE_autotrack_context_sync(struct AutoTrackContext *context)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int min_ii(int a, int b)
Platform independent time functions.
void BLI_time_sleep_ms(int ms)
double BLI_time_now_seconds(void)
void DEG_id_tag_update(ID *id, unsigned int flags)
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
int ED_space_clip_get_clip_frame_number(const SpaceClip *sc)
bool ED_space_clip_tracking_poll(bContext *C)
Read Guarded memory(de)allocation.
@ WM_JOB_TYPE_CLIP_TRACK_MARKERS
draw_view in_light_buf[] float
void MEM_freeN(void *vmemh)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
struct MovieClipUser user
AutoTrackContext * context
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void clip_tracking_clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip)
static void track_markers_endjob(void *tmv)
static bool track_markers_check_direction(int backwards, int curfra, int efra)
static int track_markers_invoke(bContext *C, wmOperator *op, const wmEvent *)
void CLIP_OT_track_markers(wmOperatorType *ot)
static int refine_marker_exec(bContext *C, wmOperator *op)
static int track_markers_modal(bContext *C, wmOperator *, const wmEvent *event)
static void track_markers_startjob(void *tmv, wmJobWorkerStatus *worker_status)
static std::string track_markers_get_description(bContext *, wmOperatorType *, PointerRNA *ptr)
static void track_markers_updatejob(void *tmv)
static int track_markers(bContext *C, wmOperator *op, bool use_job)
static int track_markers_exec(bContext *C, wmOperator *op)
static bool track_markers_initjob(bContext *C, TrackMarkersJob *tmj, bool backwards, bool sequence)
static bool track_markers_testbreak()
void CLIP_OT_refine_markers(wmOperatorType *ot)
static void track_markers_freejob(void *tmv)
static int track_count_markers(SpaceClip *sc, MovieClip *clip, const int framenr)
static void track_init_markers(SpaceClip *sc, MovieClip *clip, const int framenr, int *r_frames_limit)
void WM_cursor_wait(bool val)
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_set_locked_interface(wmWindowManager *wm, bool lock)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))