- add sources.
[platform/framework/web/crosswalk.git] / src / third_party / libva / va / va_egl.h
1 /*
2  * Copyright (c) 2012 Intel Corporation. All Rights Reserved.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _VA_EGL_H_
25 #define _VA_EGL_H_
26
27 #include <va/va.h>
28 #include <EGL/egl.h>
29 #include <EGL/eglext.h>
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 typedef void *VASurfaceEGL;
36
37 /*This function is used to get EGLClientBuffer
38  * (lower 16bits is buffer index, upper 16bits 
39  * is BC device id.) from surface id. Application
40  * should maintain EGLClientBuffer itself.*/
41
42 VAStatus vaGetEGLClientBufferFromSurface (
43     VADisplay dpy,
44     VASurfaceID surface,        
45     EGLClientBuffer *buffer     /* out*/
46 );
47
48 /**
49  * Return a suitable VADisplay for VA API
50  *
51  * @param[in] native_dpy the native display
52  * @param[in] egl_dpy the EGL display
53  * @return a VADisplay
54  */
55 VADisplay vaGetDisplayEGL(
56     VANativeDisplay native_dpy,
57     EGLDisplay egl_dpy
58 );
59
60 /**
61  * Return maximum number of EGL targets supported by the implementation
62  *
63  * @param[in] dpy the VADisplay
64  * @return the maximum number of EGL Target
65  */
66 int vaMaxNumSurfaceTargetsEGL(
67     VADisplay dpy
68 );
69
70 /**
71  * Return maximum number of EGL surface attributes supported by the implementation
72  *
73  * @param[in] dpy the VADisplay
74  * @return the maximum number of EGL surface attributes
75  */
76 int vaMaxNumSurfaceAttributesEGL(
77     VADisplay dpy
78 );
79
80 /**
81  * Query supported EGL targets for eglCreateImageKHR(). 
82  *
83  * The caller must provide a "target_list" array that can hold at
84  * least vaMaxNumSurfaceTargetsEGL() entries. The actual number of
85  * targets returned in "target_list" is returned in "num_targets".
86  *
87  * @param[in]] dpy              the VADisplay
88  * @param[out] target_list      the array to hold target entries
89  * @param[out] num_targets      the actual number of targets
90  * @return VA_STATUS_SUCCESS if successful
91  */
92 VAStatus vaQuerySurfaceTargetsEGL(
93     VADisplay dpy,
94     EGLenum *target_list,       /* out */
95     int *num_targets            /* out */
96 );
97
98 /**
99  * Creates a VA/EGL surface with the specified target
100  *
101  * If target is 0, this means the best efficient target by default.
102  *
103  * @param[in] dpy               the VADisplay
104  * @param[in] target            the specified EGL target
105  * @param[in] width             the surface width
106  * @param[in] height            the surface height
107  * @param[out] gl_surface the VA/EGL surface
108  * @return VA_STATUS_SUCCESS if successful
109  */
110 VAStatus vaCreateSurfaceEGL(
111     VADisplay dpy,
112     EGLenum target,
113     unsigned int width,
114     unsigned int height,
115     VASurfaceEGL *gl_surface
116 );
117
118 /**
119  * Destroy a VA/EGL surface
120  *
121  * The application shall maintain the live EGL context itself.
122  *
123  * @param[in]  dpy        the VA display
124  * @param[in]  gl_surface the VA surface
125  * @return VA_STATUS_SUCCESS if successful
126  */
127 VAStatus vaDestroySurfaceEGL(
128     VADisplay dpy,
129     VASurfaceEGL gl_surface
130 );
131
132 /**
133  * Associate a EGL surface with a VA surface
134  *
135  * @param[in]  dpy         the VA display
136  * @param[in]  egl_surface the VA/EGL destination surface
137  * @param[in]  surface     the VA surface
138  * @param[in]  flags       the flags to PutSurface
139  * @return VA_STATUS_SUCCESS if successful
140  */
141 VAStatus vaAssociateSurfaceEGL(
142     VADisplay dpy,
143     VASurfaceEGL egl_surface,
144     VASurfaceID surface,
145     unsigned int flags
146 );
147
148 /**
149  * Update the content of a VA/EGL surface
150  *
151  * Changes to VA surface are committed to VA/EGL surface at this point.
152  *
153  * @param[in] dpy         the VA display
154  * @param[in] egl_surface the VA/EGL surface that has been associated with a VA surface
155  * @return VA_STATUS_SUCCESS if successful
156  */
157 VAStatus vaSyncSurfaceEGL(
158     VADisplay dpy,
159     VASurfaceEGL egl_surface
160 );
161
162 /**
163  * Get the necessary information for eglCreateImageKHR()
164  *
165  * The caller must provide a "attrib_list" array that can hold at
166  * least (2 * vaMaxNumSurfaceAttributesEGL()) entries. The last attribute 
167  * specified in attrib_list must be EGL_NONE
168  *
169  * @param[in]  dpy         the VA display
170  * @param[in]  egl_surface the VA/EGL surface that has been associated with a VA surface
171  * @param[out] target      the type of <buffer> for eglCreateImageKHR()
172  * @param[out] buffer      the EGLClientBuffer for eglCreateImageKHR()
173  * @param[out] attrib_list the list of attribute-value pairs for eglCreateImageKHR()
174  * @param[in/out] num_attribs input: the number of allocated attribute-value pairs in attrib_list; output: the actual number of attribute-value pairs
175  * @return VA_STATUS_SUCCESS if successful
176  */
177 VAStatus vaGetSurfaceInfoEGL(
178     VADisplay dpy,
179     VASurfaceEGL egl_surface,
180     EGLenum *target,            /* out, the type of <buffer> */
181     EGLClientBuffer *buffer,    /* out */
182     EGLint *attrib_list,        /* out, the last attribute must be EGL_NONE */
183     int *num_attribs            /* in/out, the number of attribute-value pairs */
184 );
185
186 /**
187  * Deassociate a EGL surface
188  *
189  * @param[in]  dpy         the VA display
190  * @param[in]  egl_surface the VA/EGL destination surface
191  * @return VA_STATUS_SUCCESS if successful
192  */
193 VAStatus vaDeassociateSurfaceEGL(
194     VADisplay dpy,
195     VASurfaceEGL egl_surface
196 );
197
198 #ifdef __cplusplus
199 }
200 #endif
201
202 #endif /* _VA_EGL_H_ */