From 094aa84b03632370dde171935171321bbfa9548b Mon Sep 17 00:00:00 2001 From: James Zern Date: Thu, 26 May 2011 20:19:04 +0200 Subject: muxers: Add a flag to mark muxers that allow (non strict) monotone timestamps. --- libavformat/avformat.h | 3 +++ libavformat/matroskaenc.c | 2 +- libavformat/utils.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 1607a3092b..00fe8a6a45 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -262,6 +262,9 @@ typedef struct AVFormatParameters { #define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */ #define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fallback to binary search via read_timestamp */ #define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fallback to generic search */ +#define AVFMT_TS_NONSTRICT 0x8000 /**< Format does not require strictly + increasing timestamps, but they must + still be monotonic */ typedef struct AVOutputFormat { const char *name; diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index c3e203cb36..ae29765a4a 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1220,7 +1220,7 @@ AVOutputFormat ff_webm_muxer = { mkv_write_header, mkv_write_packet, mkv_write_trailer, - .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, + .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT, }; #endif diff --git a/libavformat/utils.c b/libavformat/utils.c index 3c9a89dc64..3432b2269f 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2993,7 +2993,7 @@ static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt){ pkt->dts= st->pts_buffer[0]; } - if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && st->cur_dts >= pkt->dts){ + if(st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && ((!(s->oformat->flags & AVFMT_TS_NONSTRICT) && st->cur_dts >= pkt->dts) || st->cur_dts > pkt->dts)){ av_log(s, AV_LOG_ERROR, "Application provided invalid, non monotonically increasing dts to muxer in stream %d: %"PRId64" >= %"PRId64"\n", st->index, st->cur_dts, pkt->dts); -- cgit v1.2.3