avformat/audiointerleave: pad last audio frame
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user