diff options
author | Anton Khirnov <anton@khirnov.net> | 2013-04-24 08:34:44 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2014-06-12 09:31:11 +0200 |
commit | ba8ab4e7ae016cf970b0f335a7933f2db53784bc (patch) | |
tree | d496416988537c22c6d29a22440ade2da6569c85 /avconv.c | |
parent | e0fcad77618a0455ca9c2451ea0aa538597a08c0 (diff) | |
download | ffmpeg-ba8ab4e7ae016cf970b0f335a7933f2db53784bc.tar.gz |
avconv: do not send non-monotonous DTS to the muxers.
Hack partially based on a commit by Michael Niedermayer <michaelni@gmx.at>
Should fix (or work around) bug 458.
(cherry picked from commit 76d23f40314fc1dcd74a3d470b17782cc0ee5a3a)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'avconv.c')
-rw-r--r-- | avconv.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -346,6 +346,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; ret = av_interleaved_write_frame(s, pkt); if (ret < 0) { |