1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-23 03:37:27 +00:00

audio: do not try gapless if video is still ongoing

In this case, gapless will most likely not work. It will result in (very
slight) desync, or (more commonly with small buffer sizes), in an
underflow.

I think it would be legitimate to disable gapless at end of playback
completely if video is enabled at all. But this would need an exception
for cover art mode, so I guess the current solution is OK as well.
This commit is contained in:
wm4 2019-10-06 20:28:55 +02:00
parent e38b0b245e
commit e5a97ef27f
2 changed files with 7 additions and 1 deletions

View File

@ -1798,6 +1798,8 @@ Audio
an implementation detail, and can change from version to version.
Currently, the device is kept even if the sample format changes,
but the sample formats are convertible.
If video is still going on when there is still audio, trying to use
gapless is also explicitly given up.
.. note::

View File

@ -980,7 +980,11 @@ void fill_audio_out_buffers(struct MPContext *mpctx)
// With gapless audio, delay this to ao_uninit. There must be only
// 1 final chunk, and that is handled when calling ao_uninit().
if (audio_eof && !opts->gapless_audio)
// If video is still on-going, trying to do gapless is pointless, as video
// will have to continue for a while with audio stopped (but still try to
// do it if gapless is forced, mostly for testing).
if (audio_eof && (!opts->gapless_audio ||
(opts->gapless_audio <= 0 && mpctx->video_status != STATUS_EOF)))
playflags |= AOPLAY_FINAL_CHUNK;
uint8_t **planes;