diff options
-rw-r--r-- | DOCS/man/options.rst | 11 | ||||
-rw-r--r-- | demux/demux.c | 4 |
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; |