Add support for QuerySurfaceAttributes
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
This commit is contained in:
@@ -103,6 +103,7 @@ VAStatus VA_DRIVER_INIT_FUNC(VADriverContextP context)
|
|||||||
vtable->vaRenderPicture = RequestRenderPicture;
|
vtable->vaRenderPicture = RequestRenderPicture;
|
||||||
vtable->vaEndPicture = RequestEndPicture;
|
vtable->vaEndPicture = RequestEndPicture;
|
||||||
vtable->vaSyncSurface = RequestSyncSurface;
|
vtable->vaSyncSurface = RequestSyncSurface;
|
||||||
|
vtable->vaQuerySurfaceAttributes = RequestQuerySurfaceAttributes;
|
||||||
vtable->vaQuerySurfaceStatus = RequestQuerySurfaceStatus;
|
vtable->vaQuerySurfaceStatus = RequestQuerySurfaceStatus;
|
||||||
vtable->vaPutSurface = RequestPutSurface;
|
vtable->vaPutSurface = RequestPutSurface;
|
||||||
vtable->vaQueryImageFormats = RequestQueryImageFormats;
|
vtable->vaQueryImageFormats = RequestQueryImageFormats;
|
||||||
|
|||||||
@@ -296,6 +296,82 @@ complete:
|
|||||||
return status;
|
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,
|
VAStatus RequestQuerySurfaceStatus(VADriverContextP context,
|
||||||
VASurfaceID surface_id,
|
VASurfaceID surface_id,
|
||||||
VASurfaceStatus *status)
|
VASurfaceStatus *status)
|
||||||
|
|||||||
@@ -87,6 +87,10 @@ VAStatus RequestCreateSurfaces(VADriverContextP context, int width, int height,
|
|||||||
VAStatus RequestDestroySurfaces(VADriverContextP context,
|
VAStatus RequestDestroySurfaces(VADriverContextP context,
|
||||||
VASurfaceID *surfaces_ids, int surfaces_count);
|
VASurfaceID *surfaces_ids, int surfaces_count);
|
||||||
VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id);
|
VAStatus RequestSyncSurface(VADriverContextP context, VASurfaceID surface_id);
|
||||||
|
VAStatus RequestQuerySurfaceAttributes(VADriverContextP context,
|
||||||
|
VAConfigID config,
|
||||||
|
VASurfaceAttrib *attributes,
|
||||||
|
unsigned int *attributes_count);
|
||||||
VAStatus RequestQuerySurfaceStatus(VADriverContextP context,
|
VAStatus RequestQuerySurfaceStatus(VADriverContextP context,
|
||||||
VASurfaceID surface_id,
|
VASurfaceID surface_id,
|
||||||
VASurfaceStatus *status);
|
VASurfaceStatus *status);
|
||||||
|
|||||||
Reference in New Issue
Block a user