diff options
author | Peter Schlaile <peter@schlaile.de> | 2006-05-02 17:22:00 +0400 |
---|---|---|
committer | Peter Schlaile <peter@schlaile.de> | 2006-05-02 17:22:00 +0400 |
commit | 7deaac1d258d1e2f8bab395f35b0931fd5faadda (patch) | |
tree | aff96633d548c1e3a0986ef2a91a88a58c908b86 /source/blender/src/seqaudio.c | |
parent | 444e4e36feab32f86cda95c22e37b2d84ebee674 (diff) |
==Sequencer==
- Added early-out optimisation to add-effect (the case, where fac == 0)
- Bugfixes:
* hddaudio: ffmpeg does not seek always to the correct frame,
if the SEEK_BACKWARD flag is used. Now we account for this and
seek a little bit further... (hack, urghs)
* hddaudio: on long timelines, the new seek code didn't work
(forgot a long long cast)
* the audio mixdown code now also calculates meta-strip IPOs
Diffstat (limited to 'source/blender/src/seqaudio.c')
-rw-r--r-- | source/blender/src/seqaudio.c | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/source/blender/src/seqaudio.c b/source/blender/src/seqaudio.c index 49527ed95d2..abeb6244e39 100644 --- a/source/blender/src/seqaudio.c +++ b/source/blender/src/seqaudio.c @@ -113,12 +113,28 @@ void makewavstring (char *string) } } +static void do_sound_ipos(Sequence * seq) +{ + while(seq) { + if (seq->type == SEQ_META) { + do_sound_ipos(seq->seqbase.first); + } + if ((seq->type == SEQ_RAM_SOUND + || seq->type == SEQ_HD_SOUND) + && (seq->ipo) + && (seq->startdisp<=G.scene->r.cfra+2) + && (seq->enddisp>G.scene->r.cfra)) { + do_seq_ipo(seq); + } + seq = seq->next; + } +} + void audio_mixdown() { int file, c, totlen, totframe, i, oldcfra, cfra2=0; char *buf; Editing *ed; - Sequence *seq; buf = MEM_mallocN(65536, "audio_mixdown"); makewavstring(buf); @@ -176,17 +192,7 @@ void audio_mixdown() memset(buf+i, 0, 64); ed= G.scene->ed; if (ed) { - seq= ed->seqbasep->first; - while(seq) { - if ((seq->type == SEQ_RAM_SOUND - || seq->type == SEQ_HD_SOUND) - && (seq->ipo) - && (seq->startdisp<=G.scene->r.cfra+2) - && (seq->enddisp>G.scene->r.cfra)) { - do_seq_ipo(seq); - } - seq = seq->next; - } + do_sound_ipos(ed->seqbasep->first); } audio_fill(buf+i, NULL, 64); if (G.order == B_ENDIAN) { @@ -210,7 +216,6 @@ void audiostream_fill(Uint8 *mixdown, int len) { int oldcfra = CFRA; Editing *ed; - Sequence *seq; int i; memset(mixdown, 0, len); @@ -222,17 +227,7 @@ void audiostream_fill(Uint8 *mixdown, int len) ed = G.scene->ed; if (ed) { - seq = ed->seqbasep->first; - while(seq) { - if ((seq->type == SEQ_RAM_SOUND - || seq->type == SEQ_HD_SOUND) - && (seq->ipo) - && (seq->startdisp <= G.scene->r.cfra + 2) - && (seq->enddisp > G.scene->r.cfra)) { - do_seq_ipo(seq); - } - seq = seq->next; - } + do_sound_ipos(ed->seqbasep->first); } audio_fill(mixdown + i, NULL, |