Cleanup: None of VSE effects have three image inputs

So remove all code related to "ibuf3" handling since it is just always null.

Pull Request: https://projects.blender.org/blender/blender/pulls/127348
This commit is contained in:
Aras Pranckevicius
2024-09-09 18:02:59 +02:00
committed by Aras Pranckevicius
parent 897f7a8482
commit 9d3b2b51a7
4 changed files with 60 additions and 145 deletions

View File

@@ -70,10 +70,9 @@ struct SeqEffectHandle {
float timeline_frame,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3);
ImBuf *ibuf2);
ImBuf *(*init_execution)(const SeqRenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *ibuf3);
ImBuf *(*init_execution)(const SeqRenderData *context, ImBuf *ibuf1, ImBuf *ibuf2);
void (*execute_slice)(const SeqRenderData *context,
Sequence *seq,
@@ -81,7 +80,6 @@ struct SeqEffectHandle {
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf *ibuf3,
int start_line,
int total_lines,
ImBuf *out);

View File

@@ -71,12 +71,10 @@ static SeqEffectHandle get_sequence_effect_impl(int seq_type);
static void slice_get_byte_buffers(const SeqRenderData *context,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf *ibuf3,
const ImBuf *out,
int start_line,
uchar **rect1,
uchar **rect2,
uchar **rect3,
uchar **rect_out)
{
int offset = 4 * start_line * context->rectx;
@@ -87,21 +85,15 @@ static void slice_get_byte_buffers(const SeqRenderData *context,
if (ibuf2) {
*rect2 = ibuf2->byte_buffer.data + offset;
}
if (ibuf3) {
*rect3 = ibuf3->byte_buffer.data + offset;
}
}
static void slice_get_float_buffers(const SeqRenderData *context,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf *ibuf3,
const ImBuf *out,
int start_line,
float **rect1,
float **rect2,
float **rect3,
float **rect_out)
{
int offset = 4 * start_line * context->rectx;
@@ -112,10 +104,6 @@ static void slice_get_float_buffers(const SeqRenderData *context,
if (ibuf2) {
*rect2 = ibuf2->float_buffer.data + offset;
}
if (ibuf3) {
*rect3 = ibuf3->float_buffer.data + offset;
}
}
static float4 load_premul_pixel(const uchar *ptr)
@@ -165,7 +153,6 @@ static void store_opaque_black_pixel(float *dst)
static ImBuf *prepare_effect_imbufs(const SeqRenderData *context,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3,
bool uninitialized_pixels = true)
{
ImBuf *out;
@@ -174,15 +161,12 @@ static ImBuf *prepare_effect_imbufs(const SeqRenderData *context,
int y = context->recty;
int base_flags = uninitialized_pixels ? IB_uninitialized_pixels : 0;
if (!ibuf1 && !ibuf2 && !ibuf3) {
if (!ibuf1 && !ibuf2) {
/* hmmm, global float option ? */
out = IMB_allocImBuf(x, y, 32, IB_rect | base_flags);
}
else if ((ibuf1 && ibuf1->float_buffer.data) || (ibuf2 && ibuf2->float_buffer.data) ||
(ibuf3 && ibuf3->float_buffer.data))
{
/* if any inputs are rectfloat, output is float too */
else if ((ibuf1 && ibuf1->float_buffer.data) || (ibuf2 && ibuf2->float_buffer.data)) {
/* if any inputs are float, output is float too */
out = IMB_allocImBuf(x, y, 32, IB_rectfloat | base_flags);
}
else {
@@ -198,10 +182,6 @@ static ImBuf *prepare_effect_imbufs(const SeqRenderData *context,
seq_imbuf_to_sequencer_space(scene, ibuf2, true);
}
if (ibuf3 && !ibuf3->float_buffer.data) {
seq_imbuf_to_sequencer_space(scene, ibuf3, true);
}
IMB_colormanagement_assign_float_colorspace(out, scene->sequencer_colorspace_settings.name);
}
else {
@@ -212,14 +192,10 @@ static ImBuf *prepare_effect_imbufs(const SeqRenderData *context,
if (ibuf2 && !ibuf2->byte_buffer.data) {
IMB_rect_from_float(ibuf2);
}
if (ibuf3 && !ibuf3->byte_buffer.data) {
IMB_rect_from_float(ibuf3);
}
}
/* If effect only affecting a single channel, forward input's metadata to the output. */
if (ibuf1 != nullptr && ibuf1 == ibuf2 && ibuf2 == ibuf3) {
if (ibuf1 != nullptr && ibuf1 == ibuf2) {
IMB_metadata_copy(out, ibuf1);
}
@@ -289,7 +265,6 @@ static void do_alphaover_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -297,16 +272,14 @@ static void do_alphaover_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_alphaover_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_alphaover_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -354,7 +327,6 @@ static void do_alphaunder_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -362,16 +334,14 @@ static void do_alphaunder_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_alphaunder_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_alphaunder_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -434,7 +404,6 @@ static void do_cross_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -442,16 +411,14 @@ static void do_cross_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_cross_effect_float(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_cross_effect_byte(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -503,22 +470,12 @@ static void do_gammacross_effect(
}
}
static ImBuf *gammacross_init_execution(const SeqRenderData *context,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
{
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
return out;
}
static void do_gammacross_effect(const SeqRenderData *context,
Sequence * /*seq*/,
float /*timeline_frame*/,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -526,16 +483,14 @@ static void do_gammacross_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_gammacross_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_gammacross_effect(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -597,7 +552,6 @@ static void do_add_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -605,16 +559,14 @@ static void do_add_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_add_effect_float(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_add_effect_byte(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -678,7 +630,6 @@ static void do_sub_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -686,16 +637,14 @@ static void do_sub_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_sub_effect_float(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_sub_effect_byte(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -839,7 +788,6 @@ static void do_mul_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -847,16 +795,14 @@ static void do_mul_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_mul_effect_float(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_mul_effect_byte(fac, context->rectx, total_lines, rect1, rect2, rect_out);
}
@@ -1037,22 +983,19 @@ static void do_blend_mode_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
{
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_blend_effect_float(
fac, context->rectx, total_lines, rect1, rect2, seq->blend_mode, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_blend_effect_byte(
fac, context->rectx, total_lines, rect1, rect2, seq->blend_mode, rect_out);
}
@@ -1083,7 +1026,6 @@ static void do_colormix_effect(const SeqRenderData *context,
float /*fac*/,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -1095,15 +1037,13 @@ static void do_colormix_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_blend_effect_float(
fac, context->rectx, total_lines, rect1, rect2, data->blend_effect, rect_out);
}
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_blend_effect_byte(
fac, context->rectx, total_lines, rect1, rect2, data->blend_effect, rect_out);
}
@@ -1457,10 +1397,9 @@ static ImBuf *do_wipe_effect(const SeqRenderData *context,
float /*timeline_frame*/,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
ImBuf *ibuf2)
{
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2);
if (out->float_buffer.data) {
do_wipe_effect(seq,
@@ -1607,7 +1546,6 @@ static void do_transform_effect(const SeqRenderData *context,
float /*fac*/,
const ImBuf *ibuf1,
const ImBuf * /*ibuf2*/,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -1874,10 +1812,9 @@ static ImBuf *do_glow_effect(const SeqRenderData *context,
float /*timeline_frame*/,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
ImBuf *ibuf2)
{
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2);
int render_size = 100 * context->rectx / context->scene->r.xsch;
@@ -1950,11 +1887,10 @@ static ImBuf *do_solid_color(const SeqRenderData *context,
float /*timeline_frame*/,
float /*fac*/,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
ImBuf *ibuf2)
{
using namespace blender;
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2);
SolidColorVars *cv = (SolidColorVars *)seq->effectdata;
@@ -2016,8 +1952,7 @@ static ImBuf *do_multicam(const SeqRenderData *context,
float timeline_frame,
float /*fac*/,
ImBuf * /*ibuf1*/,
ImBuf * /*ibuf2*/,
ImBuf * /*ibuf3*/)
ImBuf * /*ibuf2*/)
{
ImBuf *out;
Editing *ed;
@@ -2103,8 +2038,7 @@ static ImBuf *do_adjustment(const SeqRenderData *context,
float timeline_frame,
float /*fac*/,
ImBuf * /*ibuf1*/,
ImBuf * /*ibuf2*/,
ImBuf * /*ibuf3*/)
ImBuf * /*ibuf2*/)
{
ImBuf *out;
Editing *ed;
@@ -2294,8 +2228,7 @@ static ImBuf *do_speed_effect(const SeqRenderData *context,
float timeline_frame,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
ImBuf *ibuf2)
{
SpeedControlVars *s = (SpeedControlVars *)seq->effectdata;
SeqEffectHandle cross_effect = get_sequence_effect_impl(SEQ_TYPE_CROSS);
@@ -2305,7 +2238,7 @@ static ImBuf *do_speed_effect(const SeqRenderData *context,
fac = speed_effect_interpolation_ratio_get(context->scene, seq, timeline_frame);
/* Current frame is ibuf1, next frame is ibuf2. */
out = seq_render_effect_execute_threaded(
&cross_effect, context, nullptr, timeline_frame, fac, ibuf1, ibuf2, ibuf3);
&cross_effect, context, nullptr, timeline_frame, fac, ibuf1, ibuf2);
return out;
}
@@ -2325,7 +2258,6 @@ static void do_overdrop_effect(const SeqRenderData *context,
float fac,
const ImBuf *ibuf1,
const ImBuf *ibuf2,
const ImBuf * /*ibuf3*/,
int start_line,
int total_lines,
ImBuf *out)
@@ -2336,8 +2268,7 @@ static void do_overdrop_effect(const SeqRenderData *context,
if (out->float_buffer.data) {
float *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_float_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_float_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_drop_effect_float(fac, x, y, rect1, rect2, rect_out);
do_alphaover_effect(fac, x, y, rect1, rect2, rect_out);
@@ -2345,8 +2276,7 @@ static void do_overdrop_effect(const SeqRenderData *context,
else {
uchar *rect1 = nullptr, *rect2 = nullptr, *rect_out = nullptr;
slice_get_byte_buffers(
context, ibuf1, ibuf2, nullptr, out, start_line, &rect1, &rect2, nullptr, &rect_out);
slice_get_byte_buffers(context, ibuf1, ibuf2, out, start_line, &rect1, &rect2, &rect_out);
do_drop_effect_byte(fac, x, y, rect1, rect2, rect_out);
do_alphaover_effect(fac, x, y, rect1, rect2, rect_out);
@@ -2485,8 +2415,7 @@ static ImBuf *do_gaussian_blur_effect(const SeqRenderData *context,
float /*timeline_frame*/,
float /*fac*/,
ImBuf *ibuf1,
ImBuf * /*ibuf2*/,
ImBuf * /*ibuf3*/)
ImBuf * /*ibuf2*/)
{
using namespace blender;
@@ -2502,7 +2431,7 @@ static ImBuf *do_gaussian_blur_effect(const SeqRenderData *context,
const bool is_float = ibuf1->float_buffer.data;
/* Horizontal blur: create output, blur ibuf1 into it. */
ImBuf *out = prepare_effect_imbufs(context, ibuf1, nullptr, nullptr);
ImBuf *out = prepare_effect_imbufs(context, ibuf1, nullptr);
threading::parallel_for(IndexRange(context->recty), 32, [&](const IndexRange y_range) {
const int y_first = y_range.first();
const int y_size = y_range.size();
@@ -2530,7 +2459,7 @@ static ImBuf *do_gaussian_blur_effect(const SeqRenderData *context,
/* Vertical blur: create output, blur previous output into it. */
ibuf1 = out;
out = prepare_effect_imbufs(context, ibuf1, nullptr, nullptr);
out = prepare_effect_imbufs(context, ibuf1, nullptr);
threading::parallel_for(IndexRange(context->recty), 32, [&](const IndexRange y_range) {
const int y_first = y_range.first();
const int y_size = y_range.size();
@@ -3131,12 +3060,11 @@ static ImBuf *do_text_effect(const SeqRenderData *context,
float /*timeline_frame*/,
float /*fac*/,
ImBuf * /*ibuf1*/,
ImBuf * /*ibuf2*/,
ImBuf * /*ibuf3*/)
ImBuf * /*ibuf2*/)
{
/* NOTE: text rasterization only fills in part of output image,
* need to clear it. */
ImBuf *out = prepare_effect_imbufs(context, nullptr, nullptr, nullptr, false);
ImBuf *out = prepare_effect_imbufs(context, nullptr, nullptr, false);
TextVars *data = static_cast<TextVars *>(seq->effectdata);
const int width = out->x;
const int height = out->y;
@@ -3322,13 +3250,9 @@ static void get_default_fac_fade(const Scene *scene,
*fac = math::clamp(*fac, 0.0f, 1.0f);
}
static ImBuf *init_execution(const SeqRenderData *context,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
static ImBuf *init_execution(const SeqRenderData *context, ImBuf *ibuf1, ImBuf *ibuf2)
{
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2, ibuf3);
ImBuf *out = prepare_effect_imbufs(context, ibuf1, ibuf2);
return out;
}
@@ -3361,7 +3285,6 @@ static SeqEffectHandle get_sequence_effect_impl(int seq_type)
rval.multithreaded = true;
rval.early_out = early_out_fade;
rval.get_default_fac = get_default_fac_fade;
rval.init_execution = gammacross_init_execution;
rval.execute_slice = do_gammacross_effect;
break;
case SEQ_TYPE_ADD:

View File

@@ -757,7 +757,7 @@ struct RenderEffectInitData {
const SeqRenderData *context;
Sequence *seq;
float timeline_frame, fac;
ImBuf *ibuf1, *ibuf2, *ibuf3;
ImBuf *ibuf1, *ibuf2;
ImBuf *out;
};
@@ -767,7 +767,7 @@ struct RenderEffectThread {
const SeqRenderData *context;
Sequence *seq;
float timeline_frame, fac;
ImBuf *ibuf1, *ibuf2, *ibuf3;
ImBuf *ibuf1, *ibuf2;
ImBuf *out;
int start_line, tot_line;
@@ -788,7 +788,6 @@ static void render_effect_execute_init_handle(void *handle_v,
handle->fac = init_data->fac;
handle->ibuf1 = init_data->ibuf1;
handle->ibuf2 = init_data->ibuf2;
handle->ibuf3 = init_data->ibuf3;
handle->out = init_data->out;
handle->start_line = start_line;
@@ -805,7 +804,6 @@ static void *render_effect_execute_do_thread(void *thread_data_v)
thread_data->fac,
thread_data->ibuf1,
thread_data->ibuf2,
thread_data->ibuf3,
thread_data->start_line,
thread_data->tot_line,
thread_data->out);
@@ -819,11 +817,10 @@ ImBuf *seq_render_effect_execute_threaded(SeqEffectHandle *sh,
float timeline_frame,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3)
ImBuf *ibuf2)
{
RenderEffectInitData init_data;
ImBuf *out = sh->init_execution(context, ibuf1, ibuf2, ibuf3);
ImBuf *out = sh->init_execution(context, ibuf1, ibuf2);
init_data.sh = sh;
init_data.context = context;
@@ -832,7 +829,6 @@ ImBuf *seq_render_effect_execute_threaded(SeqEffectHandle *sh,
init_data.fac = fac;
init_data.ibuf1 = ibuf1;
init_data.ibuf2 = ibuf2;
init_data.ibuf3 = ibuf3;
init_data.out = out;
IMB_processor_apply_threaded(out->y,
@@ -854,15 +850,14 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context,
int i;
SeqEffectHandle sh = SEQ_effect_handle_get(seq);
const FCurve *fcu = nullptr;
ImBuf *ibuf[3];
Sequence *input[3];
ImBuf *ibuf[2];
Sequence *input[2];
ImBuf *out = nullptr;
ibuf[0] = ibuf[1] = ibuf[2] = nullptr;
ibuf[0] = ibuf[1] = nullptr;
input[0] = seq->seq1;
input[1] = seq->seq2;
input[2] = seq->seq3;
if (!sh.execute && !(sh.execute_slice && sh.init_execution)) {
/* effect not supported in this version... */
@@ -887,10 +882,10 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context,
switch (early_out) {
case StripEarlyOut::NoInput:
out = sh.execute(context, seq, timeline_frame, fac, nullptr, nullptr, nullptr);
out = sh.execute(context, seq, timeline_frame, fac, nullptr, nullptr);
break;
case StripEarlyOut::DoEffect:
for (i = 0; i < 3; i++) {
for (i = 0; i < 2; i++) {
/* Speed effect requires time remapping of `timeline_frame` for input(s). */
if (input[0] && seq->type == SEQ_TYPE_SPEED) {
int target_frame = floor(
@@ -907,10 +902,10 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context,
if (ibuf[0] && (ibuf[1] || SEQ_effect_get_num_inputs(seq->type) == 1)) {
if (sh.multithreaded) {
out = seq_render_effect_execute_threaded(
&sh, context, seq, timeline_frame, fac, ibuf[0], ibuf[1], ibuf[2]);
&sh, context, seq, timeline_frame, fac, ibuf[0], ibuf[1]);
}
else {
out = sh.execute(context, seq, timeline_frame, fac, ibuf[0], ibuf[1], ibuf[2]);
out = sh.execute(context, seq, timeline_frame, fac, ibuf[0], ibuf[1]);
}
}
break;
@@ -926,7 +921,7 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context,
break;
}
for (i = 0; i < 3; i++) {
for (i = 0; i < 2; i++) {
IMB_freeImBuf(ibuf[i]);
}
@@ -1925,19 +1920,19 @@ static ImBuf *seq_render_strip_stack_apply_effect(
if (swap_input) {
if (sh.multithreaded) {
out = seq_render_effect_execute_threaded(
&sh, context, seq, timeline_frame, fac, ibuf2, ibuf1, nullptr);
&sh, context, seq, timeline_frame, fac, ibuf2, ibuf1);
}
else {
out = sh.execute(context, seq, timeline_frame, fac, ibuf2, ibuf1, nullptr);
out = sh.execute(context, seq, timeline_frame, fac, ibuf2, ibuf1);
}
}
else {
if (sh.multithreaded) {
out = seq_render_effect_execute_threaded(
&sh, context, seq, timeline_frame, fac, ibuf1, ibuf2, nullptr);
&sh, context, seq, timeline_frame, fac, ibuf1, ibuf2);
}
else {
out = sh.execute(context, seq, timeline_frame, fac, ibuf1, ibuf2, nullptr);
out = sh.execute(context, seq, timeline_frame, fac, ibuf1, ibuf2);
}
}

View File

@@ -34,8 +34,7 @@ ImBuf *seq_render_effect_execute_threaded(SeqEffectHandle *sh,
float timeline_frame,
float fac,
ImBuf *ibuf1,
ImBuf *ibuf2,
ImBuf *ibuf3);
ImBuf *ibuf2);
void seq_imbuf_to_sequencer_space(const Scene *scene, ImBuf *ibuf, bool make_float);
blender::Vector<Sequence *> seq_get_shown_sequences(
const Scene *scene, ListBase *channels, ListBase *seqbase, int timeline_frame, int chanshown);