diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-05-03 14:17:54 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-05-03 14:52:03 +0200 |
commit | 2b7f595aca84d421767e9755ce81d8a621898264 (patch) | |
tree | 4d9387b90de010612d24e872119fd53c948bb41d | |
parent | 22dc25cb29ab7b84d6d03f56766a15b6556a7b11 (diff) | |
parent | 76d23f40314fc1dcd74a3d470b17782cc0ee5a3a (diff) | |
download | ffmpeg-2b7f595aca84d421767e9755ce81d8a621898264.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
avconv: do not send non-monotonous DTS to the muxers.
Conflicts:
ffmpeg_opt.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | ffmpeg.c | 19 | ||||
-rw-r--r-- | ffmpeg.h | 2 | ||||
-rw-r--r-- | ffmpeg_opt.c | 1 |
3 files changed, 22 insertions, 0 deletions
@@ -610,6 +610,25 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost) bsfc = bsfc->next; } + if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS) && + ost->last_mux_dts != AV_NOPTS_VALUE && + pkt->dts < ost->last_mux_dts + !(s->oformat->flags & AVFMT_TS_NONSTRICT)) { + av_log(NULL, AV_LOG_WARNING, "Non-monotonous DTS in output stream " + "%d:%d; previous: %"PRId64", current: %"PRId64"; ", + ost->file_index, ost->st->index, ost->last_mux_dts, pkt->dts); + if (exit_on_error) { + av_log(NULL, AV_LOG_FATAL, "aborting.\n"); + exit(1); + } + av_log(NULL, AV_LOG_WARNING, "changing to %"PRId64". This may result " + "in incorrect timestamps in the output file.\n", + ost->last_mux_dts + 1); + pkt->dts = ost->last_mux_dts + 1; + if (pkt->pts != AV_NOPTS_VALUE) + pkt->pts = FFMAX(pkt->pts, pkt->dts); + } + ost->last_mux_dts = pkt->dts; + pkt->stream_index = ost->index; if (debug_ts) { @@ -320,6 +320,8 @@ typedef struct OutputStream { /* pts of the first frame encoded for this stream, used for limiting * recording time */ int64_t first_pts; + /* dts of the last packet sent to the muxer */ + int64_t last_mux_dts; AVBitStreamFilterContext *bitstream_filters; AVCodec *enc; int64_t max_frames; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index b27a2c3e2c..ff80c8ab44 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -1089,6 +1089,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e input_streams[source_index]->discard = 0; input_streams[source_index]->st->discard = AVDISCARD_NONE; } + ost->last_mux_dts = AV_NOPTS_VALUE; return ost; } |