lavc: use AVFrame API properly in pad_last_frame().

This also simplifies the code.
This commit is contained in:
Anton Khirnov 2013-06-04 19:01:22 +02:00
parent 8835c554ff
commit 799f57ac96

View File

@ -1119,26 +1119,22 @@ int ff_alloc_packet(AVPacket *avpkt, int size)
static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src)
{
AVFrame *frame = NULL;
uint8_t *buf = NULL;
int ret;
if (!(frame = avcodec_alloc_frame()))
return AVERROR(ENOMEM);
*frame = *src;
if ((ret = av_samples_get_buffer_size(&frame->linesize[0], s->channels,
s->frame_size, s->sample_fmt, 0)) < 0)
frame->format = src->format;
frame->channel_layout = src->channel_layout;
frame->nb_samples = s->frame_size;
ret = av_frame_get_buffer(frame, 32);
if (ret < 0)
goto fail;
if (!(buf = av_malloc(ret))) {
ret = AVERROR(ENOMEM);
ret = av_frame_copy_props(frame, src);
if (ret < 0)
goto fail;
}
frame->nb_samples = s->frame_size;
if ((ret = avcodec_fill_audio_frame(frame, s->channels, s->sample_fmt,
buf, ret, 0)) < 0)
goto fail;
if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0,
src->nb_samples, s->channels, s->sample_fmt)) < 0)
goto fail;
@ -1152,10 +1148,7 @@ static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src)
return 0;
fail:
if (frame->extended_data != frame->data)
av_freep(&frame->extended_data);
av_freep(&buf);
av_freep(&frame);
av_frame_free(&frame);
return ret;
}