mirror of https://github.com/mpv-player/mpv
e6afc53e7c
Before this change, mpv used to get the total duration from `avformat_find_stream_info` and used the per-track duration as a fallback. This change reverses this order of preference. The timestamps returned by `avformat_find_stream_info` are truncated or rounded or floored (depending on the decoder) at the 6th decimal place. For e.g. `avformat_find_stream_info` may return us a duration like 44.138667, whereas the duration we get from the per-track struct has a higher degree of precision like 44.13866666666... and so on. This caused various problems such as the playback_pts being a bigger value than the duration, which would cause time-remaining to be a negative value in some cases. Or cause you to reach a negative starting timestamp when looping on an audio file with `gapless-audio`. Moreover, we already skipped calling `avformat_find_stream_info` for mp4, so we had already been utilizing this per-track fallback method for finding the duration for mp4 files. It should be noted that while this change is only required for audio-only formats, there is no harm in doing this for videos as well. |
||
---|---|---|
.. | ||
cache.c | ||
cache.h | ||
codec_tags.c | ||
codec_tags.h | ||
cue.c | ||
cue.h | ||
demux.c | ||
demux.h | ||
demux_cue.c | ||
demux_disc.c | ||
demux_edl.c | ||
demux_lavf.c | ||
demux_libarchive.c | ||
demux_mf.c | ||
demux_mkv.c | ||
demux_mkv_timeline.c | ||
demux_null.c | ||
demux_playlist.c | ||
demux_raw.c | ||
demux_timeline.c | ||
ebml.c | ||
ebml.h | ||
matroska.h | ||
packet.c | ||
packet.h | ||
stheader.h | ||
timeline.c | ||
timeline.h |