156 r_size[0] = size_i[0];
157 r_size[1] = size_i[1];
183 *r_aspx = *r_aspy = 1.0f;
186 if (*r_aspx < *r_aspy) {
187 *r_aspy = *r_aspy / *r_aspx;
191 *r_aspx = *r_aspx / *r_aspy;
220 if (*r_aspx < *r_aspy) {
221 *r_aspy = *r_aspy / *r_aspx;
225 *r_aspx = *r_aspx / *r_aspy;
317 if (fx >= 0.0f && fy >= 0.0f && fx < 1.0f && fy < 1.0f) {
320 int x = int(fx * ibuf->
x),
y = int(fy * ibuf->
y);
365 float offset_x, offset_y;
384 bool has_selection =
false;
421 track->pat_flag |=
SELECT;
422 track->search_flag |=
SELECT;
431 track->pat_flag ^=
SELECT;
432 track->search_flag ^=
SELECT;
438 has_selection =
true;
449 plane_track->flag |=
SELECT;
455 plane_track->flag ^=
SELECT;
458 if (plane_track->flag &
SELECT) {
459 has_selection =
true;
463 if (r_has_selection) {
464 *r_has_selection = has_selection;
480 r_co[1] *= height * aspy;
485 r_co[1] /= height * aspy;
492 int sx, sy, width, height;
493 float zoomx, zoomy,
pos[3], imat[4][4];
500 pos[0] = (
x - sx) / zoomx;
501 pos[1] = (
y - sy) / zoomy;
507 *xr =
pos[0] / width;
508 *yr =
pos[1] / height;
512 if (clip !=
nullptr) {
515 float tmp[2] = {*xr * width, *yr * height * aspy};
519 *xr = tmp[0] / width;
520 *yr = tmp[1] / (height * aspy);
545 r_co[0] = (
pos[0] * width * zoomx) +
float(sx);
546 r_co[1] = (
pos[1] * height * zoomy) +
float(sy);
589 bool old_clip_visible =
false;
608 if (cur_sc->
clip == old_clip) {
609 old_clip_visible =
true;
613 if (
ELEM(cur_sc->
clip, old_clip,
nullptr)) {
624 if (old_clip && old_clip != clip && !old_clip_visible) {
700 MovieClip *clip,
int current_frame,
short render_size,
short render_flag,
size_t *r_size)
722 if (mem ==
nullptr) {
755 for (current_frame = from_frame; current_frame <= end_frame; current_frame++) {
764 for (current_frame = from_frame; current_frame >= end_frame; current_frame--) {
773 return current_frame;
780 int *r_current_frame)
782 uchar *mem =
nullptr;
814 int frames_processed;
819 *r_current_frame = current_frame;
852 char *colorspace_name =
nullptr;
866 if (ibuf ==
nullptr) {
912 for (
int i = 0;
i < tot_thread;
i++) {
973 int frames_processed = 0;
976 for (frame = current_frame; frame <= end_frame; frame++) {
984 *
progress = float(frames_processed) / (end_frame - start_frame);
988 for (frame = current_frame; frame >= start_frame; frame--) {
996 *
progress = float(frames_processed) / (end_frame - start_frame);
1012 &worker_status->stop,
1013 &worker_status->do_update,
1014 &worker_status->progress);
1025 &worker_status->stop,
1026 &worker_status->do_update,
1027 &worker_status->progress);
1030 BLI_assert_msg(0,
"Unknown movie clip source when prefetching frames");
1039 if (clip_local !=
nullptr) {
1053 return scene->
r.
sfra;
1064 end_frame = scene->
r.
efra;
1078 int first_uncached_frame, end_frame;
1081 if (clip ==
nullptr) {
1093 if (first_uncached_frame > end_frame || first_uncached_frame == clip_len) {
1099 if (first_uncached_frame < start_frame) {
1158 state->lock_offset_x = 0.0f;
1159 state->lock_offset_y = 0.0f;
1184 float offset_x, offset_y;
bScreen * CTX_wm_screen(const bContext *C)
MovieClip * CTX_data_edit_movieclip(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
void BKE_libblock_free_datablock(ID *id, int flag) ATTR_NONNULL()
void BKE_libblock_free_data(ID *id, bool do_id_user) ATTR_NONNULL()
void id_us_ensure_real(ID *id)
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **new_id_p, int flag)
struct ImBuf * BKE_movieclip_get_stable_ibuf(struct MovieClip *clip, const struct MovieClipUser *user, int postprocess_flag, float r_loc[2], float *r_scale, float *r_angle)
struct ImBuf * BKE_movieclip_get_postprocessed_ibuf(struct MovieClip *clip, const struct MovieClipUser *user, int postprocess_flag)
void BKE_movieclip_get_aspect(struct MovieClip *clip, float *aspx, float *aspy)
float BKE_movieclip_remap_scene_to_clip_frame(const struct MovieClip *clip, float framenr)
struct ImBuf * BKE_movieclip_anim_ibuf_for_frame_no_lock(struct MovieClip *clip, const struct MovieClipUser *user)
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
bool BKE_movieclip_has_cached_frame(struct MovieClip *clip, const struct MovieClipUser *user)
int BKE_movieclip_get_duration(struct MovieClip *clip)
void BKE_movieclip_clear_cache(struct MovieClip *clip)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
bool BKE_movieclip_put_frame_if_possible(struct MovieClip *clip, const struct MovieClipUser *user, struct ImBuf *ibuf)
void BKE_movieclip_filepath_for_frame(struct MovieClip *clip, const struct MovieClipUser *user, char *filepath)
void BKE_movieclip_convert_multilayer_ibuf(struct ImBuf *ibuf)
#define PLANE_TRACK_VIEW_SELECTED(plane_track)
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_distort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
#define TRACK_VIEW_SELECTED(sc, track)
void BKE_tracking_undistort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
#define BLI_assert_msg(a, msg)
File and directory operations.
size_t BLI_file_descriptor_size(int file) ATTR_WARN_UNUSED_RESULT
int BLI_open(const char *filepath, int oflag, int pmode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int64_t BLI_read(int fd, void *buf, size_t nbytes)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int min_ii(int a, int b)
void rgb_uchar_to_float(float r_col[3], const unsigned char col_ub[3])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
int BLI_task_scheduler_num_threads(void)
void * BLI_task_pool_user_data(TaskPool *pool)
void BLI_task_pool_work_and_wait(TaskPool *pool)
TaskPool * BLI_task_pool_create(void *userdata, eTaskPriority priority)
void BLI_task_pool_free(TaskPool *pool)
void BLI_task_pool_push(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
#define IN_RANGE_INCL(a, b, c)
#define DNA_struct_default_get(struct_name)
@ MCLIP_PROXY_RENDER_SIZE_FULL
@ MCLIP_PROXY_RENDER_UNDISTORT
#define IMG_SIZE_FALLBACK
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
void IMB_colormanagement_colorspace_to_scene_linear_v3(float pixel[3], const ColorSpace *colorspace)
ImBuf * IMB_load_image_from_memory(const unsigned char *mem, const size_t size, const int flags, const char *descr, const char *filepath=nullptr, char r_colorspace[IM_MAX_SPACE]=nullptr)
void IMB_freeImBuf(ImBuf *ibuf)
Read Guarded memory(de)allocation.
void UI_view2d_view_to_region(const View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
@ WM_JOB_TYPE_CLIP_PREFETCH
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void ED_space_clip_set_clip(bContext *C, bScreen *screen, SpaceClip *sc, MovieClip *clip)
void ED_clip_view_lock_state_restore_no_jump(const bContext *C, const ClipViewLockState *state)
void ED_clip_point_stable_pos(const SpaceClip *sc, const ARegion *region, float x, float y, float *xr, float *yr)
static bool prefetch_movie_frame(MovieClip *clip, MovieClip *clip_local, int frame, short render_size, short render_flag, bool *stop)
void ED_space_clip_set_mask(bContext *C, SpaceClip *sc, Mask *mask)
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
bool ED_space_clip_maskedit_visible_splines_poll(bContext *C)
bool ED_space_clip_check_show_trackedit(const SpaceClip *sc)
static int prefetch_get_start_frame(const bContext *C)
static bool prefetch_check_early_out(const bContext *C)
void ED_clip_mouse_pos(const SpaceClip *sc, const ARegion *region, const int mval[2], float r_co[2])
bool ED_space_clip_check_show_maskedit(const SpaceClip *sc)
void ED_clip_update_frame(const Main *mainp, int cfra)
Mask * ED_space_clip_get_mask(const SpaceClip *sc)
void ED_space_clip_get_size(const SpaceClip *sc, int *r_width, int *r_height)
static bool check_prefetch_break()
void ED_space_clip_get_zoom(const SpaceClip *sc, const ARegion *region, float *r_zoomx, float *r_zoomy)
bool ED_space_clip_maskedit_poll(bContext *C)
static uchar * prefetch_thread_next_frame(PrefetchQueue *queue, MovieClip *clip, size_t *r_size, int *r_current_frame)
bool ED_space_clip_view_clip_poll(bContext *C)
static uchar * prefetch_read_file_to_memory(MovieClip *clip, int current_frame, short render_size, short render_flag, size_t *r_size)
static void prefetch_task_func(TaskPool *__restrict pool, void *task_data)
static void prefetch_startjob(void *pjv, wmJobWorkerStatus *worker_status)
static void do_prefetch_movie(MovieClip *clip, MovieClip *clip_local, int start_frame, int current_frame, int end_frame, short render_size, short render_flag, bool *stop, bool *do_update, float *progress)
static int prefetch_get_final_frame(const bContext *C)
void ED_space_clip_get_size_fl(const SpaceClip *sc, float r_size[2])
bool ED_space_clip_get_position(const SpaceClip *sc, const ARegion *region, const int mval[2], float r_fpos[2])
bool ED_space_clip_maskedit_mask_poll(bContext *C)
void ED_space_clip_get_aspect(const SpaceClip *sc, float *r_aspx, float *r_aspy)
bool ED_clip_view_selection(const bContext *C, const ARegion *, bool fit)
int ED_space_clip_get_clip_frame_number(const SpaceClip *sc)
static void prefetch_freejob(void *pjv)
bool ED_space_clip_poll(bContext *C)
void ED_clip_view_lock_state_store(const bContext *C, ClipViewLockState *state)
void ED_clip_select_all(const SpaceClip *sc, int action, bool *r_has_selection)
void clip_start_prefetch_job(const bContext *C)
void ED_clip_point_undistorted_pos(const SpaceClip *sc, const float co[2], float r_co[2])
ImBuf * ED_space_clip_get_buffer(const SpaceClip *sc)
bool ED_space_clip_maskedit_mask_visible_splines_poll(bContext *C)
static void start_prefetch_threads(MovieClip *clip, int start_frame, int current_frame, int end_frame, short render_size, short render_flag, bool *stop, bool *do_update, float *progress)
bool ED_space_clip_color_sample(const SpaceClip *sc, const ARegion *region, const int mval[2], float r_col[3])
bool ED_space_clip_tracking_poll(bContext *C)
static int prefetch_find_uncached_frame(MovieClip *clip, int from_frame, int end_frame, short render_size, short render_flag, short direction)
void ED_clip_point_stable_pos__reverse(const SpaceClip *sc, const ARegion *region, const float co[2], float r_co[2])
the reverse of ED_clip_point_stable_pos(), gets the marker region coords. better name here?...
void ED_space_clip_get_aspect_dimension_aware(const SpaceClip *sc, float *r_aspx, float *r_aspy)
ImBuf * ED_space_clip_get_stable_buffer(const SpaceClip *sc, float loc[2], float *scale, float *angle)
BLI_INLINE bool ED_space_clip_marker_is_visible(const SpaceClip *space_clip, const MovieTrackingObject *tracking_object, const MovieTrackingTrack *track, const MovieTrackingMarker *marker)
bool clip_view_calculate_view_selection(const bContext *C, bool fit, float *r_offset_x, float *r_offset_y, float *r_zoom)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
const ColorSpace * colorspace
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct MovieTracking tracking
ColorManagedColorspaceSettings colorspace_settings
MovieTrackingCamera camera
struct MovieClipUser user
struct MovieClipScopes scopes
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
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 *))
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
bScreen * WM_window_get_active_screen(const wmWindow *win)