diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-03-27 13:52:08 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-27 13:59:39 +0400 |
commit | 6999f8bcf56bb167124bf85bdaa89090acdd5d9c (patch) | |
tree | 5bfb541bec48db787901f2441bd887d3629737ea /libavformat/utils.c | |
parent | ab31db06103c6ac0c1bd1f9fdfa93220d8801e19 (diff) | |
parent | 904100e5fc13dacc954b1d093bf87bc44f4e7a7b (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
make av_interleaved_write_frame() flush packets when pkt is NULL
mpegts: Fix dead error checks
vc1: Do not read from array if index is invalid.
targa: convert to bytestream2.
rv34: set mb_num_left to 0 after finishing a frame
Conflicts:
libavcodec/targa.c
libavcodec/vc1data.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r-- | libavformat/utils.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index 2989a08fc0..0f8b940566 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3481,24 +3481,30 @@ static int interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, in } int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){ - AVStream *st= s->streams[ pkt->stream_index]; - int ret; + int ret, flush = 0; - //FIXME/XXX/HACK drop zero sized packets - if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO && pkt->size==0) - return 0; + if (pkt) { + AVStream *st= s->streams[ pkt->stream_index]; - av_dlog(s, "av_interleaved_write_frame size:%d dts:%"PRId64" pts:%"PRId64"\n", - pkt->size, pkt->dts, pkt->pts); - if((ret = compute_pkt_fields2(s, st, pkt)) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) - return ret; + //FIXME/XXX/HACK drop zero sized packets + if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO && pkt->size==0) + return 0; - if(pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) - return AVERROR(EINVAL); + av_dlog(s, "av_interleaved_write_frame size:%d dts:%"PRId64" pts:%"PRId64"\n", + pkt->size, pkt->dts, pkt->pts); + if((ret = compute_pkt_fields2(s, st, pkt)) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) + return ret; + + if(pkt->dts == AV_NOPTS_VALUE && !(s->oformat->flags & AVFMT_NOTIMESTAMPS)) + return AVERROR(EINVAL); + } else { + av_dlog(s, "av_interleaved_write_frame FLUSH\n"); + flush = 1; + } for(;;){ AVPacket opkt; - int ret= interleave_packet(s, &opkt, pkt, 0); + int ret= interleave_packet(s, &opkt, pkt, flush); if(ret<=0) //FIXME cleanup needed for ret<0 ? return ret; |