From 65d8709152c5e3942e1a4db958be7cae80ea05b0 Mon Sep 17 00:00:00 2001 From: wm4 Date: Sun, 14 Jul 2013 23:44:50 +0200 Subject: demux_lavf: add terrible hack to make DVD playback just work 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. --- core/options.h | 1 + 1 file changed, 1 insertion(+) (limited to 'core') diff --git a/core/options.h b/core/options.h index d7c3bd715e..1088ee78c1 100644 --- a/core/options.h +++ b/core/options.h @@ -223,6 +223,7 @@ typedef struct MPOpts { char *format; char *cryptokey; char *avopt; + int genptsmode; } lavfdopts; struct input_conf { -- cgit v1.2.3