diff options
Diffstat (limited to 'source/blender/sequencer/intern/iterator.c')
-rw-r--r-- | source/blender/sequencer/intern/iterator.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/source/blender/sequencer/intern/iterator.c b/source/blender/sequencer/intern/iterator.c index 2710edd6e80..acf6776c4ed 100644 --- a/source/blender/sequencer/intern/iterator.c +++ b/source/blender/sequencer/intern/iterator.c @@ -103,13 +103,15 @@ bool SEQ_collection_has_strip(const Sequence *seq, const SeqCollection *collecti } SeqCollection *SEQ_query_by_reference(Sequence *seq_reference, + const Scene *scene, ListBase *seqbase, - void seq_query_func(Sequence *seq_reference, + void seq_query_func(const Scene *scene, + Sequence *seq_reference, ListBase *seqbase, SeqCollection *collection)) { SeqCollection *collection = SEQ_collection_create(__func__); - seq_query_func(seq_reference, seqbase, collection); + seq_query_func(scene, seq_reference, seqbase, collection); return collection; } bool SEQ_collection_append_strip(Sequence *seq, SeqCollection *collection) @@ -146,9 +148,11 @@ void SEQ_collection_exclude(SeqCollection *collection, SeqCollection *exclude_el SEQ_collection_free(exclude_elements); } -void SEQ_collection_expand(ListBase *seqbase, +void SEQ_collection_expand(const Scene *scene, + ListBase *seqbase, SeqCollection *collection, - void seq_query_func(Sequence *seq_reference, + void seq_query_func(const Scene *scene, + Sequence *seq_reference, ListBase *seqbase, SeqCollection *collection)) { @@ -157,7 +161,8 @@ void SEQ_collection_expand(ListBase *seqbase, Sequence *seq; SEQ_ITERATOR_FOREACH (seq, collection) { - SEQ_collection_merge(query_matches, SEQ_query_by_reference(seq, seqbase, seq_query_func)); + SEQ_collection_merge(query_matches, + SEQ_query_by_reference(seq, scene, seqbase, seq_query_func)); } /* Merge all expanded results in provided SeqIteratorCollection. */ @@ -219,12 +224,14 @@ SeqCollection *SEQ_query_selected_strips(ListBase *seqbase) return collection; } -static SeqCollection *query_strips_at_frame(ListBase *seqbase, const int timeline_frame) +static SeqCollection *query_strips_at_frame(const Scene *scene, + ListBase *seqbase, + const int timeline_frame) { SeqCollection *collection = SEQ_collection_create(__func__); LISTBASE_FOREACH (Sequence *, seq, seqbase) { - if (SEQ_time_strip_intersects_frame(seq, timeline_frame)) { + if (SEQ_time_strip_intersects_frame(scene, seq, timeline_frame)) { SEQ_collection_append_strip(seq, collection); } } @@ -299,12 +306,13 @@ static void collection_filter_rendered_strips(ListBase *channels, SeqCollection } } -SeqCollection *SEQ_query_rendered_strips(ListBase *channels, +SeqCollection *SEQ_query_rendered_strips(const Scene *scene, + ListBase *channels, ListBase *seqbase, const int timeline_frame, const int displayed_channel) { - SeqCollection *collection = query_strips_at_frame(seqbase, timeline_frame); + SeqCollection *collection = query_strips_at_frame(scene, seqbase, timeline_frame); if (displayed_channel != 0) { collection_filter_channel_up_to_incl(collection, displayed_channel); } @@ -324,7 +332,8 @@ SeqCollection *SEQ_query_unselected_strips(ListBase *seqbase) return collection; } -void SEQ_query_strip_effect_chain(Sequence *seq_reference, +void SEQ_query_strip_effect_chain(const Scene *scene, + Sequence *seq_reference, ListBase *seqbase, SeqCollection *collection) { @@ -335,13 +344,13 @@ void SEQ_query_strip_effect_chain(Sequence *seq_reference, /* Find all strips that seq_reference is connected to. */ if (seq_reference->type & SEQ_TYPE_EFFECT) { if (seq_reference->seq1) { - SEQ_query_strip_effect_chain(seq_reference->seq1, seqbase, collection); + SEQ_query_strip_effect_chain(scene, seq_reference->seq1, seqbase, collection); } if (seq_reference->seq2) { - SEQ_query_strip_effect_chain(seq_reference->seq2, seqbase, collection); + SEQ_query_strip_effect_chain(scene, seq_reference->seq2, seqbase, collection); } if (seq_reference->seq3) { - SEQ_query_strip_effect_chain(seq_reference->seq3, seqbase, collection); + SEQ_query_strip_effect_chain(scene, seq_reference->seq3, seqbase, collection); } } @@ -349,7 +358,7 @@ void SEQ_query_strip_effect_chain(Sequence *seq_reference, LISTBASE_FOREACH (Sequence *, seq_test, seqbase) { if (seq_test->seq1 == seq_reference || seq_test->seq2 == seq_reference || seq_test->seq3 == seq_reference) { - SEQ_query_strip_effect_chain(seq_test, seqbase, collection); + SEQ_query_strip_effect_chain(scene, seq_test, seqbase, collection); } } } |