mirror of
https://github.com/mpv-player/mpv
synced 2025-01-30 11:42:04 +00:00
65d8709152
DVD playback had some trouble with PTS resets: libavformat's genpts feature would try reading until EOF (worst case) to find a new usable PTS in case a packet's PTS is not set correctly. Especially with slow DVD access, this would make the player to appear frozen. Reimplement it partially in demux_lavf.c, and use that code in the DVD case. This is heavily "inspired" by the code in av_read_frame from libavformat/utils.c. The difference is that we stop reading if no PTS has been found after 50 packets (consider this a heuristic). Also, we don't bother with the PTS wrapping and last-frame-before-EOF handling. Even with normal PTS wraps, the player frontend will go to hell for the duration of a frame anyway, and should recover quickly after that. The terribleness of this commit is mostly that we duplicate libavformat functionality, and that we suddenly need a packet queue. |
||
---|---|---|
.. | ||
input | ||
timeline | ||
asxparser.c | ||
asxparser.h | ||
av_common.c | ||
av_common.h | ||
av_log.c | ||
av_log.h | ||
av_opts.c | ||
av_opts.h | ||
bstr.c | ||
bstr.h | ||
charset_conv.c | ||
charset_conv.h | ||
codecs.c | ||
codecs.h | ||
command.c | ||
command.h | ||
cpudetect.c | ||
cpudetect.h | ||
encode_lavc.c | ||
encode_lavc.h | ||
encode.h | ||
m_config.c | ||
m_config.h | ||
m_option.c | ||
m_option.h | ||
m_property.c | ||
m_property.h | ||
m_struct.c | ||
m_struct.h | ||
mp_common.c | ||
mp_common.h | ||
mp_core.h | ||
mp_memory_barrier.h | ||
mp_msg.c | ||
mp_msg.h | ||
mp_osd.h | ||
mp_ring.c | ||
mp_ring.h | ||
mp_talloc.h | ||
mplayer.c | ||
options.c | ||
options.h | ||
parser-cfg.c | ||
parser-cfg.h | ||
parser-mpcmd.c | ||
parser-mpcmd.h | ||
path.c | ||
path.h | ||
playlist_parser.c | ||
playlist_parser.h | ||
playlist.c | ||
playlist.h | ||
resolve_quvi9.c | ||
resolve_quvi.c | ||
resolve.h | ||
screenshot.c | ||
screenshot.h | ||
subopt-helper.c | ||
subopt-helper.h | ||
version.c |