From f62bb216ac4cfbbff16108c6bac35a0282532972 Mon Sep 17 00:00:00 2001 From: Mark Thompson Date: Fri, 15 Apr 2016 10:58:51 +0100 Subject: [PATCH] hwcontext_vaapi: allow transfers to/from any size of sw frame The hw frame used as reference has an attached size but it need not match the actual size of the surface, so enforcing that the sw frame used in copying matches its size exactly is not useful. Signed-off-by: Anton Khirnov --- libavutil/hwcontext_vaapi.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 1bdc4cbc1ae..ee5ce5d0753 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -770,6 +770,9 @@ static int vaapi_transfer_data_from(AVHWFramesContext *hwfc, AVFrame *map; int err; + if (dst->width > hwfc->width || dst->height > hwfc->height) + return AVERROR(EINVAL); + map = av_frame_alloc(); if (!map) return AVERROR(ENOMEM); @@ -779,6 +782,9 @@ static int vaapi_transfer_data_from(AVHWFramesContext *hwfc, if (err) goto fail; + map->width = dst->width; + map->height = dst->height; + err = av_frame_copy(dst, map); if (err) goto fail; @@ -795,6 +801,9 @@ static int vaapi_transfer_data_to(AVHWFramesContext *hwfc, AVFrame *map; int err; + if (src->width > hwfc->width || src->height > hwfc->height) + return AVERROR(EINVAL); + map = av_frame_alloc(); if (!map) return AVERROR(ENOMEM); @@ -804,6 +813,9 @@ static int vaapi_transfer_data_to(AVHWFramesContext *hwfc, if (err) goto fail; + map->width = src->width; + map->height = src->height; + err = av_frame_copy(map, src); if (err) goto fail; -- 2.39.2