Index: third_party/libva/va/va_egl.h |
diff --git a/third_party/libva/va/va_egl.h b/third_party/libva/va/va_egl.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c9bd16f2e3ca1b3eeb9bd977b2b07d409651bbc8 |
--- /dev/null |
+++ b/third_party/libva/va/va_egl.h |
@@ -0,0 +1,179 @@ |
+#ifndef _VA_EGL_H_ |
+#define _VA_EGL_H_ |
+ |
+#include <va/va.h> |
+#include <EGL/egl.h> |
+#include <EGL/eglext.h> |
+ |
+#ifdef __cplusplus |
+extern "C" { |
+#endif |
+ |
+typedef void *VASurfaceEGL; |
+ |
+/*This function is used to get EGLClientBuffer |
+ * (lower 16bits is buffer index, upper 16bits |
+ * is BC device id.) from surface id. Application |
+ * should maintain EGLClientBuffer itself.*/ |
+ |
+VAStatus vaGetEGLClientBufferFromSurface ( |
+ VADisplay dpy, |
+ VASurfaceID surface, |
+ EGLClientBuffer *buffer /* out*/ |
+); |
+ |
+/** |
+ * Return a suitable VADisplay for VA API |
+ * |
+ * @param[in] native_dpy the native display |
+ * @param[in] egl_dpy the EGL display |
+ * @return a VADisplay |
+ */ |
+VADisplay vaGetDisplayEGL( |
+ VANativeDisplay native_dpy, |
+ EGLDisplay egl_dpy |
+); |
+ |
+/** |
+ * Return maximum number of EGL targets supported by the implementation |
+ * |
+ * @param[in] dpy the VADisplay |
+ * @return the maximum number of EGL Target |
+ */ |
+int vaMaxNumSurfaceTargetsEGL( |
+ VADisplay dpy |
+); |
+ |
+/** |
+ * Return maximum number of EGL surface attributes supported by the implementation |
+ * |
+ * @param[in] dpy the VADisplay |
+ * @return the maximum number of EGL surface attributes |
+ */ |
+int vaMaxNumSurfaceAttributesEGL( |
+ VADisplay dpy |
+); |
+ |
+/** |
+ * Query supported EGL targets for eglCreateImageKHR(). |
+ * |
+ * The caller must provide a "target_list" array that can hold at |
+ * least vaMaxNumSurfaceTargetsEGL() entries. The actual number of |
+ * targets returned in "target_list" is returned in "num_targets". |
+ * |
+ * @param[in]] dpy the VADisplay |
+ * @param[out] target_list the array to hold target entries |
+ * @param[out] num_targets the actual number of targets |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaQuerySurfaceTargetsEGL( |
+ VADisplay dpy, |
+ EGLenum *target_list, /* out */ |
+ int *num_targets /* out */ |
+); |
+ |
+/** |
+ * Creates a VA/EGL surface with the specified target |
+ * |
+ * If target is 0, this means the best efficient target by default. |
+ * |
+ * @param[in] dpy the VADisplay |
+ * @param[in] target the specified EGL target |
+ * @param[in] width the surface width |
+ * @param[in] height the surface height |
+ * @param[out] gl_surface the VA/EGL surface |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaCreateSurfaceEGL( |
+ VADisplay dpy, |
+ EGLenum target, |
+ unsigned int width, |
+ unsigned int height, |
+ VASurfaceEGL *gl_surface |
+); |
+ |
+/** |
+ * Destroy a VA/EGL surface |
+ * |
+ * The application shall maintain the live EGL context itself. |
+ * |
+ * @param[in] dpy the VA display |
+ * @param[in] gl_surface the VA surface |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaDestroySurfaceEGL( |
+ VADisplay dpy, |
+ VASurfaceEGL gl_surface |
+); |
+ |
+/** |
+ * Associate a EGL surface with a VA surface |
+ * |
+ * @param[in] dpy the VA display |
+ * @param[in] egl_surface the VA/EGL destination surface |
+ * @param[in] surface the VA surface |
+ * @param[in] flags the flags to PutSurface |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaAssociateSurfaceEGL( |
+ VADisplay dpy, |
+ VASurfaceEGL egl_surface, |
+ VASurfaceID surface, |
+ unsigned int flags |
+); |
+ |
+/** |
+ * Update the content of a VA/EGL surface |
+ * |
+ * Changes to VA surface are committed to VA/EGL surface at this point. |
+ * |
+ * @param[in] dpy the VA display |
+ * @param[in] egl_surface the VA/EGL surface that has been associated with a VA surface |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaSyncSurfaceEGL( |
+ VADisplay dpy, |
+ VASurfaceEGL egl_surface |
+); |
+ |
+/** |
+ * Get the necessary information for eglCreateImageKHR() |
+ * |
+ * The caller must provide a "attrib_list" array that can hold at |
+ * least (2 * vaMaxNumSurfaceAttributesEGL()) entries. The last attribute |
+ * specified in attrib_list must be EGL_NONE |
+ * |
+ * @param[in] dpy the VA display |
+ * @param[in] egl_surface the VA/EGL surface that has been associated with a VA surface |
+ * @param[out] target the type of <buffer> for eglCreateImageKHR() |
+ * @param[out] buffer the EGLClientBuffer for eglCreateImageKHR() |
+ * @param[out] attrib_list the list of attribute-value pairs for eglCreateImageKHR() |
+ * @param[in/out] num_attribs input: the number of allocated attribute-value pairs in attrib_list; output: the actual number of attribute-value pairs |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaGetSurfaceInfoEGL( |
+ VADisplay dpy, |
+ VASurfaceEGL egl_surface, |
+ EGLenum *target, /* out, the type of <buffer> */ |
+ EGLClientBuffer *buffer, /* out */ |
+ EGLint *attrib_list, /* out, the last attribute must be EGL_NONE */ |
+ int *num_attribs /* in/out, the number of attribute-value pairs */ |
+); |
+ |
+/** |
+ * Deassociate a EGL surface |
+ * |
+ * @param[in] dpy the VA display |
+ * @param[in] egl_surface the VA/EGL destination surface |
+ * @return VA_STATUS_SUCCESS if successful |
+ */ |
+VAStatus vaDeassociateSurfaceEGL( |
+ VADisplay dpy, |
+ VASurfaceEGL egl_surface |
+); |
+ |
+#ifdef __cplusplus |
+} |
+#endif |
+ |
+#endif /* _VA_EGL_H_ */ |