mirror of https://github.com/mpv-player/mpv
demux_lavf: mark AVI timestamps non-pts to avoid messages
Playing AVI files containing B-frames with demux_lavf printed two "decreasing pts" info messages at the start of the file. We know the timestamps from AVI won't be valid pts, so add a demuxer field to convey that information to the timing code and make that not even try to use the timestamps as valid pts.
This commit is contained in:
parent
7eb48343d4
commit
fdea095e34
|
@ -521,6 +521,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
|
||||||
/* for avi libavformat returns the avi timestamps in .dts,
|
/* for avi libavformat returns the avi timestamps in .dts,
|
||||||
* some made-up stuff that's not really pts in .pts */
|
* some made-up stuff that's not really pts in .pts */
|
||||||
priv->use_dts = true;
|
priv->use_dts = true;
|
||||||
|
demuxer->timestamp_type = TIMESTAMP_TYPE_SORT;
|
||||||
} else {
|
} else {
|
||||||
if (opts->user_correct_pts != 0)
|
if (opts->user_correct_pts != 0)
|
||||||
avfc->flags |= AVFMT_FLAG_GENPTS;
|
avfc->flags |= AVFMT_FLAG_GENPTS;
|
||||||
|
|
|
@ -99,6 +99,11 @@ struct MPOpts;
|
||||||
|
|
||||||
#define MP_NOPTS_VALUE (-1LL<<63) //both int64_t and double should be able to represent this exactly
|
#define MP_NOPTS_VALUE (-1LL<<63) //both int64_t and double should be able to represent this exactly
|
||||||
|
|
||||||
|
enum timestamp_type {
|
||||||
|
TIMESTAMP_TYPE_PTS,
|
||||||
|
TIMESTAMP_TYPE_SORT,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// DEMUXER control commands/answers
|
// DEMUXER control commands/answers
|
||||||
#define DEMUXER_CTRL_NOTIMPL -1
|
#define DEMUXER_CTRL_NOTIMPL -1
|
||||||
|
@ -249,6 +254,7 @@ typedef struct demuxer {
|
||||||
/* Set if using absolute seeks for small movements is OK (no pts resets
|
/* Set if using absolute seeks for small movements is OK (no pts resets
|
||||||
* that would make pts ambigious, preferably supports back/forward flags */
|
* that would make pts ambigious, preferably supports back/forward flags */
|
||||||
bool accurate_seek;
|
bool accurate_seek;
|
||||||
|
enum timestamp_type timestamp_type;
|
||||||
//
|
//
|
||||||
demux_stream_t *audio; // audio buffer/demuxer
|
demux_stream_t *audio; // audio buffer/demuxer
|
||||||
demux_stream_t *video; // video buffer/demuxer
|
demux_stream_t *video; // video buffer/demuxer
|
||||||
|
|
|
@ -2526,7 +2526,8 @@ static void determine_frame_pts(struct MPContext *mpctx)
|
||||||
if (opts->user_pts_assoc_mode) {
|
if (opts->user_pts_assoc_mode) {
|
||||||
sh_video->pts_assoc_mode = opts->user_pts_assoc_mode;
|
sh_video->pts_assoc_mode = opts->user_pts_assoc_mode;
|
||||||
} else if (sh_video->pts_assoc_mode == 0) {
|
} else if (sh_video->pts_assoc_mode == 0) {
|
||||||
if (sh_video->codec_reordered_pts != MP_NOPTS_VALUE)
|
if (mpctx->d_video->demuxer->timestamp_type == TIMESTAMP_TYPE_PTS
|
||||||
|
&& sh_video->codec_reordered_pts != MP_NOPTS_VALUE)
|
||||||
sh_video->pts_assoc_mode = 1;
|
sh_video->pts_assoc_mode = 1;
|
||||||
else
|
else
|
||||||
sh_video->pts_assoc_mode = 2;
|
sh_video->pts_assoc_mode = 2;
|
||||||
|
|
Loading…
Reference in New Issue