[FFmpeg-cvslog] ff_get_buffer(): allocate the frame for max(coded, display) dimensions

Anton Khirnov git at videolan.org
Fri Apr 19 21:53:16 CEST 2013


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Feb 18 16:29:03 2013 +0100| [a7f46586bf47174b5fa00a905b767b1781ec8b72] | committer: Anton Khirnov

ff_get_buffer(): allocate the frame for max(coded,display) dimensions

Needed e.g. for h264 cropping to work properly.

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

 libavcodec/utils.c |   18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index dfb2f54..32ca703 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -555,10 +555,8 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
 
     switch (avctx->codec_type) {
     case AVMEDIA_TYPE_VIDEO:
-        if (!frame->width)
-            frame->width               = avctx->width;
-        if (!frame->height)
-            frame->height              = avctx->height;
+        frame->width  = FFMAX(avctx->width, avctx->coded_width);
+        frame->height = FFMAX(avctx->height, avctx->coded_height);
         if (frame->format < 0)
             frame->format              = avctx->pix_fmt;
         if (!frame->sample_aspect_ratio.num)
@@ -702,6 +700,9 @@ do {                                                                    \
 
         av_buffer_unref(&dummy_buf);
 
+        frame->width  = avctx->width;
+        frame->height = avctx->height;
+
         return 0;
 
 fail:
@@ -712,7 +713,14 @@ fail:
     }
 #endif
 
-    return avctx->get_buffer2(avctx, frame, flags);
+    ret = avctx->get_buffer2(avctx, frame, flags);
+
+    if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
+        frame->width  = avctx->width;
+        frame->height = avctx->height;
+    }
+
+    return ret;
 }
 
 int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)



More information about the ffmpeg-cvslog mailing list