From 67467103e8c7a143c8eafda86d312dfa0c949266 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 9 Nov 2016 16:35:44 +0100 Subject: dec_video, dec_audio: avoid full reinit on switches to the same segment Same deal as with the previous commit. (Unfortunately, this code is still duplicated.) --- audio/decode/dec_audio.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'audio') diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index 3028d9988e..39e867cf42 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -257,12 +257,15 @@ void audio_work(struct dec_audio *da) struct demux_packet *new_segment = da->new_segment; da->new_segment = NULL; - // Could avoid decoder reinit; would still need flush. - da->codec = new_segment->codec; - if (da->ad_driver) - da->ad_driver->uninit(da); - da->ad_driver = NULL; - audio_init_best_codec(da); + if (da->codec == new_segment->codec) { + audio_reset_decoding(da); + } else { + da->codec = new_segment->codec; + if (da->ad_driver) + da->ad_driver->uninit(da); + da->ad_driver = NULL; + audio_init_best_codec(da); + } da->start = new_segment->start; da->end = new_segment->end; -- cgit v1.2.3