158 r_size[0] = size_i[0];
159 r_size[1] = size_i[1];
185 *r_aspx = *r_aspy = 1.0f;
188 if (*r_aspx < *r_aspy) {
189 *r_aspy = *r_aspy / *r_aspx;
193 *r_aspx = *r_aspx / *r_aspy;
222 if (*r_aspx < *r_aspy) {
223 *r_aspy = *r_aspy / *r_aspx;
227 *r_aspx = *r_aspx / *r_aspy;
319 if (fx >= 0.0f && fy >= 0.0f && fx < 1.0f && fy < 1.0f) {
322 int x = int(fx * ibuf->
x),
y = int(fy * ibuf->
y);
367 float offset_x, offset_y;
386 bool has_selection =
false;
423 track->pat_flag |=
SELECT;
424 track->search_flag |=
SELECT;
433 track->pat_flag ^=
SELECT;
434 track->search_flag ^=
SELECT;
440 has_selection =
true;
451 plane_track->flag |=
SELECT;
457 plane_track->flag ^=
SELECT;
460 if (plane_track->flag &
SELECT) {
461 has_selection =
true;
465 if (r_has_selection) {
466 *r_has_selection = has_selection;
482 r_co[1] *= height * aspy;
487 r_co[1] /= height * aspy;
494 int sx, sy, width, height;
495 float zoomx, zoomy,
pos[3], imat[4][4];
502 pos[0] = (
x - sx) / zoomx;
503 pos[1] = (
y - sy) / zoomy;
509 *xr =
pos[0] / width;
510 *yr =
pos[1] / height;
514 if (clip !=
nullptr) {
517 float tmp[2] = {*xr * width, *yr * height * aspy};
521 *xr = tmp[0] / width;
522 *yr = tmp[1] / (height * aspy);
547 r_co[0] = (
pos[0] * width * zoomx) +
float(sx);
548 r_co[1] = (
pos[1] * height * zoomy) +
float(sy);
591 bool old_clip_visible =
false;
610 if (cur_sc->
clip == old_clip) {
611 old_clip_visible =
true;
615 if (
ELEM(cur_sc->
clip, old_clip,
nullptr)) {
626 if (old_clip && old_clip != clip && !old_clip_visible) {
702 MovieClip *clip,
int current_frame,
short render_size,
short render_flag,
size_t *r_size)
724 if (mem ==
nullptr) {
757 for (current_frame = from_frame; current_frame <= end_frame; current_frame++) {
766 for (current_frame = from_frame; current_frame >= end_frame; current_frame--) {
775 return current_frame;
782 int *r_current_frame)
784 uchar *mem =
nullptr;
816 int frames_processed;
821 *r_current_frame = current_frame;
854 char *colorspace_name =
nullptr;
868 if (ibuf ==
nullptr) {
914 for (
int i = 0;
i < tot_thread;
i++) {
975 int frames_processed = 0;
978 for (frame = current_frame; frame <= end_frame; frame++) {
986 *progress =
float(frames_processed) / (end_frame - start_frame);
990 for (frame = current_frame; frame >= start_frame; frame--) {
998 *progress =
float(frames_processed) / (end_frame - start_frame);
1014 &worker_status->
stop,
1027 &worker_status->
stop,
1032 BLI_assert_msg(0,
"Unknown movie clip source when prefetching frames");
1041 if (clip_local !=
nullptr) {
1055 return scene->
r.
sfra;
1066 end_frame = scene->
r.
efra;
1080 int first_uncached_frame, end_frame;
1083 if (clip ==
nullptr) {
1095 if (first_uncached_frame > end_frame || first_uncached_frame == clip_len) {
1101 if (first_uncached_frame < start_frame) {
1160 state->lock_offset_x = 0.0f;
1161 state->lock_offset_y = 0.0f;
1186 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)
MINLINE 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_UNDISTORT
@ MCLIP_PROXY_RENDER_SIZE_FULL
#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 SpaceClipOverlay overlay
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)