X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Faudiointerleave.c;h=dea5d99821cd07eca66a6c417d449c928febfdcc;hb=022fa7a24ea8f5000e7b6a50e57cc752f417da47;hp=6d4954befed710b3d7a5f072b589d8d7235e78b4;hpb=44df2e858889ab8e41d6a9f403433d7adc304bbe;p=ffmpeg diff --git a/libavformat/audiointerleave.c b/libavformat/audiointerleave.c index 6d4954befed..dea5d99821c 100644 --- a/libavformat/audiointerleave.c +++ b/libavformat/audiointerleave.c @@ -81,15 +81,19 @@ static int interleave_new_audio_packet(AVFormatContext *s, AVPacket *pkt, 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); + int frame_size = *aic->samples * aic->sample_size; + int size = FFMIN(av_fifo_size(aic->fifo), frame_size); if (!size || (!flush && size == av_fifo_size(aic->fifo))) return 0; - ret = av_new_packet(pkt, size); + ret = av_new_packet(pkt, frame_size); if (ret < 0) return ret; av_fifo_generic_read(aic->fifo, pkt->data, size, NULL); + if (size < pkt->size) + memset(pkt->data + size, 0, pkt->size - size); + pkt->dts = pkt->pts = aic->dts; pkt->duration = av_rescale_q(*aic->samples, st->time_base, aic->time_base); pkt->stream_index = stream_index; @@ -99,7 +103,7 @@ static int interleave_new_audio_packet(AVFormatContext *s, AVPacket *pkt, if (!*aic->samples) aic->samples = aic->samples_per_frame; - return size; + return pkt->size; } int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush,