mirror of https://github.com/mpv-player/mpv
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.)
This commit is contained in:
parent
a55e8ff31c
commit
67467103e8
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue