@@ -538,6 +538,12 @@ enum {
* be much lower than normal memory.
*/
AV_HWFRAME_MAP_DIRECT = 1 << 3,
+ /**
+ * The mapping must result in exactly one DRM layer, see
+ * AVDRMFrameDescriptor. For instance, an NV12 frame will have a single
+ * layer whose format is NV12.
+ */
+ AV_HWFRAME_MAP_DRM_COMPOSED_LAYERS = 1 << 4,
};
/**
@@ -1161,7 +1161,11 @@ static int vaapi_map_to_drm_esh(AVHWFramesContext *hwfc, AVFrame *dst,
surface_id = (VASurfaceID)(uintptr_t)src->data[3];
- export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS;
+ export_flags = 0;
+ if (flags & AV_HWFRAME_MAP_DRM_COMPOSED_LAYERS)
+ export_flags |= VA_EXPORT_SURFACE_COMPOSED_LAYERS;
+ else
+ 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)