summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/options.rst11
-rw-r--r--demux/demux.c4
2 files changed, 5 insertions, 10 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index f0d138ec1c..0a081c3363 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -493,13 +493,6 @@ Playback Control
framestep commands are transposed. Backstepping will perform very
expensive work to step forward by 1 frame.
- - Backward playback with Vorbis does not work. libavcodec's decoder
- discards the first Vorbis packet (after each decoder reset), and the
- mechanism behind ``--audio-reversal-buffer`` assumes that it strictly
- outputs a frame for each packet fed to it (the mechanism discards output
- based on frame count, not timestamps). Since this tries to decode each
- frame on its own, the player never gets a usable audio frame.
-
Tuning:
- Remove all ``--vf``/``--af`` filters you have set. Disable deinterlacing.
@@ -565,8 +558,8 @@ Playback Control
The solution is to feed a previous packet to the decoder each time, and then
discard the output. This option controls how many packets to feed. The
``auto`` choice is currently hardcoded to 0 for video, and uses 1 for lossy
- audio, 0 for lossless audio. As a hack, it sets it to 2 for Opus, which
- requires this for unknown reasons.
+ audio, 0 for lossless audio. For some specific lossy audio codecs, this is
+ set to 2.
``--video-backward-overlap`` can potentially handle intra-refresh video,
depending on the exact conditions. You may have to use the
diff --git a/demux/demux.c b/demux/demux.c
index 9cbc88cf62..f65d606b92 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -949,7 +949,9 @@ static void demux_add_sh_stream_locked(struct demux_internal *in,
ds->back_preroll = in->opts->audio_back_preroll;
if (ds->back_preroll < 0) { // auto
ds->back_preroll = mp_codec_is_lossless(sh->codec->codec) ? 0 : 1;
- if (sh->codec->codec && strcmp(sh->codec->codec, "opus") == 0)
+ if (sh->codec->codec && (strcmp(sh->codec->codec, "opus") == 0 ||
+ strcmp(sh->codec->codec, "vorbis") == 0 ||
+ strcmp(sh->codec->codec, "mp3") == 0))
ds->back_preroll = 2;
}
break;