summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-11-21 20:53:10 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-11-21 20:53:10 +0200
commit74b7dcc5f4d9be7293b78fced5ce888bb94c08dc (patch)
treee7b3c4da431f6e73ca858a4731f2883651bce697 /libmpdemux
parent4aff125b35984e7777d06edccdceeb28e531b907 (diff)
downloadmpv-74b7dcc5f4d9be7293b78fced5ce888bb94c08dc.tar.bz2
mpv-74b7dcc5f4d9be7293b78fced5ce888bb94c08dc.tar.xz
core: Add support for decoder reordering of pts values
Add a mode where libavcodec's reordered_opaque feature is used to associate container packet timestamps with decoded frames. This should improve behavior at least for MPEG files with interlaced h264; the previous code does not cope well with the libavformat demuxer producing two field packets with separate timestamps but the libavcodec h264 decoder only producing a single output frame for those two packets (so half the timestamps have no associated output frame). The current libavformat mpeg demuxer seems to finally work with interlaced h264 files and produce valid timestamps which are useful with a mode like this. By default MPlayer now selects between this new mode and the old one automatically based on the number of timestamp problems they cause; by default the new mode is used if both seem to work. The new option -pts-association-mode can be used to force a particular mode. If correct-pts mode is disabled this has no effect on timing. Also remove the "EXPERIMENTAL" marker from the manpage description of -correct-pts.
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/stheader.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/libmpdemux/stheader.h b/libmpdemux/stheader.h
index 4ba42855cd..9b43f21dfd 100644
--- a/libmpdemux/stheader.h
+++ b/libmpdemux/stheader.h
@@ -93,6 +93,13 @@ typedef struct sh_video {
double last_pts;
double buffered_pts[20];
int num_buffered_pts;
+ double codec_reordered_pts;
+ double prev_codec_reordered_pts;
+ int num_reordered_pts_problems;
+ double sorted_pts;
+ double prev_sorted_pts;
+ int num_sorted_pts_problems;
+ int pts_assoc_mode;
// output format: (set by demuxer)
float fps; // frames per second (set only if constant fps)
float frametime; // 1/fps