diff options
Diffstat (limited to 'include/vaapi.h')
-rw-r--r-- | include/vaapi.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/include/vaapi.h b/include/vaapi.h new file mode 100644 index 0000000..7ec73b2 --- /dev/null +++ b/include/vaapi.h @@ -0,0 +1,63 @@ +#ifndef GSR_VAAPI_H +#define GSR_VAAPI_H + +#include <stdint.h> +#include <stdbool.h> + +typedef void* VADisplay; +typedef int VAStatus; +typedef unsigned int VAGenericID; +typedef VAGenericID VASurfaceID; + +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_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 */ |