summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Kocialkowski <paul.kocialkowski@bootlin.com>2018-07-18 15:07:42 +0200
committerPaul Kocialkowski <paul.kocialkowski@bootlin.com>2018-07-18 15:07:42 +0200
commitc764527c177e4274d983e48d11315205bca46f69 (patch)
treec56e8333b56d1c3365f3fcc04c1195528fe8e97f /src
parent7587ef69011ca664f0a9df154b6fb3cb076676c4 (diff)
downloadlibva-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.c1
-rw-r--r--src/surface.c76
-rw-r--r--src/surface.h4
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);