X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmux.c;h=9ca5df4095640945f0bbdf609531c8d472e57f48;hb=8f66a2da38094cf09f9b6f109bcde251e8ec7795;hp=789c811cd85e56be05afd67e02a8321ac9588013;hpb=2cfb34a4e8b464d790513ad42860869677ef79d9;p=ffmpeg diff --git a/libavformat/mux.c b/libavformat/mux.c index 789c811cd85..9ca5df40956 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -554,6 +554,7 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket * if (st->cur_dts && st->cur_dts != AV_NOPTS_VALUE && ((!(s->oformat->flags & AVFMT_TS_NONSTRICT) && st->codec->codec_type != AVMEDIA_TYPE_SUBTITLE && + st->codec->codec_type != AVMEDIA_TYPE_DATA && 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: %s >= %s\n", @@ -1024,6 +1025,19 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) if (pkt) { AVStream *st = s->streams[pkt->stream_index]; + if (s->oformat->check_bitstream) { + if (!st->internal->bitstream_checked) { + if ((ret = s->oformat->check_bitstream(s, pkt)) < 0) + goto fail; + else if (ret == 1) + st->internal->bitstream_checked = 1; + } + } + + av_apply_bitstream_filters(st->codec, pkt, st->internal->bsfc); + if (pkt->size == 0 && pkt->side_data_elems == 0) + return 0; + if (s->debug & FF_FDEBUG_TS) av_log(s, AV_LOG_TRACE, "av_interleaved_write_frame size:%d dts:%s pts:%s\n", pkt->size, av_ts2str(pkt->dts), av_ts2str(pkt->pts)); @@ -1037,17 +1051,6 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt) ret = AVERROR(EINVAL); goto fail; } - - if (s->oformat->check_bitstream) { - if (!st->internal->bitstream_checked) { - if ((ret = s->oformat->check_bitstream(s, pkt)) < 0) - goto fail; - else if (ret == 1) - st->internal->bitstream_checked = 1; - } - } - - av_apply_bitstream_filters(st->codec, pkt, st->internal->bsfc); } else { av_log(s, AV_LOG_TRACE, "av_interleaved_write_frame FLUSH\n"); flush = 1;