mirror of
https://github.com/mpv-player/mpv
synced 2024-12-26 09:02:38 +00:00
demux_mkv: add hack to fix opus gapless behavior
I think the conclusion is that AV_PKT_DATA_SKIP_SAMPLES is misdesigned (at least for some formats), and an alternative mechanism using durations would be better. (Combining it with a proper timebase would keep sample-accuracy.)
This commit is contained in:
parent
3ca0208566
commit
943f76e6ce
@ -1679,6 +1679,12 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
|
|||||||
AV_WL32(data + 10, track->a_osfreq);
|
AV_WL32(data + 10, track->a_osfreq);
|
||||||
// Bogus: last frame won't be played.
|
// Bogus: last frame won't be played.
|
||||||
AV_WL32(data + 14, 0);
|
AV_WL32(data + 14, 0);
|
||||||
|
} else if (strcmp(codec, "opus")) {
|
||||||
|
// Hardcode the rate libavcodec's opus decoder outputs, so that
|
||||||
|
// AV_PKT_DATA_SKIP_SAMPLES actually works. The Matroska header only
|
||||||
|
// has an arbitrary "input" samplerate, while libavcodec is fixed to
|
||||||
|
// output 48000.
|
||||||
|
sh_a->samplerate = 48000;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some files have broken default DefaultDuration set, which will lead to
|
// Some files have broken default DefaultDuration set, which will lead to
|
||||||
|
Loading…
Reference in New Issue
Block a user