155 r_size[0] = size_i[0];
156 r_size[1] = size_i[1];
182 *r_aspx = *r_aspy = 1.0f;
185 if (*r_aspx < *r_aspy) {
186 *r_aspy = *r_aspy / *r_aspx;
190 *r_aspx = *r_aspx / *r_aspy;
219 if (*r_aspx < *r_aspy) {
220 *r_aspy = *r_aspy / *r_aspx;
224 *r_aspx = *r_aspx / *r_aspy;
316 if (fx >= 0.0f && fy >= 0.0f && fx < 1.0f && fy < 1.0f) {
319 int x =
int(fx * ibuf->
x), y =
int(fy * ibuf->
y);
364 float offset_x, offset_y;
383 bool has_selection =
false;
420 track->pat_flag |=
SELECT;
421 track->search_flag |=
SELECT;
424 track->flag &= ~SELECT;
425 track->pat_flag &= ~SELECT;
426 track->search_flag &= ~SELECT;
430 track->pat_flag ^=
SELECT;
431 track->search_flag ^=
SELECT;
437 has_selection =
true;
448 plane_track->flag |=
SELECT;
451 plane_track->flag &= ~SELECT;
454 plane_track->flag ^=
SELECT;
457 if (plane_track->flag &
SELECT) {
458 has_selection =
true;
462 if (r_has_selection) {
463 *r_has_selection = has_selection;
473 float aspy = 1.0f / clip->tracking.camera.pixel_aspect;
479 r_co[1] *= height * aspy;
484 r_co[1] /= height * aspy;
489 const SpaceClip *sc,
const ARegion *region,
float x,
float y,
float *xr,
float *yr)
491 int sx, sy, width, height;
492 float zoomx, zoomy,
pos[3], imat[4][4];
499 pos[0] = (x - sx) / zoomx;
500 pos[1] = (y - sy) / zoomy;
506 *xr =
pos[0] / width;
507 *yr =
pos[1] / height;
511 if (clip !=
nullptr) {
514 float tmp[2] = {*xr * width, *yr * height * aspy};
518 *xr = tmp[0] / width;
519 *yr = tmp[1] / (height * aspy);
544 r_co[0] = (
pos[0] * width * zoomx) +
float(sx);
545 r_co[1] = (
pos[1] * height * zoomy) +
float(sy);
588 bool old_clip_visible =
false;
607 if (cur_sc->
clip == old_clip) {
608 old_clip_visible =
true;
612 if (
ELEM(cur_sc->
clip, old_clip,
nullptr)) {
623 if (old_clip && old_clip != clip && !old_clip_visible) {
699 MovieClip *clip,
int current_frame,
short render_size,
short render_flag,
size_t *r_size)
720 uchar *mem = MEM_cnew_array<uchar>(size,
"movieclip prefetch memory file");
721 if (mem ==
nullptr) {
726 if (
BLI_read(file, mem, size) != size) {
754 for (current_frame = from_frame; current_frame <= end_frame; current_frame++) {
763 for (current_frame = from_frame; current_frame >= end_frame; current_frame--) {
772 return current_frame;
779 int *r_current_frame)
781 uchar *mem =
nullptr;
785 IN_RANGE_INCL(queue->current_frame, queue->start_frame, queue->end_frame))
789 if (queue->forward) {
791 queue->current_frame + 1,
797 if (current_frame > queue->end_frame) {
798 queue->current_frame = queue->initial_frame;
799 queue->forward =
false;
803 if (!queue->forward) {
805 queue->current_frame - 1,
812 if (
IN_RANGE_INCL(current_frame, queue->start_frame, queue->end_frame)) {
813 int frames_processed;
816 clip, current_frame, queue->render_size, queue->render_flag, r_size);
818 *r_current_frame = current_frame;
820 queue->current_frame = current_frame;
822 if (queue->forward) {
823 frames_processed = queue->current_frame - queue->initial_frame;
826 frames_processed = (queue->end_frame - queue->initial_frame) +
827 (queue->initial_frame - queue->current_frame);
830 *queue->do_update =
true;
831 *queue->progress =
float(frames_processed) / (queue->end_frame - queue->start_frame);
852 char *colorspace_name =
nullptr;
862 colorspace_name = clip->colorspace_settings.name;
866 if (ibuf ==
nullptr) {
901 queue.current_frame = current_frame;
902 queue.initial_frame = current_frame;
903 queue.start_frame = start_frame;
904 queue.end_frame = end_frame;
905 queue.render_size = render_size;
906 queue.render_flag = render_flag;
907 queue.forward =
true;
910 queue.do_update = do_update;
911 queue.progress = progress;
914 for (
int i = 0; i < tot_thread; i++) {
977 int frames_processed = 0;
980 for (frame = current_frame; frame <= end_frame; frame++) {
988 *progress =
float(frames_processed) / (end_frame - start_frame);
992 for (frame = current_frame; frame >= start_frame; frame--) {
1000 *progress =
float(frames_processed) / (end_frame - start_frame);
1016 &worker_status->
stop,
1029 &worker_status->
stop,
1034 BLI_assert_msg(0,
"Unknown movie clip source when prefetching frames");
1043 if (clip_local !=
nullptr) {
1057 return scene->r.sfra;
1068 end_frame = scene->r.efra;
1071 end_frame =
min_ii(end_frame, scene->r.sfra + clip->len - 1);
1082 int first_uncached_frame, end_frame;
1085 if (clip ==
nullptr) {
1097 if (first_uncached_frame > end_frame || first_uncached_frame == clip_len) {
1103 if (first_uncached_frame < start_frame) {
1129 pj = MEM_cnew<PrefetchJob>(
"prefetch job");
1162 state->lock_offset_x = 0.0f;
1163 state->lock_offset_y = 0.0f;
1188 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)
pthread_spinlock_t SpinLock
void BLI_spin_init(SpinLock *spin)
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
void BLI_spin_end(SpinLock *spin)
#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
void IMB_colormanagement_colorspace_to_scene_linear_v3(float pixel[3], ColorSpace *colorspace)
Contains defines and structs used throughout the imbuf module.
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)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
struct ImBuf * IMB_ibImageFromMemory(const unsigned char *, size_t, int, char[IM_MAX_SPACE], const char *)
void IMB_freeImBuf(ImBuf *)
void MEM_freeN(void *vmemh)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
static bool use_proxy(Editing *ed, Sequence *seq)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
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)