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

Fixes Ticket3658

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/76/merge
Michael Niedermayer 11 years ago
parent 40e938a7ed
commit 27856b2fe9
  1. 13
      ffmpeg.c

@ -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;

Loading…
Cancel
Save