hwcontext: allocate the destination frame for the pool size
authorAnton Khirnov <anton@khirnov.net>
Fri, 15 Apr 2016 08:44:02 +0000 (10:44 +0200)
committerAnton Khirnov <anton@khirnov.net>
Tue, 28 Jun 2016 06:31:28 +0000 (08:31 +0200)
The source frame may be cropped, so that its dimensions are smaller than
the pool dimensions. The transfer_data API requires the allocated size
of the destination frame to be the same as the pool size.

libavutil/hwcontext.c

index 96b316a..b47ef44 100644 (file)
@@ -321,6 +321,7 @@ int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ref,
 
 static int transfer_data_alloc(AVFrame *dst, const AVFrame *src, int flags)
 {
+    AVHWFramesContext *ctx = (AVHWFramesContext*)src->hw_frames_ctx->data;
     AVFrame *frame_tmp;
     int ret = 0;
 
@@ -343,8 +344,8 @@ static int transfer_data_alloc(AVFrame *dst, const AVFrame *src, int flags)
         frame_tmp->format = formats[0];
         av_freep(&formats);
     }
-    frame_tmp->width  = src->width;
-    frame_tmp->height = src->height;
+    frame_tmp->width  = ctx->width;
+    frame_tmp->height = ctx->height;
 
     ret = av_frame_get_buffer(frame_tmp, 32);
     if (ret < 0)
@@ -354,6 +355,9 @@ static int transfer_data_alloc(AVFrame *dst, const AVFrame *src, int flags)
     if (ret < 0)
         goto fail;
 
+    frame_tmp->width  = src->width;
+    frame_tmp->height = src->height;
+
     av_frame_move_ref(dst, frame_tmp);
 
 fail: