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:
parent
6d11668a9c
commit
f53f9b89b1
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user