Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2022-06-30 16:27:49 +0300
committerRichard Antalik <richardantalik@gmail.com>2022-06-30 16:31:58 +0300
commit547efb6b1e3414f1b696fb1975e0c49742a264dc (patch)
tree2724d943cd86db055efaaea419f6b4f5a73afa6e /source/blender/sequencer
parent92d7f9ac56e0ff1e65c364487542dfb7c32a0a67 (diff)
Fix T99133:animating multiply factor on video strips crashes blender
Crash caused by `effect_seq->len` being 0, so frame map was not built. Get length in timeline using handle positions.
Diffstat (limited to 'source/blender/sequencer')
-rw-r--r--source/blender/sequencer/intern/effects.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c
index 368c00534be..4aec4916f7b 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -2600,7 +2600,10 @@ static FCurve *seq_effect_speed_speed_factor_curve_get(Scene *scene, Sequence *s
void seq_effect_speed_rebuild_map(Scene *scene, Sequence *seq)
{
- if ((seq->seq1 == NULL) || (seq->len < 1)) {
+ const int effect_strip_length = SEQ_time_right_handle_frame_get(scene, seq) -
+ SEQ_time_left_handle_frame_get(scene, seq);
+
+ if ((seq->seq1 == NULL) || (effect_strip_length < 1)) {
return; /* Make coverity happy and check for (CID 598) input strip... */
}
@@ -2614,15 +2617,13 @@ void seq_effect_speed_rebuild_map(Scene *scene, Sequence *seq)
MEM_freeN(v->frameMap);
}
- const int effect_strip_length = SEQ_time_right_handle_frame_get(scene, seq) -
- SEQ_time_left_handle_frame_get(scene, seq);
v->frameMap = MEM_mallocN(sizeof(float) * effect_strip_length, __func__);
v->frameMap[0] = 0.0f;
float target_frame = 0;
for (int frame_index = 1; frame_index < effect_strip_length; frame_index++) {
target_frame += evaluate_fcurve(fcu, SEQ_time_left_handle_frame_get(scene, seq) + frame_index);
- CLAMP(target_frame, 0, seq->seq1->len);
+ CLAMP(target_frame, 0, SEQ_time_strip_length_get(seq->seq1));
v->frameMap[frame_index] = target_frame;
}
}