diff options
author | Mark Thompson <sw@jkqxz.net> | 2018-03-11 21:25:46 +0000 |
---|---|---|
committer | Mark Thompson <sw@jkqxz.net> | 2018-03-22 23:18:57 +0000 |
commit | ca9f13bbce4836f44fbc18bb30a350fea4075e08 (patch) | |
tree | 7e93ad68d3a6b2a242e2ca7a3129abd9f614b706 /libavutil | |
parent | c6bbb8cca7fa72bb26d2000453460a6344f425a1 (diff) | |
download | ffmpeg-ca9f13bbce4836f44fbc18bb30a350fea4075e08.tar.gz |
hwcontext_vaapi: Pass correct read/write flags when exporting surfaces
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/hwcontext_vaapi.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libavutil/hwcontext_vaapi.c b/libavutil/hwcontext_vaapi.c index 998e954c44..53a5b02822 100644 --- a/libavutil/hwcontext_vaapi.c +++ b/libavutil/hwcontext_vaapi.c @@ -1095,15 +1095,20 @@ static int vaapi_map_to_drm_esh(AVHWFramesContext *hwfc, AVFrame *dst, VAStatus vas; VADRMPRIMESurfaceDescriptor va_desc; AVDRMFrameDescriptor *drm_desc = NULL; + uint32_t export_flags; int err, i, j; surface_id = (VASurfaceID)(uintptr_t)src->data[3]; + export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS; + if (flags & AV_HWFRAME_MAP_READ) + export_flags |= VA_EXPORT_SURFACE_READ_ONLY; + if (flags & AV_HWFRAME_MAP_WRITE) + export_flags |= VA_EXPORT_SURFACE_WRITE_ONLY; + vas = vaExportSurfaceHandle(hwctx->display, surface_id, VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2, - VA_EXPORT_SURFACE_READ_ONLY | - VA_EXPORT_SURFACE_SEPARATE_LAYERS, - &va_desc); + export_flags, &va_desc); if (vas != VA_STATUS_SUCCESS) { if (vas == VA_STATUS_ERROR_UNIMPLEMENTED) return AVERROR(ENOSYS); |