1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-02-04 06:08:26 +02:00

ffmpeg: prevent pts < dts to be passed through to the muxer on stream copy

Fixes Ticket3658

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-06-05 18:37:32 +02:00
parent 40e938a7ed
commit 27856b2fe9

View File

@ -636,7 +636,8 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
bsfc = bsfc->next; bsfc = bsfc->next;
} }
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS) && if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
if(
(avctx->codec_type == AVMEDIA_TYPE_AUDIO || avctx->codec_type == AVMEDIA_TYPE_VIDEO) && (avctx->codec_type == AVMEDIA_TYPE_AUDIO || avctx->codec_type == AVMEDIA_TYPE_VIDEO) &&
pkt->dts != AV_NOPTS_VALUE && pkt->dts != AV_NOPTS_VALUE &&
ost->last_mux_dts != AV_NOPTS_VALUE) { ost->last_mux_dts != AV_NOPTS_VALUE) {
@ -657,6 +658,16 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
pkt->pts = FFMAX(pkt->pts, max); pkt->pts = FFMAX(pkt->pts, max);
pkt->dts = max; pkt->dts = max;
} }
}
if (pkt->dts != AV_NOPTS_VALUE &&
pkt->pts != AV_NOPTS_VALUE &&
pkt->dts > pkt->pts) {
av_log(s, AV_LOG_WARNING, "Invalid DTS: %"PRId64" PTS: %"PRId64" in output stream %d:%d\n",
pkt->dts, pkt->pts,
ost->file_index, ost->st->index);
pkt->pts = AV_NOPTS_VALUE;
pkt->dts = AV_NOPTS_VALUE;
}
} }
ost->last_mux_dts = pkt->dts; ost->last_mux_dts = pkt->dts;