From 952f41a9fd93c81ff49c25820e5008250aa104b5 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Mon, 1 Jul 2024 23:07:23 +0200 Subject: [PATCH] Fix: VSE frame interpolation is broken Caused by incorrect output of `SEQ_give_frame_index` for effect strips. Also since output value is float, it has to be truncated to integer, when image bufferes are rendered for the effect. Pull Request: https://projects.blender.org/blender/blender/pulls/123914 --- source/blender/sequencer/intern/render.cc | 3 ++- source/blender/sequencer/intern/strip_time.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/blender/sequencer/intern/render.cc b/source/blender/sequencer/intern/render.cc index aef77028f8f..04c3ae918cc 100644 --- a/source/blender/sequencer/intern/render.cc +++ b/source/blender/sequencer/intern/render.cc @@ -923,7 +923,8 @@ static ImBuf *seq_render_effect_strip_impl(const SeqRenderData *context, for (i = 0; i < 3; i++) { /* Speed effect requires time remapping of `timeline_frame` for input(s). */ if (input[0] && seq->type == SEQ_TYPE_SPEED) { - float target_frame = seq_speed_effect_target_frame_get(scene, seq, timeline_frame, i); + int target_frame = floor( + seq_speed_effect_target_frame_get(scene, seq, timeline_frame, i)); ibuf[i] = seq_render_strip(context, state, input[0], target_frame); } else { /* Other effects. */ diff --git a/source/blender/sequencer/intern/strip_time.cc b/source/blender/sequencer/intern/strip_time.cc index 9a3fde5bbd7..e46baee71b7 100644 --- a/source/blender/sequencer/intern/strip_time.cc +++ b/source/blender/sequencer/intern/strip_time.cc @@ -62,10 +62,11 @@ float SEQ_give_frame_index(const Scene *scene, Sequence *seq, float timeline_fra float frame_index; float sta = SEQ_time_start_frame_get(seq); float end = SEQ_time_content_end_frame_get(scene, seq) - 1; - const float frame_index_max = seq->len - 1; + float frame_index_max = seq->len - 1; if (seq->type & SEQ_TYPE_EFFECT) { end = SEQ_time_right_handle_frame_get(scene, seq); + frame_index_max = end - sta; } if (end < sta) {