# HG changeset patch # User michael # Date 1264892112 0 # Node ID 529c473fe20e797003a1cf642f4126e6360eaf14 # Parent 4f20f4db87f76683da9df88545f4bad9501a600c Flag to ignore dts on frames that contain pts. This works around common issues with mpeg-ps files with broken timestamps. Also allows playing the broken sample from issue1024. diff -r 4f20f4db87f7 -r 529c473fe20e avformat.h --- a/avformat.h Sat Jan 30 22:05:26 2010 +0000 +++ b/avformat.h Sat Jan 30 22:55:12 2010 +0000 @@ -604,6 +604,7 @@ #define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames. #define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index. #define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input. +#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS int loop_input; /** decoding: size of data to probe; encoding: unused. */ diff -r 4f20f4db87f7 -r 529c473fe20e options.c --- a/options.c Sat Jan 30 22:05:26 2010 +0000 +++ b/options.c Sat Jan 30 22:55:12 2010 +0000 @@ -46,6 +46,7 @@ {"fflags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, D|E, "fflags"}, {"ignidx", "ignore index", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNIDX, INT_MIN, INT_MAX, D, "fflags"}, {"genpts", "generate pts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_GENPTS, INT_MIN, INT_MAX, D, "fflags"}, +{"igndts", "ingore dts", 0, FF_OPT_TYPE_CONST, AVFMT_FLAG_IGNDTS, INT_MIN, INT_MAX, D, "fflags"}, #if LIBAVFORMAT_VERSION_INT < (53<<16) {"track", " set the track number", OFFSET(track), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, E}, {"year", "set the year", OFFSET(year), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, E}, diff -r 4f20f4db87f7 -r 529c473fe20e utils.c --- a/utils.c Sat Jan 30 22:05:26 2010 +0000 +++ b/utils.c Sat Jan 30 22:55:12 2010 +0000 @@ -808,6 +808,9 @@ int num, den, presentation_delayed, delay, i; int64_t offset; + if((s->flags & AVFMT_FLAG_IGNDTS) && pkt->pts != AV_NOPTS_VALUE) + pkt->dts= AV_NOPTS_VALUE; + if (st->codec->codec_id != CODEC_ID_H264 && pc && pc->pict_type == FF_B_TYPE) //FIXME Set low_delay = 0 when has_b_frames = 1 st->codec->has_b_frames = 1;