OLD | NEW |
| (Empty) |
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 implementati
on | |
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 eglCreateImageK
HR() | |
174 * @param[in/out] num_attribs input: the number of allocated attribute-value pai
rs 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_ */ | |
OLD | NEW |