From 24a3446787d31f9b32e6759f91349b598c8e9774 Mon Sep 17 00:00:00 2001 From: Richard Antalik Date: Tue, 24 Aug 2021 00:46:34 +0200 Subject: Fix T90646: VSE hangs when strips overlap When all strips are selected and overlap is caused, this causes VSE to hang in infinite loop, because such situation should never happen. To prevent infinite loop, ensure, that strip overlap is not tested against single overlapping strip itself. Prevent overlap that can not be handled because of issue described above by moving overlapping strip between channels. Reviewed By: campbellbarton Differential Revision: D12209 --- .../editors/transform/transform_convert_sequencer.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'source/blender/editors/transform') diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c index 17512c79d03..45ed0f3b664 100644 --- a/source/blender/editors/transform/transform_convert_sequencer.c +++ b/source/blender/editors/transform/transform_convert_sequencer.c @@ -400,15 +400,14 @@ static void seq_transform_handle_overlap(TransInfo *t, SeqCollection *transforme if (seq_transform_check_strip_effects(transformed_strips)) { /* Update effect strips based on strips just moved in time. */ seq_transform_update_effects(t, transformed_strips); + } - /* If any effects still overlap, we need to move them up. */ - Sequence *seq; - SEQ_ITERATOR_FOREACH (seq, transformed_strips) { - if ((seq->type & SEQ_TYPE_EFFECT) && seq->seq1) { - if (SEQ_transform_test_overlap(seqbasep, seq)) { - SEQ_transform_seqbase_shuffle(seqbasep, seq, t->scene); - } - } + /* If any effects still overlap, we need to move them up. + * In some cases other strips can be overlapping still, see T90646. */ + Sequence *seq; + SEQ_ITERATOR_FOREACH (seq, transformed_strips) { + if (SEQ_transform_test_overlap(seqbasep, seq)) { + SEQ_transform_seqbase_shuffle(seqbasep, seq, t->scene); } } } -- cgit v1.2.3