summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/options.rst2
-rw-r--r--player/audio.c6
2 files changed, 7 insertions, 1 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 52f179051d..99c02d7fe6 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -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::
diff --git a/player/audio.c b/player/audio.c
index 308b27aec1..161e3d7c69 100644
--- a/player/audio.c
+++ b/player/audio.c
@@ -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;