1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-26 09:02:38 +00:00

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.
This commit is contained in:
wm4 2019-05-24 20:18:55 +02:00
parent 6d11668a9c
commit f53f9b89b1
2 changed files with 6 additions and 2 deletions

View File

@ -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

View File

@ -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;