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;
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];
// 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;
}
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);
}