55#include "RNA_prototypes.hh"
106 if (ibuf->rect !=
nullptr) {
129 if (!make_float &&
STREQ(from_colorspace, to_colorspace)) {
147 if (from_colorspace ==
nullptr || from_colorspace[0] ==
'\0') {
177 if (to_colorspace && to_colorspace[0] !=
'\0') {
195 if (to_colorspace && to_colorspace[0] !=
'\0') {
219 r_context->
bmain = bmain;
221 r_context->
scene = scene;
222 r_context->
rectx = rectx;
223 r_context->
recty = recty;
249 if (frame_index == -1 || se ==
nullptr) {
261 const int timeline_frame,
265 const int strip_count = strips.
size();
275 return a->channel < b->channel;
282 Scene *scene = context->scene;
283 const int x = context->rectx;
284 const int y = context->recty;
285 const float2 offset{
x * 0.5f,
y * 0.5f};
324 if (
quad.is_empty()) {
339 if (!
quad.is_empty()) {
397 if (context && context->is_proxy_render) {
417 if (strip->
sat != 1.0f) {
436 if (is_proxy_image) {
453 const float image_scale_factor,
454 const float preview_scale_factor)
461 const int3 image_center_offs((out_x - in_x) / 2, (out_y - in_y) / 2, 0);
465 const float rotation =
transform->rotation;
467 transform->scale_y * image_scale_factor);
470 const float2 pivot(in_x * origin[0], in_y * origin[1]);
473 translation +
float2(image_center_offs), rotation, scale);
480 float crop_scale_factor,
484 const int left = c->
left * crop_scale_factor;
485 const int right = c->
right * crop_scale_factor;
486 const int top = c->
top * crop_scale_factor;
487 const int bottom = c->
bottom * crop_scale_factor;
499 float x1 =
float(context->rectx);
500 float y1 =
float(context->recty);
501 float x_aspect = context->scene->r.xasp / context->scene->r.yasp;
502 if (x_aspect != 1.0f) {
503 float xmid = (x0 + x1) * 0.5f;
504 x0 = xmid - (xmid - x0) * x_aspect;
505 x1 = xmid + (x1 - xmid) * x_aspect;
508 if (
quad.is_empty()) {
525 if (sx > 2.0f && sy > 2.0f) {
528 if (sx < 0.5f && sy < 0.5f) {
534 if (sx == 1.0f && sy == 1.0f &&
roundf(px) == px &&
roundf(py) == py &&
rot == 0.0f) {
545 const bool scale_crop_values,
546 const float preview_scale_factor)
551 const float crop_scale_factor = scale_crop_values ? preview_scale_factor : 1.0f;
580 out->planes =
in->planes;
592 "Sequencer only supports 4 channel images");
597 const int imul = int(256.0f * fmul);
598 for ([[maybe_unused]]
const int64_t i : range) {
602 if (multiply_alpha) {
613 for ([[maybe_unused]]
const int64_t i : range) {
617 if (multiply_alpha) {
629 float timeline_frame,
631 const bool is_proxy_image)
633 Scene *scene = context->scene;
641 if (strip->
sat != 1.0f) {
670 const float image_scale_factor = do_scale_to_render_size ? preview_scale_factor : 1.0f;
682 preview_scale_factor);
689 context->recty != ibuf->
y || modifier_translation !=
float2(0, 0))
691 const int x = context->rectx;
692 const int y = context->recty;
704 preview_scale_factor);
712 !do_scale_to_render_size,
713 preview_scale_factor);
718 ibuf = transformed_ibuf;
738 float timeline_frame,
740 const bool is_proxy_image)
742 if (context->is_proxy_render ==
false &&
743 (ibuf->
x != context->rectx || ibuf->
y != context->recty))
745 use_preprocess =
true;
749 const bool is_effect_with_inputs = strip->is_effect() &&
752 if (!is_proxy_image && !is_effect_with_inputs) {
759 if (use_preprocess) {
769 float timeline_frame)
771 Scene *scene = context->scene;
775 const FCurve *fcu =
nullptr;
780 ibuf[0] = ibuf[1] =
nullptr;
808 out = sh.
execute(context,
state, strip, timeline_frame, fac,
nullptr,
nullptr);
811 for (
i = 0;
i < 2;
i++) {
815 scene, strip, timeline_frame,
i);
820 target_frame = std::floor(target_frame);
833 out = sh.
execute(context,
state, strip, timeline_frame, fac, ibuf[0], ibuf[1]);
848 for (
i = 0;
i < 2;
i++) {
852 if (
out ==
nullptr) {
899 ImBuf *ibuf =
nullptr;
906 if (prefix[0] ==
'\0') {
917 if (ibuf ==
nullptr) {
936 const char *filepath,
942 if (r_prefix[0] ==
'\0') {
955 if (context->ignore_missing_media) {
958 if (context->scene ==
nullptr || context->scene->ed ==
nullptr ||
965 float col[4] = {0.85f, 0.0f, 0.75f, 1.0f};
974 bool *r_is_proxy_image)
977 const char *ext =
nullptr;
979 ImBuf *ibuf =
nullptr;
982 if (s_elem ==
nullptr) {
991 if (ibuf !=
nullptr) {
992 *r_is_proxy_image =
true;
999 context->scene, strip, totfiles, filepath, prefix, ext);
1001 if (is_multiview_render) {
1005 for (
int view_id = 0; view_id < totfiles; view_id++) {
1007 context, strip, filepath, prefix, ext, view_id);
1010 if (ibufs_arr[0] ==
nullptr) {
1018 for (
int view_id = 0; view_id < totviews; view_id++) {
1020 localcontext.
view_id = view_id;
1022 if (view_id != context->view_id) {
1024 &localcontext,
state, strip, ibufs_arr[view_id], timeline_frame,
true,
false);
1029 ibuf = ibufs_arr[context->view_id];
1032 for (
int view_id = 0; view_id < totviews; view_id++) {
1033 if (ibufs_arr[view_id] != ibuf) {
1045 if (ibuf ==
nullptr) {
1062 if (proxy->
anim ==
nullptr) {
1069 if (proxy->
anim ==
nullptr) {
1082 if (!use_timecodes) {
1094 float timeline_frame,
1096 bool *r_is_proxy_image)
1098 ImBuf *ibuf =
nullptr;
1117 if (ibuf !=
nullptr) {
1118 *r_is_proxy_image =
true;
1123 if (ibuf ==
nullptr) {
1129 if (ibuf ==
nullptr) {
1146 float timeline_frame,
1147 bool *r_is_proxy_image)
1152 ImBuf *ibuf =
nullptr;
1159 if (is_multiview_render) {
1166 sanim = sanim->
next, ibuf_view_id++)
1170 context, strip, timeline_frame, sanim, r_is_proxy_image);
1175 if (ibuf_arr[0] ==
nullptr) {
1184 for (
int view_id = 0; view_id < totviews; view_id++) {
1186 localcontext.
view_id = view_id;
1188 if (view_id != context->view_id && ibuf_arr[view_id]) {
1190 &localcontext,
state, strip, ibuf_arr[view_id], timeline_frame,
true,
false);
1195 ibuf = ibuf_arr[context->view_id];
1198 for (
int view_id = 0; view_id < totviews; view_id++) {
1199 if (ibuf_arr[view_id] != ibuf) {
1211 if (ibuf ==
nullptr) {
1216 if (*r_is_proxy_image ==
false) {
1217 if (sanim && sanim->
anim) {
1229 ImBuf *ibuf =
nullptr;
1230 float tloc[2], tscale, tangle;
1244 bool *r_is_proxy_image)
1246 ImBuf *ibuf =
nullptr;
1285 *r_is_proxy_image =
true;
1289 if (ibuf ==
nullptr) {
1305 ImBuf *ibuf =
nullptr;
1342 const float *fp_src;
1351 fp_dst[0] = fp_dst[1] = fp_dst[2] = *fp_src;
1360 const float *fp_src;
1369 ub_dst[0] = ub_dst[1] = ub_dst[2] =
uchar(*fp_src * 255.0f);
1387 context->depsgraph, context->rectx, context->recty, strip->
mask, frame_index, make_float);
1413 float timeline_frame)
1415 ImBuf *ibuf =
nullptr;
1453 if (scene == context->scene) {
1457 const bool is_rendering =
G.is_rendering;
1458 const bool is_preview = !context->render && (context->scene->r.seq_prev_type) !=
OB_RENDER;
1460 double frame = double(scene->
r.sfra) + double(frame_index) + double(strip->
anim_startofs);
1480 if (have_comp ==
false && camera ==
nullptr) {
1490 if (
view3d_fn && is_preview && camera) {
1491 char err_out[256] =
"unknown";
1504 if (context->scene->r.seq_prev_type == 0) {
1505 context->scene->r.seq_prev_type = 3 ;
1516 &context->scene->display.shading,
1517 eDrawType(context->scene->r.seq_prev_type),
1525 context->gpu_offscreen,
1526 context->gpu_viewport,
1528 if (ibuf ==
nullptr) {
1529 fprintf(stderr,
"seq_render_scene_strip failed to get opengl buffer: %s\n", err_out);
1547 if (is_preview && (is_rendering && !
G.background)) {
1553 if (re ==
nullptr) {
1557 const float subframe = frame -
floorf(frame);
1564 have_comp ?
nullptr : view_layer,
1573 G.is_rendering = is_rendering;
1575 for (
int view_id = 0; view_id < totviews; view_id++) {
1579 localcontext.
view_id = view_id;
1587 memcpy(ibufs_arr[view_id]->float_buffer.data,
1596 memcpy(ibufs_arr[view_id]->byte_buffer.data,
1604 if (view_id != context->view_id) {
1615 ibuf = ibufs_arr[context->view_id];
1618 for (
int view_id = 0; view_id < totviews; view_id++) {
1619 if (ibufs_arr[view_id] != ibuf) {
1632 float timeline_frame)
1634 if (strip->
scene ==
nullptr) {
1648 orig_data.scemode = scene->
r.scemode;
1649 orig_data.timeline_frame = scene->
r.cfra;
1650 orig_data.subframe = scene->
r.subframe;
1651 orig_data.mode = scene->
r.mode;
1653 const bool is_frame_update = (orig_data.timeline_frame != scene->
r.cfra) ||
1654 (orig_data.subframe != scene->
r.subframe);
1659 scene->
r.scemode = orig_data.scemode;
1660 scene->
r.cfra = orig_data.timeline_frame;
1661 scene->
r.subframe = orig_data.subframe;
1665 if (is_frame_update && (
depsgraph !=
nullptr)) {
1680 ImBuf *ibuf =
nullptr;
1689 frame_index += offset;
1696 context->scene, frame_index, context->view_id, context->rectx, context->recty);
1718 float timeline_frame,
1719 bool *r_is_proxy_image)
1721 ImBuf *ibuf =
nullptr;
1722 float frame_index =
give_frame_index(context->scene, strip, timeline_frame);
1730 scene_parent.
next =
state->scene_parents;
1731 scene_parent.
link = context->scene;
1732 state->scene_parents = &scene_parent;
1736 if (strip->
scene && (context->scene != strip->
scene)) {
1752 state->scene_parents =
state->scene_parents->next;
1755 else if (strip->is_effect()) {
1794 float timeline_frame)
1796 bool use_preprocess =
false;
1797 bool is_proxy_image =
false;
1800 if (ibuf !=
nullptr) {
1809 if (ibuf ==
nullptr) {
1816 context,
state, strip, ibuf, timeline_frame, use_preprocess, is_proxy_image);
1820 if (ibuf ==
nullptr) {
1859 float timeline_frame,
1870 out = sh.
execute(context,
state, strip, timeline_frame, fac, ibuf2, ibuf1);
1873 out = sh.
execute(context,
state, strip, timeline_frame, fac, ibuf1, ibuf2);
1906 float timeline_frame,
1910 context->scene, channels, seqbasep, timeline_frame, chanshown);
1919 for (
i = strips.
size() - 1;
i >= 0;
i--) {
1920 Strip *strip = strips[
i];
1956 if (ibuf_raw !=
nullptr) {
1964 switch (early_out) {
1987 context,
state, strip, timeline_frame, ibuf1, ibuf2);
2004 for (;
i < strips.
size();
i++) {
2005 Strip *strip = strips[
i];
2016 context,
state, strip, timeline_frame, ibuf1, ibuf2);
2030 Scene *scene = context->scene;
2035 if (
ed ==
nullptr) {
2048 seqbasep =
ed->current_strips();
2049 channels =
ed->current_channels();
2053 scene, timeline_frame, context->view_id, context->rectx, context->recty);
2057 if (!context->skip_cache && !context->is_proxy_render) {
2062 scene, channels, seqbasep, timeline_frame, chanshown);
2078 !context->is_proxy_render)
2091 float timeline_frame,
2105 context->scene, timeline_frame, context->view_id, context->rectx, context->recty);
AnimData * BKE_animdata_from_id(const ID *id)
void BKE_animsys_evaluate_all_animation(struct Main *main, struct Depsgraph *depsgraph, float ctime)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time) ATTR_WARN_UNUSED_RESULT
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, const struct AnimationEvalContext *anim_eval_context, eAnimData_Recalc recalc, bool flush_to_original)
float evaluate_fcurve(const FCurve *fcu, float evaltime)
FCurve * id_data_find_fcurve(ID *id, void *data, StructRNA *type, const char *prop_name, int index, bool *r_driven)
MovieReader * openanim(const char *filepath, int ibuf_flags, int streamindex, bool keep_original_colorspace, char colorspace[IMA_MAX_SPACE])
ViewLayer * BKE_view_layer_default_render(const Scene *scene)
void BKE_id_free(Main *bmain, void *idv)
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **new_id_p, int flag)
@ LIB_ID_COPY_NO_ANIMDATA
void BKE_maskrasterize_handle_free(MaskRasterHandle *mr_handle)
MaskRasterHandle * BKE_maskrasterize_handle_new(void)
void BKE_mask_evaluate(struct Mask *mask, float ctime, bool do_newframe)
void BKE_maskrasterize_handle_init(MaskRasterHandle *mr_handle, struct Mask *mask, int width, int height, bool do_aspect_correct, bool do_mask_aa, bool do_feather)
void BKE_maskrasterize_buffer(MaskRasterHandle *mr_handle, unsigned int width, unsigned int height, float *buffer)
Rasterize a buffer from a single mask (threaded execution).
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)
bool BKE_movieclip_proxy_enabled(struct MovieClip *clip)
#define MOVIECLIP_CACHE_SKIP
void BKE_movieclip_user_set_frame(struct MovieClipUser *user, int framenr)
void BKE_movieclip_convert_multilayer_ibuf(struct ImBuf *ibuf)
struct ImBuf * BKE_movieclip_get_ibuf_flag(struct MovieClip *clip, const struct MovieClipUser *user, int flag, int cache_flag)
void BKE_render_resolution(const RenderData *r, const bool use_crop, int *r_width, int *r_height)
int BKE_scene_multiview_num_views_get(const RenderData *rd)
void BKE_scene_frame_set(Scene *scene, float frame)
void BKE_scene_multiview_view_prefix_get(Scene *scene, const char *filepath, char *r_prefix, const char **r_ext)
bool BKE_scene_camera_switch_update(Scene *scene)
void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph)
Depsgraph * BKE_scene_get_depsgraph(const Scene *scene, const ViewLayer *view_layer)
const char * BKE_scene_multiview_render_view_name_get(const RenderData *rd, int view_id)
#define BLI_assert_msg(a, msg)
int BLI_linklist_index(const LinkNode *list, const void *ptr) ATTR_WARN_UNUSED_RESULT
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
BLI_INLINE bool BLI_listbase_count_is_equal_to(const ListBase *listbase, const int count_cmp)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
int isect_point_quad_v2(const float p[2], const float v1[2], const float v2[2], const float v3[2], const float v4[2])
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
#define BLI_path_join(...)
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax)
Depsgraph * DEG_graph_new(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
void DEG_graph_replace_owners(Depsgraph *depsgraph, Main *bmain, Scene *scene, ViewLayer *view_layer)
void DEG_graph_tag_relations_update(Depsgraph *graph)
void DEG_debug_name_set(Depsgraph *depsgraph, const char *name)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
ViewLayer * DEG_get_input_view_layer(const Depsgraph *graph)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
#define ID_BLEND_PATH_FROM_GLOBAL(_id)
#define DNA_struct_default_get(struct_name)
@ MCLIP_PROXY_RENDER_USE_FALLBACK_RENDER
@ MCLIP_PROXY_RENDER_UNDISTORT
@ MCLIP_PROXY_RENDER_SIZE_75
@ MCLIP_PROXY_RENDER_SIZE_100
@ MCLIP_PROXY_RENDER_SIZE_50
@ MCLIP_PROXY_RENDER_SIZE_FULL
@ MCLIP_PROXY_RENDER_SIZE_25
@ R_SEQ_OVERRIDE_SCENE_SETTINGS
@ SEQ_EDIT_PROXY_DIR_STORAGE
@ SEQ_STORAGE_PROXY_CUSTOM_FILE
@ eSeqModifierType_Compositor
@ SEQ_CACHE_STORE_FINAL_OUT
@ SEQ_TRANSFORM_FILTER_CUBIC_BSPLINE
@ SEQ_TRANSFORM_FILTER_AUTO
@ SEQ_TRANSFORM_FILTER_CUBIC_MITCHELL
@ SEQ_TRANSFORM_FILTER_BILINEAR
@ SEQ_TRANSFORM_FILTER_BOX
@ SEQ_TRANSFORM_FILTER_NEAREST
@ SEQ_MOVIECLIP_RENDER_UNDISTORTED
@ SEQ_MOVIECLIP_RENDER_STABILIZED
@ SEQ_SPEED_USE_INTERPOLATION
@ SEQ_USE_EFFECT_DEFAULT_FADE
@ SEQ_SCENE_NO_ANNOTATION
@ STRIP_MODIFIER_FLAG_MUTE
@ SEQ_EDIT_SHOW_MISSING_MEDIA
eSpaceSeq_Proxy_RenderSize
@ V3D_OFSDRAW_OVERRIDE_SCENE_SETTINGS
@ V3D_OFSDRAW_SHOW_ANNOTATION
void IMB_colormanagement_transform_byte_to_float(float *float_buffer, unsigned char *byte_buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace)
void IMB_colormanagement_assign_byte_colorspace(ImBuf *ibuf, const char *name)
const char * IMB_colormanagement_get_rect_colorspace(const ImBuf *ibuf)
void IMB_colormanagement_assign_float_colorspace(ImBuf *ibuf, const char *name)
void IMB_colormanagement_transform_float(float *buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace, bool predivide)
@ COLOR_ROLE_SCENE_LINEAR
const char * IMB_colormanagement_role_colorspace_name_get(int role)
const char * IMB_colormanagement_get_float_colorspace(const ImBuf *ibuf)
void IMB_colormanagement_transform_v4(float pixel[4], const char *from_colorspace, const char *to_colorspace)
void IMB_flipy(ImBuf *ibuf)
ImBuf * IMB_load_image_from_filepath(const char *filepath, const int flags, char r_colorspace[IM_MAX_SPACE]=nullptr)
void IMB_flipx(ImBuf *ibuf)
ImBuf * IMB_dupImBuf(const ImBuf *ibuf1)
void IMB_transform(const ImBuf *src, ImBuf *dst, eIMBTransformMode mode, eIMBInterpolationFilterMode filter, const blender::float3x3 &transform_matrix, const rctf *src_crop)
Transform source image buffer onto destination image buffer using a transform matrix.
ImBuf * IMB_makeSingleUser(ImBuf *ibuf)
void IMB_assign_float_buffer(ImBuf *ibuf, float *buffer_data, ImBufOwnership ownership)
void IMB_ImBufFromStereo3d(const Stereo3dFormat *s3d, ImBuf *ibuf_stereo3d, ImBuf **r_ibuf_left, ImBuf **r_ibuf_right)
@ IMB_TRANSFORM_MODE_CROP_SRC
Crop the source buffer.
void IMB_buffer_float_from_float_threaded(float *rect_to, const float *rect_from, int channels_from, int profile_to, int profile_from, bool predivide, int width, int height, int stride_to, int stride_from)
void IMB_freeImBuf(ImBuf *ibuf)
void IMB_saturation(ImBuf *ibuf, float sat)
size_t IMB_get_pixel_count(const ImBuf *ibuf)
Get the length of the data of the given image buffer in pixels.
ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
void IMB_free_byte_pixels(ImBuf *ibuf)
void IMB_filtery(ImBuf *ibuf)
void IMB_rectfill(ImBuf *drect, const float col[4])
bool IMB_alloc_float_pixels(ImBuf *ibuf, const unsigned int channels, bool initialize_pixels=true)
eIMBInterpolationFilterMode
@ IMB_FILTER_CUBIC_BSPLINE
@ IMB_FILTER_CUBIC_MITCHELL
#define IB_PROFILE_LINEAR_RGB
@ IB_uninitialized_pixels
Read Guarded memory(de)allocation.
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
static void mul(btAlignedObjectArray< T > &items, const Q &value)
constexpr int64_t first() const
blender::gpu::Batch * quad
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
float MOV_get_fps(const MovieReader *anim)
ImBuf * MOV_decode_frame(MovieReader *anim, int position, IMB_Timecode_Type tc, IMB_Proxy_Size preview_size)
CartesianBasis invert(const CartesianBasis &basis)
MatT from_origin_transform(const MatT &transform, const VectorT origin)
MatT from_location(const typename MatT::loc_type &location)
MatT from_loc_rot_scale(const typename MatT::loc_type &location, const RotationT &rotation, const VecBase< typename MatT::base_type, ScaleDim > &scale)
bool render_is_muted(const ListBase *channels, const Strip *strip)
EffectHandle strip_blend_mode_handle_get(Strip *strip)
static ImBuf * seq_render_image_strip_view(const RenderData *context, Strip *strip, char *filepath, char *prefix, const char *ext, int view_id)
void source_image_cache_put(const RenderData *context, const Strip *strip, float timeline_frame, ImBuf *image)
static IMB_Timecode_Type seq_render_movie_strip_timecode_get(Strip *strip)
void intra_frame_cache_set_cur_frame(Scene *scene, float frame, int view_id, int width, int height)
Array< float2 > image_transform_final_quad_get(const Scene *scene, const Strip *strip)
static ImBuf * do_render_strip_seqbase(const RenderData *context, SeqRenderState *state, Strip *strip, float frame_index)
void seq_imbuf_to_sequencer_space(const Scene *scene, ImBuf *ibuf, bool make_float)
EffectHandle strip_effect_handle_get(Strip *strip)
ImBuf * final_image_cache_get(Scene *scene, float timeline_frame, int view_id, int display_channel)
ImBuf * render_give_ibuf(const RenderData *context, float timeline_frame, int chanshown)
struct ImBuf *(*)(struct Depsgraph *, struct Scene *, struct View3DShading *, eDrawType, struct Object *, int, int, enum eImBufFlags, eV3DOffscreenDrawFlag, int, const char *, struct GPUOffScreen *, struct GPUViewport *, char *) DrawViewFn
void seq_imbuf_assign_spaces(const Scene *scene, ImBuf *ibuf)
SeqTimelineChannel * channel_get_by_index(const ListBase *channels, const int channel_index)
ImBuf * seq_render_give_ibuf_seqbase(const RenderData *context, SeqRenderState *state, float timeline_frame, int chan_shown, ListBase *channels, ListBase *seqbasep)
static ImBuf * do_render_strip_uncached(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, bool *r_is_proxy_image)
IMB_Proxy_Size rendersize_to_proxysize(eSpaceSeq_Proxy_RenderSize render_size)
static ImBuf * seq_render_scene_strip(const RenderData *context, Strip *strip, float frame_index, float timeline_frame)
static ImBuf * seq_render_movie_strip_view(const RenderData *context, Strip *strip, float timeline_frame, StripAnim *sanim, bool *r_is_proxy_image)
void relations_free_all_anim_ibufs(Scene *scene, int timeline_frame)
static ImBuf * seq_render_effect_strip_impl(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame)
float give_frame_index(const Scene *scene, const Strip *strip, float timeline_frame)
static bool is_opaque_alpha_over(const Strip *strip)
static bool seq_must_swap_input_in_blend_mode(Strip *strip)
Editing * editing_get(const Scene *scene)
static Depsgraph * get_depsgraph_for_scene_strip(Main *bmain, Scene *scene, ViewLayer *view_layer)
ImBuf * seq_proxy_fetch(const RenderData *context, Strip *strip, int timeline_frame)
float get_render_scale_factor(eSpaceSeq_Proxy_RenderSize render_size, short scene_render_scale)
static ImBuf * seq_get_movieclip_ibuf(Strip *strip, MovieClipUser user)
static void multiply_ibuf(ImBuf *ibuf, const float fmul, const bool multiply_alpha)
ImBuf * intra_frame_cache_get_composite(Scene *scene, const Strip *strip)
static bool is_quad_a_inside_b(const StripScreenQuad &a, const StripScreenQuad &b)
void strip_open_anim_file(Scene *scene, Strip *strip, bool openfile)
void seq_prefetch_start(const RenderData *context, float timeline_frame)
ImBuf * intra_frame_cache_get_preprocessed(Scene *scene, const Strip *strip)
static bool seq_image_strip_is_multiview_render(Scene *scene, Strip *strip, int totfiles, const char *filepath, char *r_prefix, const char *r_ext)
static ImBuf * create_missing_media_image(const RenderData *context, int width, int height)
constexpr int MAX_CHANNELS
static ImBuf * seq_render_preprocess_ibuf(const RenderData *context, SeqRenderState *state, Strip *strip, ImBuf *ibuf, float timeline_frame, bool use_preprocess, const bool is_proxy_image)
static ImBuf * seq_render_movie_strip_custom_file_proxy(const RenderData *context, Strip *strip, int timeline_frame)
static ImBuf * seq_render_mask_strip(const RenderData *context, Strip *strip, float frame_index)
void render_new_render_data(Main *bmain, Depsgraph *depsgraph, Scene *scene, int rectx, int recty, eSpaceSeq_Proxy_RenderSize preview_render_size, Render *render, RenderData *r_context)
static bool is_strip_covering_screen(const RenderData *context, const Strip *strip)
static blender::Mutex seq_render_mutex
float strip_speed_effect_target_frame_get(Scene *scene, Strip *strip_speed, float timeline_frame, int input)
static ImBuf * seq_render_movie_strip(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, bool *r_is_proxy_image)
StripScreenQuad get_strip_screen_quad(const RenderData *context, const Strip *strip)
static StripEarlyOut strip_get_early_out_for_blend_mode(Strip *strip)
static ImBuf * seq_render_strip_stack(const RenderData *context, SeqRenderState *state, ListBase *channels, ListBase *seqbasep, float timeline_frame, int chanshown)
static float3x3 calc_strip_transform_matrix(const Scene *scene, const Strip *strip, const int in_x, const int in_y, const int out_x, const int out_y, const float image_scale_factor, const float preview_scale_factor)
float2 image_transform_origin_get(const Scene *scene, const Strip *strip)
static ImBuf * seq_render_image_strip(const RenderData *context, SeqRenderState *state, Strip *strip, int timeline_frame, bool *r_is_proxy_image)
ImBuf * source_image_cache_get(const RenderData *context, const Strip *strip, float timeline_frame)
static ImBuf * seq_render_scene_strip_ex(const RenderData *context, Strip *strip, float frame_index, float timeline_frame)
void render_pixel_from_sequencer_space_v4(const Scene *scene, float pixel[4])
void intra_frame_cache_put_composite(Scene *scene, const Strip *strip, ImBuf *image)
bool evict_caches_if_full(Scene *scene)
void modifier_apply_stack(ModifierApplyContext &context, int timeline_frame)
VectorSet< Strip * > query_rendered_strips(const Scene *scene, ListBase *channels, ListBase *seqbase, const int timeline_frame, const int displayed_channel)
void render_imbuf_from_sequencer_space(const Scene *scene, ImBuf *ibuf)
static bool seq_input_have_to_preprocess(const RenderData *context, Strip *strip, float)
float rendersize_to_scale_factor(eSpaceSeq_Proxy_RenderSize render_size)
static void sequencer_preprocess_transform_crop(ImBuf *in, ImBuf *out, const RenderData *context, Strip *strip, const float3x3 &matrix, const bool scale_crop_values, const float preview_scale_factor)
bool channel_is_muted(const SeqTimelineChannel *channel)
static ImBuf * seq_render_strip_stack_apply_effect(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, ImBuf *ibuf1, ImBuf *ibuf2)
void media_presence_set_missing(Scene *scene, const Strip *strip, bool missing)
Vector< Strip * > seq_shown_strips_get(const Scene *scene, ListBase *channels, ListBase *seqbase, const int timeline_frame, const int chanshown)
static eIMBInterpolationFilterMode get_auto_filter(const StripTransform *transform)
static bool sequencer_use_crop(const Strip *strip)
void final_image_cache_put(Scene *scene, float timeline_frame, int view_id, int display_channel, ImBuf *image)
ImBuf * seq_render_mask(Depsgraph *depsgraph, int width, int height, const Mask *mask, float frame_index, bool make_float)
static void sequencer_image_crop_init(const Strip *strip, const ImBuf *in, float crop_scale_factor, rctf *r_crop)
static void convert_multilayer_ibuf(ImBuf *ibuf)
ListBase * get_seqbase_from_strip(Strip *strip, ListBase **r_channels, int *r_offset)
bool seq_proxy_get_custom_file_filepath(Strip *strip, char *filepath, const int view_id)
static ImBuf * input_preprocess(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, ImBuf *ibuf, const bool is_proxy_image)
bool can_use_proxy(const RenderData *context, const Strip *strip, IMB_Proxy_Size psize)
int seq_num_files(Scene *scene, char views_format, const bool is_multiview)
static bool sequencer_use_transform(const Strip *strip)
static ImBuf * seq_render_movieclip_strip(const RenderData *context, Strip *strip, float frame_index, bool *r_is_proxy_image)
Scene * prefetch_get_original_scene(const RenderData *context)
ImBuf * seq_render_strip(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame)
StripElem * render_give_stripelem(const Scene *scene, const Strip *strip, int timeline_frame)
static bool seq_need_scale_to_render_size(const Strip *strip, bool is_proxy_image)
ImBuf * render_give_ibuf_direct(const RenderData *context, float timeline_frame, Strip *strip)
int effect_get_num_inputs(int strip_type)
void intra_frame_cache_put_preprocessed(Scene *scene, const Strip *strip, ImBuf *image)
void seq_multiview_name(Scene *scene, const int view_id, const char *prefix, const char *ext, char *r_path, size_t r_size)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
VecBase< float, 2 > float2
VecBase< int32_t, 3 > int3
MatBase< float, 3, 3 > float3x3
void RE_ReleaseResultImage(Render *re)
void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
void RE_RenderFrame(Render *re, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, const int frame, const float subframe, const bool write_still)
void RE_display_free(Render *re)
Render * RE_NewSceneRender(const Scene *scene)
void RE_display_share(Render *re, const Render *parent_re)
Render * RE_GetSceneRender(const Scene *scene)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
SceneRuntimeHandle * runtime
struct bNodeTree * compositing_node_group
ColorManagedColorspaceSettings sequencer_colorspace_settings
struct MovieReader * anim
StripTransform * transform
ColorManagedColorspaceSettings colorspace_settings
struct MovieReader * anim
struct Object * scene_camera
struct Stereo3dFormat * stereo3d_format
ImBuf *(* execute)(const RenderData *context, SeqRenderState *state, Strip *strip, float timeline_frame, float fac, ImBuf *ibuf1, ImBuf *ibuf2)
void(* get_default_fac)(const Scene *scene, const Strip *strip, float timeline_frame, float *fac)
StripEarlyOut(* early_out)(const Strip *strip, float fac)
float2 result_translation
bool is_occluded(const RenderData *context, const Strip *strip, int order_index) const
void add_occluder(const RenderData *context, const Strip *strip, int order_index)
Vector< OpaqueQuad, 4 > opaques
GPUOffScreen * gpu_offscreen
float motion_blur_shutter
bool ignore_missing_media
eSpaceSeq_Proxy_RenderSize preview_render_size
GPUViewport * gpu_viewport