summaryrefslogtreecommitdiffstats
path: root/demux/demux.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2019-05-24 20:18:55 +0200
committerwm4 <wm4@nowhere>2019-09-19 20:37:04 +0200
commitf53f9b89b10bec6e6c5bcc1d8add0577698bd0e4 (patch)
treeacc2b712573f80b739e8fbe1a49fa78aeab82a4b /demux/demux.c
parent6d11668a9c448674ac04ef61bf902c867671d8db (diff)
downloadmpv-f53f9b89b10bec6e6c5bcc1d8add0577698bd0e4.tar.bz2
mpv-f53f9b89b10bec6e6c5bcc1d8add0577698bd0e4.tar.xz
demux: add a special case for backward demuxing of opus
Make --audio-backward-overlap default to 2 for Opus. I have no idea why this is needed. It seems to fix backward decoding though (going purely by listening). Normally, this should not be needed, since initial padding is completely contained within the first packet (normally, and in the case I tested). So the 2nd packet/frame should be fine, but for some unknown reason it works only with the 3rd.
Diffstat (limited to 'demux/demux.c')
-rw-r--r--demux/demux.c5
1 files changed, 4 insertions, 1 deletions
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;