[FFmpeg-cvslog] hwcontext: allocate the destination frame for the pool size
Anton Khirnov
git at videolan.org
Sun Nov 13 23:37:17 EET 2016
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Fri Apr 15 10:44:02 2016 +0200| [fdfe01365d579189d9a55b3741dba2ac46eb1df8] | committer: Anton Khirnov
hwcontext: allocate the destination frame for the pool size
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.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=fdfe01365d579189d9a55b3741dba2ac46eb1df8
---
libavutil/hwcontext.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/libavutil/hwcontext.c b/libavutil/hwcontext.c
index 96b316a..b47ef44 100644
--- a/libavutil/hwcontext.c
+++ b/libavutil/hwcontext.c
@@ -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:
More information about the ffmpeg-cvslog
mailing list