[FFmpeg-cvslog] hwcontext_vaapi: allow transfers to/from any size of sw frame
Mark Thompson
git at videolan.org
Sun Nov 13 23:37:18 EET 2016
ffmpeg | branch: master | Mark Thompson <sw at jkqxz.net> | Fri Apr 15 10:58:51 2016 +0100| [f62bb216ac4cfbbff16108c6bac35a0282532972] | committer: Anton Khirnov
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 <anton at khirnov.net>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f62bb216ac4cfbbff16108c6bac35a0282532972
---
libavutil/hwcontext_vaapi.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c
index 1bdc4cb..ee5ce5d 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;
More information about the ffmpeg-cvslog
mailing list