Dirty hack fix for:

* [#22366] Cutting audio and meta strips with audio does not actually cut audio
* [#22639] Audio not clipped to meta bounds

Also fixed a seemingly symptomless bug in sequencer_edit.c
This commit is contained in:
Joerg Mueller 2010-07-13 15:14:29 +00:00
parent 222da0593f
commit 3141374ae8
2 changed files with 27 additions and 1 deletions

@ -517,6 +517,31 @@ void calc_sequence_disp(Scene *scene, Sequence *seq)
seq_update_sound(scene, seq);
}
static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq)
{
Sequence *seq;
/* for sound we go over full meta tree to update bounds of the sound strips,
since sound is played outside of evaluating the imbufs, */
for(seq=metaseq->seqbase.first; seq; seq=seq->next) {
if(seq->type == SEQ_META) {
seq_update_sound_bounds_recursive(scene, seq);
}
else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) {
if(seq->scene_sound) {
int startofs = seq->startofs;
int endofs = seq->endofs;
if(seq->startofs + seq->start < metaseq->start + metaseq->startofs)
startofs = metaseq->start + metaseq->startofs - seq->start;
if(seq->start + seq->len - seq->endofs > metaseq->start + metaseq->len - metaseq->endofs)
endofs = seq->start + seq->len - metaseq->start - metaseq->len + metaseq->endofs;
sound_move_scene_sound(scene, seq->scene_sound, seq->start + startofs, seq->start+seq->len - endofs, startofs);
}
}
}
}
void calc_sequence(Scene *scene, Sequence *seq)
{
Sequence *seqm;
@ -576,6 +601,7 @@ void calc_sequence(Scene *scene, Sequence *seq)
new_tstripdata(seq);
}
}
seq_update_sound_bounds_recursive(scene, seq);
}
calc_sequence_disp(scene, seq);
}

@ -827,7 +827,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
}
reload_sequence_new_file(scene, seqn, FALSE);
calc_sequence(scene, seq);
calc_sequence(scene, seqn);
}
return seqn;
}