From 2f67083915ccb16727d00d49917a520d0962fb8c Mon Sep 17 00:00:00 2001 From: Steam Deck User Date: Sat, 1 Apr 2023 15:14:36 +0200 Subject: Use vaapi to do rgb->yuv420p color conversion Enable window capture for amd/intel. Properly check if h264/hevc is supported on amd/intel before using codec. --- include/vaapi.h | 168 -------------------------------------------------------- 1 file changed, 168 deletions(-) delete mode 100644 include/vaapi.h (limited to 'include/vaapi.h') diff --git a/include/vaapi.h b/include/vaapi.h deleted file mode 100644 index 56acb13..0000000 --- a/include/vaapi.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef GSR_VAAPI_H -#define GSR_VAAPI_H - -#include -#include - -// To prevent hwcontext_vaapi.h from including va.h.. An ugly hack -#define _VA_H_ - -// These definitions are copied from va.h, which is licensed under MIT - -typedef void* VADisplay; -typedef int VAStatus; - -typedef unsigned int VAGenericID; -typedef VAGenericID VAConfigID; -typedef VAGenericID VAContextID; -typedef VAGenericID VASurfaceID; - -#define VA_STATUS_SUCCESS 0x00000000 - -typedef struct { - /** Pixel format fourcc of the whole surface (VA_FOURCC_*). */ - uint32_t fourcc; - /** Width of the surface in pixels. */ - uint32_t width; - /** Height of the surface in pixels. */ - uint32_t height; - /** Number of distinct DRM objects making up the surface. */ - uint32_t num_objects; - /** Description of each object. */ - struct { - /** DRM PRIME file descriptor for this object. */ - int fd; - /** Total size of this object (may include regions which are - * not part of the surface). */ - uint32_t size; - /** Format modifier applied to this object. */ - uint64_t drm_format_modifier; - } objects[4]; - /** Number of layers making up the surface. */ - uint32_t num_layers; - /** Description of each layer in the surface. */ - struct { - /** DRM format fourcc of this layer (DRM_FOURCC_*). */ - uint32_t drm_format; - /** Number of planes in this layer. */ - uint32_t num_planes; - /** Index in the objects array of the object containing each - * plane. */ - uint32_t object_index[4]; - /** Offset within the object of each plane. */ - uint32_t offset[4]; - /** Pitch of each plane. */ - uint32_t pitch[4]; - } layers[4]; -} VADRMPRIMESurfaceDescriptor; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/** \brief Generic value types. */ -typedef enum { - VAGenericValueTypeInteger = 1, /**< 32-bit signed integer. */ - VAGenericValueTypeFloat, /**< 32-bit floating-point value. */ - VAGenericValueTypePointer, /**< Generic pointer type */ - VAGenericValueTypeFunc /**< Pointer to function */ -} VAGenericValueType; - -/** \brief Generic function type. */ -typedef void (*VAGenericFunc)(void); - -/** \brief Generic value. */ -typedef struct _VAGenericValue { - /** \brief Value type. See #VAGenericValueType. */ - VAGenericValueType type; - /** \brief Value holder. */ - union { - /** \brief 32-bit signed integer. */ - int32_t i; - /** \brief 32-bit float. */ - float f; - /** \brief Generic pointer. */ - void *p; - /** \brief Pointer to function. */ - VAGenericFunc fn; - } value; -} VAGenericValue; - -/** @name Surface attribute flags */ -/**@{*/ -/** \brief Surface attribute is not supported. */ -#define VA_SURFACE_ATTRIB_NOT_SUPPORTED 0x00000000 -/** \brief Surface attribute can be got through vaQuerySurfaceAttributes(). */ -#define VA_SURFACE_ATTRIB_GETTABLE 0x00000001 -/** \brief Surface attribute can be set through vaCreateSurfaces(). */ -#define VA_SURFACE_ATTRIB_SETTABLE 0x00000002 -/**@}*/ - -/** \brief Surface attribute types. */ -typedef enum { - VASurfaceAttribNone = 0, - /** - * \brief Pixel format as a FOURCC (int, read/write). - * - * When vaQuerySurfaceAttributes() is called, the driver will return one - * PixelFormat attribute per supported pixel format. - * - * When provided as an input to vaCreateSurfaces(), the driver will - * allocate a surface with the provided pixel format. - */ - VASurfaceAttribPixelFormat, - /** \brief Minimal width in pixels (int, read-only). */ - VASurfaceAttribMinWidth, - /** \brief Maximal width in pixels (int, read-only). */ - VASurfaceAttribMaxWidth, - /** \brief Minimal height in pixels (int, read-only). */ - VASurfaceAttribMinHeight, - /** \brief Maximal height in pixels (int, read-only). */ - VASurfaceAttribMaxHeight, - /** \brief Surface memory type expressed in bit fields (int, read/write). */ - VASurfaceAttribMemoryType, - /** \brief External buffer descriptor (pointer, write). - * - * Refer to the documentation for the memory type being created to - * determine what descriptor structure to pass here. If not otherwise - * stated, the common VASurfaceAttribExternalBuffers should be used. - */ - VASurfaceAttribExternalBufferDescriptor, - /** \brief Surface usage hint, gives the driver a hint of intended usage - * to optimize allocation (e.g. tiling) (int, read/write). */ - VASurfaceAttribUsageHint, - /** \brief List of possible DRM format modifiers (pointer, write). - * - * The value must be a pointer to a VADRMFormatModifierList. This can only - * be used when allocating a new buffer, it's invalid to use this attribute - * when importing an existing buffer. - */ - VASurfaceAttribDRMFormatModifiers, - /** \brief Number of surface attributes. */ - VASurfaceAttribCount -} VASurfaceAttribType; - -/** \brief Surface attribute. */ -typedef struct _VASurfaceAttrib { - /** \brief Type. */ - VASurfaceAttribType type; - /** \brief Flags. See "Surface attribute flags". */ - uint32_t flags; - /** \brief Value. See "Surface attribute types" for the expected types. */ - VAGenericValue value; -} VASurfaceAttrib; - -#define VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 0x40000000 -#define VA_EXPORT_SURFACE_READ_WRITE 0x0003 -#define VA_EXPORT_SURFACE_SEPARATE_LAYERS 0x0004 - -typedef struct { - void *library; - - VAStatus (*vaExportSurfaceHandle)(VADisplay dpy, VASurfaceID surface_id, uint32_t mem_type, uint32_t flags, void *descriptor); - VAStatus (*vaSyncSurface)(VADisplay dpy, VASurfaceID render_target); -} gsr_vaapi; - -bool gsr_vaapi_load(gsr_vaapi *self); -void gsr_vaapi_unload(gsr_vaapi *self); - -#endif /* GSR_VAAPI_H */ -- cgit v1.2.3