diff options
author | Paul Kocialkowski <paul.kocialkowski@bootlin.com> | 2018-07-18 15:07:42 +0200 |
---|---|---|
committer | Paul Kocialkowski <paul.kocialkowski@bootlin.com> | 2018-07-18 15:07:42 +0200 |
commit | c764527c177e4274d983e48d11315205bca46f69 (patch) | |
tree | c56e8333b56d1c3365f3fcc04c1195528fe8e97f /src | |
parent | 7587ef69011ca664f0a9df154b6fb3cb076676c4 (diff) | |
download | libva-v4l2-request-c764527c177e4274d983e48d11315205bca46f69.tar.gz libva-v4l2-request-c764527c177e4274d983e48d11315205bca46f69.tar.bz2 libva-v4l2-request-c764527c177e4274d983e48d11315205bca46f69.zip |
Add support for QuerySurfaceAttributes
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/request.c | 1 | ||||
-rw-r--r-- | src/surface.c | 76 | ||||
-rw-r--r-- | src/surface.h | 4 |
3 files changed, 81 insertions, 0 deletions
diff --git a/src/request.c b/src/request.c index 51923b6..a36a505 100644 --- a/src/request.c +++ b/src/request.c @@ -103,6 +103,7 @@ VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context) vtable->vaRenderPicture = RequestRenderPicture; vtable->vaEndPicture = RequestEndPicture; vtable->vaSyncSurface = RequestSyncSurface; + vtable->vaQuerySurfaceAttributes = RequestQuerySurfaceAttributes; vtable->vaQuerySurfaceStatus = RequestQuerySurfaceStatus; vtable->vaPutSurface = RequestPutSurface; vtable->vaQueryImageFormats = RequestQueryImageFormats; diff --git a/src/surface.c b/src/surface.c index ffcc6b7..3d0bda6 100644 --- a/src/surface.c +++ b/src/surface.c @@ -296,6 +296,82 @@ complete: return status; } +VAStatus RequestQuerySurfaceAttributes(VADriverContextP context, + VAConfigID config, + VASurfaceAttrib *attributes, + unsigned int *attributes_count) +{ + struct request_data *driver_data = context->pDriverData; + VASurfaceAttrib *attributes_list; + unsigned int attributes_list_size = V4L2_REQUEST_MAX_CONFIG_ATTRIBUTES * + sizeof(*attributes); + int memory_types; + unsigned int i = 0; + + attributes_list = malloc(attributes_list_size); + memset(attributes_list, 0, attributes_list_size); + + attributes_list[i].type = VASurfaceAttribPixelFormat; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + attributes_list[i].value.value.i = VA_FOURCC_NV12; + i++; + + attributes_list[i].type = VASurfaceAttribMinWidth; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + attributes_list[i].value.value.i = 32; + i++; + + attributes_list[i].type = VASurfaceAttribMaxWidth; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + attributes_list[i].value.value.i = 2048; + i++; + + attributes_list[i].type = VASurfaceAttribMinHeight; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + attributes_list[i].value.value.i = 32; + i++; + + attributes_list[i].type = VASurfaceAttribMaxHeight; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + attributes_list[i].value.value.i = 2048; + i++; + + attributes_list[i].type = VASurfaceAttribMemoryType; + attributes_list[i].flags = VA_SURFACE_ATTRIB_GETTABLE | + VA_SURFACE_ATTRIB_SETTABLE; + attributes_list[i].value.type = VAGenericValueTypeInteger; + + memory_types = VA_SURFACE_ATTRIB_MEM_TYPE_VA | + VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2; + + /* + * First version of DRM prime export does not handle modifiers, + * that are required for supporting the tiled output format. + */ + + if (!driver_data->tiled_format) + memory_types |= VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME; + + attributes_list[i].value.value.i = memory_types; + i++; + + attributes_list_size = i * sizeof(*attributes); + + if (attributes != NULL) + memcpy(attributes, attributes_list, attributes_list_size); + + free(attributes_list); + + *attributes_count = i; + + return VA_STATUS_SUCCESS; +} + VAStatus RequestQuerySurfaceStatus(VADriverContextP context, VASurfaceID surface_id, VASurfaceStatus *status) diff --git a/src/surface.h b/src/surface.h index 99717b0..c5ae2f5 100644 --- a/src/surface.h +++ b/src/surface.h @@ -87,6 +87,10 @@ VAStatus RequestCreateSurfaces(VADriverContextP context, int width, int height, VAStatus RequestDestroySurfaces(VADriverContextP context, VASurfaceID *surfaces_ids, int surfaces_count); VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id); +VAStatus RequestQuerySurfaceAttributes(VADriverContextP context, + VAConfigID config, + VASurfaceAttrib *attributes, + unsigned int *attributes_count); VAStatus RequestQuerySurfaceStatus(VADriverContextP context, VASurfaceID surface_id, VASurfaceStatus *status); |