summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/options.rst3
-rw-r--r--demux/demux.c5
2 files changed, 6 insertions, 2 deletions
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index 0170dc0ae0..cf8ff21f85 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -561,7 +561,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.
+ audio, 0 for lossless audio. As a hack, it sets it to 2 for Opus, which
+ requires this for unknown reasons.
``--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 481b87e0c7..028f6dcef3 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -953,8 +953,11 @@ static void demux_add_sh_stream_locked(struct demux_internal *in,
switch (ds->type) {
case STREAM_AUDIO:
ds->back_preroll = in->opts->audio_back_preroll;
- if (ds->back_preroll < 0) // auto
+ 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)
+ ds->back_preroll = 2;
+ }
break;
case STREAM_VIDEO:
ds->back_preroll = in->opts->video_back_preroll;