[FFmpeg-cvslog] lavc: use AVFrame API properly in pad_last_frame().

Anton Khirnov git at videolan.org
Tue Jun 11 09:34:52 CEST 2013


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Tue Jun  4 19:01:22 2013 +0200| [799f57ac96f9891d1a0f7d6c4b218ed536e8aca5] | committer: Anton Khirnov

lavc: use AVFrame API properly in pad_last_frame().

This also simplifies the code.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=799f57ac96f9891d1a0f7d6c4b218ed536e8aca5
---

 libavcodec/utils.c |   23 ++++++++---------------
 1 file changed, 8 insertions(+), 15 deletions(-)

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 8a19393..accb6b3 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -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;
 }
 



More information about the ffmpeg-cvslog mailing list