From 929d7597b345027b848c2997720e52b89c46a0ff Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Tue, 24 Aug 2021 01:01:48 +0200 Subject: VSE: Cleanup speed effect math Simplify logic of speed effect frame calculation by using discrete math where possible. Only `SEQ_SPEED_MULTIPLY` mode with animation requires frame map to be built. Frame map building was simplified by removing unused branches. Functional change: Animating strip in negative range will reverse playback. I assume this was limitation of previous system, where each frame map item was limited to be within correct frame range. Now frame map can contain values that point beyond usable range and they are limited by `seq_speed_effect_target_frame_get`. This way it is possible to control playback rate in both directions. Mostly fixes T89120 apart from offset handling. Reviewed By: mano-wii Differential Revision: https://developer.blender.org/D11939 --- source/blender/sequencer/intern/strip_relations.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/sequencer/intern/strip_relations.c') diff --git a/source/blender/sequencer/intern/strip_relations.c b/source/blender/sequencer/intern/strip_relations.c index 7c5a3f031db..409b5f6a2e4 100644 --- a/source/blender/sequencer/intern/strip_relations.c +++ b/source/blender/sequencer/intern/strip_relations.c @@ -118,7 +118,7 @@ static void sequence_invalidate_cache(Scene *scene, } if (seq->effectdata && seq->type == SEQ_TYPE_SPEED) { - seq_effect_speed_rebuild_map(scene, seq, true); + seq_effect_speed_rebuild_map(scene, seq); } sequence_do_invalidate_dependent(scene, seq, &ed->seqbase); @@ -268,7 +268,7 @@ void SEQ_relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render) SEQ_relations_sequence_free_anim(seq); } if (seq->type == SEQ_TYPE_SPEED) { - seq_effect_speed_rebuild_map(scene, seq, true); + seq_effect_speed_rebuild_map(scene, seq); } } if (seq->type == SEQ_TYPE_META) { @@ -325,7 +325,7 @@ static bool update_changed_seq_recurs( SEQ_relations_sequence_free_anim(seq); } else if (seq->type == SEQ_TYPE_SPEED) { - seq_effect_speed_rebuild_map(scene, seq, true); + seq_effect_speed_rebuild_map(scene, seq); } } -- cgit v1.2.3