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.) --- video/decode/dec_video.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'video/decode') diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c index 0dc51943bc..ed7cd875ea 100644 --- a/video/decode/dec_video.c +++ b/video/decode/dec_video.c @@ -459,12 +459,15 @@ void video_work(struct dec_video *d_video) struct demux_packet *new_segment = d_video->new_segment; d_video->new_segment = NULL; - // Could avoid decoder reinit; would still need flush. - d_video->codec = new_segment->codec; - if (d_video->vd_driver) - d_video->vd_driver->uninit(d_video); - d_video->vd_driver = NULL; - video_init_best_codec(d_video); + if (d_video->codec == new_segment->codec) { + video_reset(d_video); + } else { + d_video->codec = new_segment->codec; + if (d_video->vd_driver) + d_video->vd_driver->uninit(d_video); + d_video->vd_driver = NULL; + video_init_best_codec(d_video); + } d_video->start = new_segment->start; d_video->end = new_segment->end; -- cgit v1.2.3