diff options
author | Peter Schlaile <peter@schlaile.de> | 2007-12-25 23:31:07 +0300 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2007-12-25 23:31:07 +0300 |
commit | 6e812d5901bac112de3168ec530c42681216f6ec (patch) | |
tree | d46c34c17c4b15fe3949212b1e897b0bcde8f19e /source/blender/src/sequence.c | |
parent | a3a88f9591683df6274e50249e350de5ba2dc7d6 (diff) |
== Sequencer ==
* Make Lock flag work for metastrips
* Fixes: flags are cleared on exit of metastrips
* Fixes (hopefully): red picture on big endian
Diffstat (limited to 'source/blender/src/sequence.c')
-rw-r--r-- | source/blender/src/sequence.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/source/blender/src/sequence.c b/source/blender/src/sequence.c index 9a94f16712c..5faffb38107 100644 --- a/source/blender/src/sequence.c +++ b/source/blender/src/sequence.c @@ -211,6 +211,66 @@ void build_seqar(ListBase *seqbase, Sequence ***seqar, int *totseq) *seqar= tseqar; } +static void do_seq_count_cb(ListBase *seqbase, int *totseq, + int (*test_func)(Sequence * seq)) +{ + Sequence *seq; + + seq= seqbase->first; + while(seq) { + int test = test_func(seq); + if (test & BUILD_SEQAR_COUNT_CURRENT) { + (*totseq)++; + } + if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) { + do_seq_count_cb(&seq->seqbase, totseq, test_func); + } + seq= seq->next; + } +} + +static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth, + int (*test_func)(Sequence * seq)) +{ + Sequence *seq; + + seq= seqbase->first; + while(seq) { + int test = test_func(seq); + seq->depth= depth; + + if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) { + do_build_seqar_cb(&seq->seqbase, seqar, depth+1, + test_func); + } + if (test & BUILD_SEQAR_COUNT_CURRENT) { + **seqar= seq; + (*seqar)++; + } + seq= seq->next; + } +} + +void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq, + int (*test_func)(Sequence * seq)) +{ + Sequence **tseqar; + + *totseq= 0; + do_seq_count_cb(seqbase, totseq, test_func); + + if(*totseq==0) { + *seqar= 0; + return; + } + *seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar"); + tseqar= *seqar; + + do_build_seqar_cb(seqbase, seqar, 0, test_func); + *seqar= tseqar; +} + + void free_editing(Editing *ed) { MetaStack *ms; |