X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Faudiointerleave.c;h=ba78d4e9884ce4892626c1d1ae797019b7373f96;hb=fcae9f212a6001d966c52dc22cd4b22e9851b428;hp=e48f826e1466eaf163b2986e7d2e855cb86ade20;hpb=0ebcdf5cdad6bf20a5170735a7f77b23ecc081ac;p=ffmpeg diff --git a/libavformat/audiointerleave.c b/libavformat/audiointerleave.c index e48f826e146..ba78d4e9884 100644 --- a/libavformat/audiointerleave.c +++ b/libavformat/audiointerleave.c @@ -70,17 +70,19 @@ int ff_audio_interleave_init(AVFormatContext *s, return 0; } -static int ff_interleave_new_audio_packet(AVFormatContext *s, AVPacket *pkt, - int stream_index, int flush) +static int interleave_new_audio_packet(AVFormatContext *s, AVPacket *pkt, + int stream_index, int flush) { AVStream *st = s->streams[stream_index]; AudioInterleaveContext *aic = st->priv_data; - + int ret; int size = FFMIN(av_fifo_size(aic->fifo), *aic->samples * aic->sample_size); if (!size || (!flush && size == av_fifo_size(aic->fifo))) return 0; - av_new_packet(pkt, size); + ret = av_new_packet(pkt, size); + if (ret < 0) + return ret; av_fifo_generic_read(aic->fifo, pkt->data, size, NULL); pkt->dts = pkt->pts = aic->dts; @@ -99,7 +101,7 @@ int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt int (*get_packet)(AVFormatContext *, AVPacket *, AVPacket *, int), int (*compare_ts)(AVFormatContext *, AVPacket *, AVPacket *)) { - int i; + int i, ret; if (pkt) { AVStream *st = s->streams[pkt->stream_index]; @@ -116,7 +118,8 @@ int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt // rewrite pts and dts to be decoded time line position pkt->pts = pkt->dts = aic->dts; aic->dts += pkt->duration; - ff_interleave_add_packet(s, pkt, compare_ts); + if ((ret = ff_interleave_add_packet(s, pkt, compare_ts)) < 0) + return ret; } pkt = NULL; } @@ -125,10 +128,11 @@ int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt AVStream *st = s->streams[i]; if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) { AVPacket new_pkt; - while (ff_interleave_new_audio_packet(s, &new_pkt, i, flush)) - ff_interleave_add_packet(s, &new_pkt, compare_ts); + while (interleave_new_audio_packet(s, &new_pkt, i, flush)) + if ((ret = ff_interleave_add_packet(s, &new_pkt, compare_ts)) < 0) + return ret; } } - return get_packet(s, out, pkt, flush); + return get_packet(s, out, NULL, flush); }