27 #include <sys/types.h>
102 if (sc && sc->
clip) {
113 if (sc && sc->
clip) {
179 *aspx = *aspy = 1.0f;
183 *aspy = *aspy / *aspx;
187 *aspx = *aspx / *aspy;
217 *aspy = *aspy / *aspx;
221 *aspx = *aspx / *aspy;
309 if (fx >= 0.0f && fy >= 0.0f && fx < 1.0f && fy < 1.0f) {
312 int x = (int)(fx * ibuf->
x),
y = (int)(fy * ibuf->
y);
322 else if (ibuf->
rect) {
357 float offset_x, offset_y;
381 bool has_selection =
false;
386 for (track = tracksbase->
first; track; track = track->
next) {
397 for (plane_track = plane_tracks_base->
first; plane_track; plane_track = plane_track->
next) {
405 for (track = tracksbase->
first; track; track = track->
next) {
431 has_selection =
true;
435 for (plane_track = plane_tracks_base->
first; plane_track; plane_track = plane_track->
next) {
449 has_selection =
true;
454 if (r_has_selection) {
455 *r_has_selection = has_selection;
484 float zoomx, zoomy,
pos[3], imat[4][4];
491 pos[0] = (
x - sx) / zoomx;
492 pos[1] = (
y - sy) / zoomy;
509 *xr = tmp[0] /
width;
510 *yr = tmp[1] / (
height * aspy);
538 r_co[0] = (
pos[0] *
width * zoomx) + (
float)sx;
539 r_co[1] = (
pos[1] *
height * zoomy) + (
float)sy;
580 bool old_clip_visible =
false;
596 for (sl =
area->spacedata.first; sl; sl = sl->
next) {
602 if (cur_sc->
clip == old_clip) {
603 old_clip_visible =
true;
618 if (old_clip && old_clip != clip && !old_clip_visible) {
694 MovieClip *clip,
int current_frame,
short render_size,
short render_flag,
size_t *r_size)
749 for (current_frame = from_frame; current_frame <= end_frame; current_frame++) {
758 for (current_frame = from_frame; current_frame >= end_frame; current_frame--) {
767 return current_frame;
774 int *r_current_frame)
783 if (
queue->forward) {
785 queue->current_frame + 1,
791 if (current_frame >
queue->end_frame) {
793 queue->forward =
false;
797 if (!
queue->forward) {
799 queue->current_frame - 1,
807 int frames_processed;
810 clip, current_frame,
queue->render_size,
queue->render_flag, r_size);
812 *r_current_frame = current_frame;
814 queue->current_frame = current_frame;
816 if (
queue->forward) {
817 frames_processed =
queue->current_frame -
queue->initial_frame;
820 frames_processed = (
queue->end_frame -
queue->initial_frame) +
821 (
queue->initial_frame -
queue->current_frame);
824 *
queue->do_update = 1;
846 char *colorspace_name =
NULL;
895 queue.current_frame = current_frame;
896 queue.initial_frame = current_frame;
897 queue.start_frame = start_frame;
898 queue.end_frame = end_frame;
899 queue.render_size = render_size;
900 queue.render_flag = render_flag;
904 queue.do_update = do_update;
905 queue.progress = progress;
908 for (
int i = 0; i < tot_thread; i++) {
971 int frames_processed = 0;
974 for (frame = current_frame; frame <= end_frame; frame++) {
982 *progress = (
float)frames_processed / (end_frame - start_frame);
986 for (frame = current_frame; frame >= start_frame; frame--) {
994 *progress = (
float)frames_processed / (end_frame - start_frame);
1028 BLI_assert(!
"Unknown movie clip source when prefetching frames");
1037 if (clip_local !=
NULL) {
1076 int first_uncached_frame, end_frame;
1091 if (first_uncached_frame > end_frame || first_uncached_frame == clip_len) {
1097 if (first_uncached_frame < start_frame) {
1156 state->lock_offset_x = 0.0f;
1157 state->lock_offset_y = 0.0f;
1181 float offset_x, offset_y;
typedef float(TangentPoint)[2]
struct Scene * CTX_data_scene(const bContext *C)
struct SpaceClip * CTX_wm_space_clip(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct MovieClip * CTX_data_edit_movieclip(const bContext *C)
struct bScreen * CTX_wm_screen(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_libblock_free_data(struct ID *id, const bool do_id_user) ATTR_NONNULL()
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, const int flag)
void id_us_ensure_real(struct ID *id)
void BKE_libblock_free_datablock(struct ID *id, const int flag) ATTR_NONNULL()
bool BKE_movieclip_put_frame_if_possible(struct MovieClip *clip, struct MovieClipUser *user, struct ImBuf *ibuf)
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)
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
int BKE_movieclip_get_duration(struct MovieClip *clip)
void BKE_movieclip_clear_cache(struct MovieClip *clip)
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height)
void BKE_movieclip_filename_for_frame(struct MovieClip *clip, struct MovieClipUser *user, char *name)
struct ImBuf * BKE_movieclip_anim_ibuf_for_frame_no_lock(struct MovieClip *clip, struct MovieClipUser *user)
struct ImBuf * BKE_movieclip_get_stable_ibuf(struct MovieClip *clip, struct MovieClipUser *user, float loc[2], float *scale, float *angle, int postprocess_flag)
void BKE_movieclip_convert_multilayer_ibuf(struct ImBuf *ibuf)
struct ImBuf * BKE_movieclip_get_postprocessed_ibuf(struct MovieClip *clip, struct MovieClipUser *user, int postprocess_flag)
bool BKE_movieclip_has_cached_frame(struct MovieClip *clip, struct MovieClipUser *user)
struct ListBase * BKE_tracking_get_active_tracks(struct MovieTracking *tracking)
#define PLANE_TRACK_VIEW_SELECTED(plane_track)
#define MARKER_VISIBLE(sc, track, marker)
struct ListBase * BKE_tracking_get_active_plane_tracks(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)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
void BKE_tracking_undistort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
File and directory operations.
int BLI_open(const char *filename, int oflag, int pmode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
size_t BLI_file_descriptor_size(int file) ATTR_WARN_UNUSED_RESULT
#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])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
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, TaskPriority 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)
@ MCLIP_PROXY_RENDER_UNDISTORT
@ MCLIP_PROXY_RENDER_SIZE_FULL
#define IMG_SIZE_FALLBACK
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void IMB_colormanagement_colorspace_to_scene_linear_v3(float pixel[3], struct ColorSpace *colorspace)
void IMB_freeImBuf(struct ImBuf *ibuf)
struct ImBuf * IMB_ibImageFromMemory(const unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE], const char *descr)
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera CLAMP
Platform independent time functions.
void UI_view2d_view_to_region(const struct 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.
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
static bool prefetch_movie_frame(MovieClip *clip, MovieClip *clip_local, int frame, short render_size, short render_flag, short *stop)
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)
ImBuf * ED_space_clip_get_buffer(SpaceClip *sc)
void ED_space_clip_get_size(SpaceClip *sc, int *width, int *height)
struct PrefetchQueue PrefetchQueue
void ED_space_clip_set_mask(bContext *C, SpaceClip *sc, Mask *mask)
void ED_space_clip_get_aspect(SpaceClip *sc, float *aspx, float *aspy)
bool ED_space_clip_color_sample(SpaceClip *sc, ARegion *region, int mval[2], float r_col[3])
static int prefetch_get_start_frame(const bContext *C)
static bool prefetch_check_early_out(const bContext *C)
void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
static void prefetch_startjob(void *pjv, short *stop, short *do_update, float *progress)
void ED_clip_update_frame(const Main *mainp, int cfra)
int ED_space_clip_get_clip_frame_number(SpaceClip *sc)
bool ED_space_clip_maskedit_poll(bContext *C)
void ED_clip_point_stable_pos(SpaceClip *sc, ARegion *region, float x, float y, float *xr, float *yr)
bool ED_space_clip_view_clip_poll(bContext *C)
static void prefetch_task_func(TaskPool *__restrict pool, void *task_data)
static int prefetch_get_final_frame(const bContext *C)
static void start_prefetch_threads(MovieClip *clip, int start_frame, int current_frame, int end_frame, short render_size, short render_flag, short *stop, short *do_update, float *progress)
void ED_space_clip_get_zoom(SpaceClip *sc, ARegion *region, float *zoomx, float *zoomy)
static uchar * prefetch_read_file_to_memory(MovieClip *clip, int current_frame, short render_size, short render_flag, size_t *r_size)
bool ED_space_clip_maskedit_mask_poll(bContext *C)
void ED_clip_point_stable_pos__reverse(SpaceClip *sc, 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?...
static uchar * prefetch_thread_next_frame(PrefetchQueue *queue, MovieClip *clip, size_t *r_size, int *r_current_frame)
MovieClip * ED_space_clip_get_clip(SpaceClip *sc)
static void prefetch_freejob(void *pjv)
void ED_space_clip_get_aspect_dimension_aware(SpaceClip *sc, float *aspx, float *aspy)
bool ED_space_clip_poll(bContext *C)
void ED_clip_view_lock_state_store(const bContext *C, ClipViewLockState *state)
ImBuf * ED_space_clip_get_stable_buffer(SpaceClip *sc, float loc[2], float *scale, float *angle)
void ED_space_clip_get_size_fl(SpaceClip *sc, float size[2])
struct PrefetchJob PrefetchJob
void ED_clip_mouse_pos(SpaceClip *sc, ARegion *region, const int mval[2], float co[2])
void clip_start_prefetch_job(const bContext *C)
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, short *stop, short *do_update, float *progress)
void ED_clip_point_undistorted_pos(SpaceClip *sc, const float co[2], float r_co[2])
Mask * ED_space_clip_get_mask(SpaceClip *sc)
bool ED_clip_view_selection(const bContext *C, ARegion *UNUSED(region), bool fit)
bool ED_space_clip_check_show_trackedit(SpaceClip *sc)
static bool check_prefetch_break(void)
bool ED_space_clip_check_show_maskedit(SpaceClip *sc)
bool ED_space_clip_get_position(struct SpaceClip *sc, struct ARegion *ar, int mval[2], float fpos[2])
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)
bool clip_view_calculate_view_selection(const struct bContext *C, bool fit, float *r_offset_x, float *r_offset_y, float *r_zoom)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
ThreadQueue * queue
all scheduled work for the cpu
struct ColorSpace * rect_colorspace
struct MovieTracking tracking
ColorManagedColorspaceSettings colorspace_settings
struct MovieTrackingPlaneTrack * next
struct MovieTrackingTrack * next
MovieTrackingCamera camera
struct MovieClipUser user
struct MovieClipScopes scopes
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, void *owner, const char *name, int flag, int 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 *))
void WM_jobs_timer(wmJob *wm_job, double timestep, unsigned int note, unsigned int endnote)
bScreen * WM_window_get_active_screen(const wmWindow *win)