1 | /* |
2 | * Copyright (c) 2007 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 | |
25 | /* |
26 | * Video Decode Acceleration -Backend API |
27 | */ |
28 | |
29 | #ifndef _VA_BACKEND_H_ |
30 | #define _VA_BACKEND_H_ |
31 | |
32 | #include <va/va.h> |
33 | |
34 | typedef struct VADriverContext *VADriverContextP; |
35 | typedef struct VADisplayContext *VADisplayContextP; |
36 | |
37 | /** \brief VA display types. */ |
38 | enum { |
39 | /** \brief Mask to major identifier for VA display type. */ |
40 | VA_DISPLAY_MAJOR_MASK = 0xf0, |
41 | |
42 | /** \brief VA/X11 API is used, through vaGetDisplay() entry-point. */ |
43 | VA_DISPLAY_X11 = 0x10, |
44 | /** \brief VA/GLX API is used, through vaGetDisplayGLX() entry-point. */ |
45 | VA_DISPLAY_GLX = (VA_DISPLAY_X11 | (1 << 0)), |
46 | /** \brief VA/Android API is used, through vaGetDisplay() entry-point. */ |
47 | VA_DISPLAY_ANDROID = 0x20, |
48 | /** \brief VA/DRM API is used, through vaGetDisplayDRM() entry-point. */ |
49 | VA_DISPLAY_DRM = 0x30, |
50 | /** \brief VA/DRM API is used, with a render-node device path */ |
51 | VA_DISPLAY_DRM_RENDERNODES = (VA_DISPLAY_DRM | (1 << 0)), |
52 | /** \brief VA/Wayland API is used, through vaGetDisplayWl() entry-point. */ |
53 | VA_DISPLAY_WAYLAND = 0x40, |
54 | }; |
55 | |
56 | struct VADriverVTable { |
57 | VAStatus(*vaTerminate)(VADriverContextP ctx); |
58 | |
59 | VAStatus(*vaQueryConfigProfiles)( |
60 | VADriverContextP ctx, |
61 | VAProfile *profile_list, /* out */ |
62 | int *num_profiles /* out */ |
63 | ); |
64 | |
65 | VAStatus(*vaQueryConfigEntrypoints)( |
66 | VADriverContextP ctx, |
67 | VAProfile profile, |
68 | VAEntrypoint *entrypoint_list, /* out */ |
69 | int *num_entrypoints /* out */ |
70 | ); |
71 | |
72 | VAStatus(*vaGetConfigAttributes)( |
73 | VADriverContextP ctx, |
74 | VAProfile profile, |
75 | VAEntrypoint entrypoint, |
76 | VAConfigAttrib *attrib_list, /* in/out */ |
77 | int num_attribs |
78 | ); |
79 | |
80 | VAStatus(*vaCreateConfig)( |
81 | VADriverContextP ctx, |
82 | VAProfile profile, |
83 | VAEntrypoint entrypoint, |
84 | VAConfigAttrib *attrib_list, |
85 | int num_attribs, |
86 | VAConfigID *config_id /* out */ |
87 | ); |
88 | |
89 | VAStatus(*vaDestroyConfig)( |
90 | VADriverContextP ctx, |
91 | VAConfigID config_id |
92 | ); |
93 | |
94 | VAStatus(*vaQueryConfigAttributes)( |
95 | VADriverContextP ctx, |
96 | VAConfigID config_id, |
97 | VAProfile *profile, /* out */ |
98 | VAEntrypoint *entrypoint, /* out */ |
99 | VAConfigAttrib *attrib_list, /* out */ |
100 | int *num_attribs /* out */ |
101 | ); |
102 | |
103 | VAStatus(*vaCreateSurfaces)( |
104 | VADriverContextP ctx, |
105 | int width, |
106 | int height, |
107 | int format, |
108 | int num_surfaces, |
109 | VASurfaceID *surfaces /* out */ |
110 | ); |
111 | |
112 | VAStatus(*vaDestroySurfaces)( |
113 | VADriverContextP ctx, |
114 | VASurfaceID *surface_list, |
115 | int num_surfaces |
116 | ); |
117 | |
118 | VAStatus(*vaCreateContext)( |
119 | VADriverContextP ctx, |
120 | VAConfigID config_id, |
121 | int picture_width, |
122 | int picture_height, |
123 | int flag, |
124 | VASurfaceID *render_targets, |
125 | int num_render_targets, |
126 | VAContextID *context /* out */ |
127 | ); |
128 | |
129 | VAStatus(*vaDestroyContext)( |
130 | VADriverContextP ctx, |
131 | VAContextID context |
132 | ); |
133 | |
134 | VAStatus(*vaCreateBuffer)( |
135 | VADriverContextP ctx, |
136 | VAContextID context, /* in */ |
137 | VABufferType type, /* in */ |
138 | unsigned int size, /* in */ |
139 | unsigned int num_elements, /* in */ |
140 | void *data, /* in */ |
141 | VABufferID *buf_id |
142 | ); |
143 | |
144 | VAStatus(*vaBufferSetNumElements)( |
145 | VADriverContextP ctx, |
146 | VABufferID buf_id, /* in */ |
147 | unsigned int num_elements /* in */ |
148 | ); |
149 | |
150 | VAStatus(*vaMapBuffer)( |
151 | VADriverContextP ctx, |
152 | VABufferID buf_id, /* in */ |
153 | void **pbuf /* out */ |
154 | ); |
155 | |
156 | VAStatus(*vaUnmapBuffer)( |
157 | VADriverContextP ctx, |
158 | VABufferID buf_id /* in */ |
159 | ); |
160 | |
161 | VAStatus(*vaDestroyBuffer)( |
162 | VADriverContextP ctx, |
163 | VABufferID buffer_id |
164 | ); |
165 | |
166 | VAStatus(*vaBeginPicture)( |
167 | VADriverContextP ctx, |
168 | VAContextID context, |
169 | VASurfaceID render_target |
170 | ); |
171 | |
172 | VAStatus(*vaRenderPicture)( |
173 | VADriverContextP ctx, |
174 | VAContextID context, |
175 | VABufferID *buffers, |
176 | int num_buffers |
177 | ); |
178 | |
179 | VAStatus(*vaEndPicture)( |
180 | VADriverContextP ctx, |
181 | VAContextID context |
182 | ); |
183 | |
184 | VAStatus(*vaSyncSurface)( |
185 | VADriverContextP ctx, |
186 | VASurfaceID render_target |
187 | ); |
188 | |
189 | VAStatus(*vaQuerySurfaceStatus)( |
190 | VADriverContextP ctx, |
191 | VASurfaceID render_target, |
192 | VASurfaceStatus *status /* out */ |
193 | ); |
194 | |
195 | VAStatus(*vaQuerySurfaceError)( |
196 | VADriverContextP ctx, |
197 | VASurfaceID render_target, |
198 | VAStatus error_status, |
199 | void **error_info /*out*/ |
200 | ); |
201 | |
202 | VAStatus(*vaPutSurface)( |
203 | VADriverContextP ctx, |
204 | VASurfaceID surface, |
205 | void* draw, /* Drawable of window system */ |
206 | short srcx, |
207 | short srcy, |
208 | unsigned short srcw, |
209 | unsigned short srch, |
210 | short destx, |
211 | short desty, |
212 | unsigned short destw, |
213 | unsigned short desth, |
214 | VARectangle *cliprects, /* client supplied clip list */ |
215 | unsigned int number_cliprects, /* number of clip rects in the clip list */ |
216 | unsigned int flags /* de-interlacing flags */ |
217 | ); |
218 | |
219 | VAStatus(*vaQueryImageFormats)( |
220 | VADriverContextP ctx, |
221 | VAImageFormat *format_list, /* out */ |
222 | int *num_formats /* out */ |
223 | ); |
224 | |
225 | VAStatus(*vaCreateImage)( |
226 | VADriverContextP ctx, |
227 | VAImageFormat *format, |
228 | int width, |
229 | int height, |
230 | VAImage *image /* out */ |
231 | ); |
232 | |
233 | VAStatus(*vaDeriveImage)( |
234 | VADriverContextP ctx, |
235 | VASurfaceID surface, |
236 | VAImage *image /* out */ |
237 | ); |
238 | |
239 | VAStatus(*vaDestroyImage)( |
240 | VADriverContextP ctx, |
241 | VAImageID image |
242 | ); |
243 | |
244 | VAStatus(*vaSetImagePalette)( |
245 | VADriverContextP ctx, |
246 | VAImageID image, |
247 | /* |
248 | * pointer to an array holding the palette data. The size of the array is |
249 | * num_palette_entries * entry_bytes in size. The order of the components |
250 | * in the palette is described by the component_order in VAImage struct |
251 | */ |
252 | unsigned char *palette |
253 | ); |
254 | |
255 | VAStatus(*vaGetImage)( |
256 | VADriverContextP ctx, |
257 | VASurfaceID surface, |
258 | int x, /* coordinates of the upper left source pixel */ |
259 | int y, |
260 | unsigned int width, /* width and height of the region */ |
261 | unsigned int height, |
262 | VAImageID image |
263 | ); |
264 | |
265 | VAStatus(*vaPutImage)( |
266 | VADriverContextP ctx, |
267 | VASurfaceID surface, |
268 | VAImageID image, |
269 | int src_x, |
270 | int src_y, |
271 | unsigned int src_width, |
272 | unsigned int src_height, |
273 | int dest_x, |
274 | int dest_y, |
275 | unsigned int dest_width, |
276 | unsigned int dest_height |
277 | ); |
278 | |
279 | VAStatus(*vaQuerySubpictureFormats)( |
280 | VADriverContextP ctx, |
281 | VAImageFormat *format_list, /* out */ |
282 | unsigned int *flags, /* out */ |
283 | unsigned int *num_formats /* out */ |
284 | ); |
285 | |
286 | VAStatus(*vaCreateSubpicture)( |
287 | VADriverContextP ctx, |
288 | VAImageID image, |
289 | VASubpictureID *subpicture /* out */ |
290 | ); |
291 | |
292 | VAStatus(*vaDestroySubpicture)( |
293 | VADriverContextP ctx, |
294 | VASubpictureID subpicture |
295 | ); |
296 | |
297 | VAStatus(*vaSetSubpictureImage)( |
298 | VADriverContextP ctx, |
299 | VASubpictureID subpicture, |
300 | VAImageID image |
301 | ); |
302 | |
303 | VAStatus(*vaSetSubpictureChromakey)( |
304 | VADriverContextP ctx, |
305 | VASubpictureID subpicture, |
306 | unsigned int chromakey_min, |
307 | unsigned int chromakey_max, |
308 | unsigned int chromakey_mask |
309 | ); |
310 | |
311 | VAStatus(*vaSetSubpictureGlobalAlpha)( |
312 | VADriverContextP ctx, |
313 | VASubpictureID subpicture, |
314 | float global_alpha |
315 | ); |
316 | |
317 | VAStatus(*vaAssociateSubpicture)( |
318 | VADriverContextP ctx, |
319 | VASubpictureID subpicture, |
320 | VASurfaceID *target_surfaces, |
321 | int num_surfaces, |
322 | short src_x, /* upper left offset in subpicture */ |
323 | short src_y, |
324 | unsigned short src_width, |
325 | unsigned short src_height, |
326 | short dest_x, /* upper left offset in surface */ |
327 | short dest_y, |
328 | unsigned short dest_width, |
329 | unsigned short dest_height, |
330 | /* |
331 | * whether to enable chroma-keying or global-alpha |
332 | * see VA_SUBPICTURE_XXX values |
333 | */ |
334 | unsigned int flags |
335 | ); |
336 | |
337 | VAStatus(*vaDeassociateSubpicture)( |
338 | VADriverContextP ctx, |
339 | VASubpictureID subpicture, |
340 | VASurfaceID *target_surfaces, |
341 | int num_surfaces |
342 | ); |
343 | |
344 | VAStatus(*vaQueryDisplayAttributes)( |
345 | VADriverContextP ctx, |
346 | VADisplayAttribute *attr_list, /* out */ |
347 | int *num_attributes /* out */ |
348 | ); |
349 | |
350 | VAStatus(*vaGetDisplayAttributes)( |
351 | VADriverContextP ctx, |
352 | VADisplayAttribute *attr_list, /* in/out */ |
353 | int num_attributes |
354 | ); |
355 | |
356 | VAStatus(*vaSetDisplayAttributes)( |
357 | VADriverContextP ctx, |
358 | VADisplayAttribute *attr_list, |
359 | int num_attributes |
360 | ); |
361 | |
362 | /* used by va trace */ |
363 | VAStatus(*vaBufferInfo)( |
364 | VADriverContextP ctx, /* in */ |
365 | VABufferID buf_id, /* in */ |
366 | VABufferType *type, /* out */ |
367 | unsigned int *size, /* out */ |
368 | unsigned int *num_elements /* out */ |
369 | ); |
370 | |
371 | /* lock/unlock surface for external access */ |
372 | VAStatus(*vaLockSurface)( |
373 | VADriverContextP ctx, |
374 | VASurfaceID surface, |
375 | unsigned int *fourcc, /* out for follow argument */ |
376 | unsigned int *luma_stride, |
377 | unsigned int *chroma_u_stride, |
378 | unsigned int *chroma_v_stride, |
379 | unsigned int *luma_offset, |
380 | unsigned int *chroma_u_offset, |
381 | unsigned int *chroma_v_offset, |
382 | unsigned int *buffer_name, /* if it is not NULL, assign the low lever |
383 | * surface buffer name |
384 | */ |
385 | void **buffer /* if it is not NULL, map the surface buffer for |
386 | * CPU access |
387 | */ |
388 | ); |
389 | |
390 | VAStatus(*vaUnlockSurface)( |
391 | VADriverContextP ctx, |
392 | VASurfaceID surface |
393 | ); |
394 | |
395 | /* DEPRECATED */ |
396 | VAStatus |
397 | (*vaGetSurfaceAttributes)( |
398 | VADriverContextP dpy, |
399 | VAConfigID config, |
400 | VASurfaceAttrib *attrib_list, |
401 | unsigned int num_attribs |
402 | ); |
403 | |
404 | VAStatus |
405 | (*vaCreateSurfaces2)( |
406 | VADriverContextP ctx, |
407 | unsigned int format, |
408 | unsigned int width, |
409 | unsigned int height, |
410 | VASurfaceID *surfaces, |
411 | unsigned int num_surfaces, |
412 | VASurfaceAttrib *attrib_list, |
413 | unsigned int num_attribs |
414 | ); |
415 | |
416 | VAStatus |
417 | (*vaQuerySurfaceAttributes)( |
418 | VADriverContextP dpy, |
419 | VAConfigID config, |
420 | VASurfaceAttrib *attrib_list, |
421 | unsigned int *num_attribs |
422 | ); |
423 | |
424 | VAStatus |
425 | (*vaAcquireBufferHandle)( |
426 | VADriverContextP ctx, |
427 | VABufferID buf_id, /* in */ |
428 | VABufferInfo * buf_info /* in/out */ |
429 | ); |
430 | |
431 | VAStatus |
432 | (*vaReleaseBufferHandle)( |
433 | VADriverContextP ctx, |
434 | VABufferID buf_id /* in */ |
435 | ); |
436 | |
437 | VAStatus(*vaCreateMFContext)( |
438 | VADriverContextP ctx, |
439 | VAMFContextID *mfe_context /* out */ |
440 | ); |
441 | |
442 | VAStatus(*vaMFAddContext)( |
443 | VADriverContextP ctx, |
444 | VAMFContextID mf_context, |
445 | VAContextID context |
446 | ); |
447 | |
448 | VAStatus(*vaMFReleaseContext)( |
449 | VADriverContextP ctx, |
450 | VAMFContextID mf_context, |
451 | VAContextID context |
452 | ); |
453 | |
454 | VAStatus(*vaMFSubmit)( |
455 | VADriverContextP ctx, |
456 | VAMFContextID mf_context, |
457 | VAContextID *contexts, |
458 | int num_contexts |
459 | ); |
460 | VAStatus(*vaCreateBuffer2)( |
461 | VADriverContextP ctx, |
462 | VAContextID context, /* in */ |
463 | VABufferType type, /* in */ |
464 | unsigned int width, /* in */ |
465 | unsigned int height, /* in */ |
466 | unsigned int *unit_size, /* out */ |
467 | unsigned int *pitch, /* out */ |
468 | VABufferID *buf_id /* out */ |
469 | ); |
470 | |
471 | VAStatus(*vaQueryProcessingRate)( |
472 | VADriverContextP ctx, /* in */ |
473 | VAConfigID config_id, /* in */ |
474 | VAProcessingRateParameter *proc_buf,/* in */ |
475 | unsigned int *processing_rate /* out */ |
476 | ); |
477 | |
478 | VAStatus |
479 | (*vaExportSurfaceHandle)( |
480 | VADriverContextP ctx, |
481 | VASurfaceID surface_id, /* in */ |
482 | uint32_t mem_type, /* in */ |
483 | uint32_t flags, /* in */ |
484 | void *descriptor /* out */ |
485 | ); |
486 | VAStatus(*vaSyncSurface2)( |
487 | VADriverContextP ctx, |
488 | VASurfaceID surface, |
489 | uint64_t timeout_ns |
490 | ); |
491 | |
492 | VAStatus(*vaSyncBuffer)( |
493 | VADriverContextP ctx, |
494 | VABufferID buf_id, |
495 | uint64_t timeout_ns |
496 | ); |
497 | |
498 | VAStatus |
499 | (*vaCopy)( |
500 | VADriverContextP ctx, /* in */ |
501 | VACopyObject *dst, /* in */ |
502 | VACopyObject *src, /* in */ |
503 | VACopyOption option /* in */ |
504 | ); |
505 | /** \brief Reserved bytes for future use, must be zero */ |
506 | unsigned long reserved[54]; |
507 | }; |
508 | |
509 | struct VADriverContext { |
510 | void *pDriverData; |
511 | |
512 | /** |
513 | * The core VA implementation hooks. |
514 | * |
515 | * This structure is allocated from libva with calloc(). |
516 | */ |
517 | struct VADriverVTable *vtable; |
518 | |
519 | /** |
520 | * The VA/GLX implementation hooks. |
521 | * |
522 | * This structure is intended for drivers that implement the |
523 | * VA/GLX API. The driver implementation is responsible for the |
524 | * allocation and deallocation of this structure. |
525 | */ |
526 | struct VADriverVTableGLX *vtable_glx; |
527 | |
528 | /** |
529 | * The VA/EGL implementation hooks. |
530 | * |
531 | * This structure is intended for drivers that implement the |
532 | * VA/EGL API. The driver implementation is responsible for the |
533 | * allocation and deallocation of this structure. |
534 | */ |
535 | struct VADriverVTableEGL *vtable_egl; |
536 | |
537 | /** |
538 | * The third-party/private implementation hooks. |
539 | * |
540 | * This structure is intended for drivers that implement the |
541 | * private API. The driver implementation is responsible for the |
542 | * allocation and deallocation of this structure. |
543 | */ |
544 | void *vtable_tpi; |
545 | |
546 | void *native_dpy; |
547 | int x11_screen; |
548 | int version_major; |
549 | int version_minor; |
550 | int max_profiles; |
551 | int max_entrypoints; |
552 | int max_attributes; |
553 | int max_image_formats; |
554 | int max_subpic_formats; |
555 | int max_display_attributes; |
556 | const char *str_vendor; |
557 | |
558 | void *handle; /* dlopen handle */ |
559 | |
560 | /** |
561 | * \brief DRM state. |
562 | * |
563 | * This field holds driver specific data for DRM-based |
564 | * drivers. This structure is allocated from libva with |
565 | * calloc(). Do not deallocate from within VA driver |
566 | * implementations. |
567 | * |
568 | * All structures shall be derived from struct drm_state. So, for |
569 | * instance, this field holds a dri_state structure for VA/X11 |
570 | * drivers that use the DRM protocol. |
571 | */ |
572 | void *drm_state; |
573 | |
574 | void *glx; /* opaque for GLX code */ |
575 | |
576 | /** \brief VA display type. */ |
577 | unsigned long display_type; |
578 | |
579 | /** |
580 | * The VA/Wayland implementation hooks. |
581 | * |
582 | * This structure is intended for drivers that implement the |
583 | * VA/Wayland API. libVA allocates this structure with calloc() |
584 | * and owns the resulting memory. |
585 | */ |
586 | struct VADriverVTableWayland *vtable_wayland; |
587 | |
588 | /** |
589 | * \brief The VA/VPP implementation hooks. |
590 | * |
591 | * This structure is allocated from libva with calloc(). |
592 | */ |
593 | struct VADriverVTableVPP *vtable_vpp; |
594 | |
595 | char *override_driver_name; |
596 | |
597 | void *pDisplayContext; |
598 | |
599 | /** |
600 | * Error callback. |
601 | * |
602 | * This is set by libva when the driver is opened, and will not be |
603 | * changed thereafter. The driver can call it with an error message, |
604 | * which will be propagated to the API user through their error |
605 | * callbacks, or sent to a default output if no callback is available. |
606 | * |
607 | * It is expected that end users will always be able to see these |
608 | * messages, so it should be called only for serious errors. For |
609 | * example, hardware problems or fatal configuration errors. |
610 | * |
611 | * @param pDriverContext Pointer to the driver context structure |
612 | * being used by the current driver. |
613 | * @param message Message to send to the API user. This must be a |
614 | * null-terminated string. |
615 | */ |
616 | void (*error_callback)(VADriverContextP pDriverContext, |
617 | const char *message); |
618 | /** |
619 | * Info callback. |
620 | * |
621 | * This has the same behaviour as the error callback, but has its |
622 | * own set of callbacks to the API user. |
623 | * |
624 | * It should be used for informational messages which may be useful |
625 | * for an application programmer or for debugging. For example, minor |
626 | * configuration errors, or information about the reason when another |
627 | * API call generates an error return. It is not expected that end |
628 | * users will see these messages. |
629 | * |
630 | * @param pDriverContext Pointer to the driver context structure |
631 | * being used by the current driver. |
632 | * @param message Message to send to the API user. This must be a |
633 | * null-terminated string. |
634 | */ |
635 | void (*info_callback)(VADriverContextP pDriverContext, |
636 | const char *message); |
637 | |
638 | /** |
639 | * \brief The VA/Protected implementation hooks. |
640 | * |
641 | * This structure is allocated from libva with calloc(). |
642 | */ |
643 | struct VADriverVTableProt *vtable_prot; |
644 | |
645 | unsigned long reserved[37]; /* reserve for future add-ins, decrease the subscript accordingly */ |
646 | }; |
647 | |
648 | #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ |
649 | struct VADisplayContext { |
650 | int vadpy_magic; |
651 | |
652 | VADisplayContextP pNext; |
653 | VADriverContextP pDriverContext; |
654 | |
655 | int (*vaIsValid)( |
656 | VADisplayContextP ctx |
657 | ); |
658 | |
659 | void (*vaDestroy)( |
660 | VADisplayContextP ctx |
661 | ); |
662 | |
663 | VAStatus(*vaGetDriverName)( |
664 | VADisplayContextP ctx, |
665 | char **driver_name |
666 | ); |
667 | |
668 | void *opaque; /* opaque for display extensions (e.g. GLX) */ |
669 | void *vatrace; /* opaque for VA trace context */ |
670 | void *vafool; /* opaque for VA fool context */ |
671 | |
672 | VAMessageCallback error_callback; |
673 | void *error_callback_user_context; |
674 | VAMessageCallback info_callback; |
675 | void *info_callback_user_context; |
676 | VAStatus(*vaGetNumCandidates)( |
677 | VADisplayContextP ctx, |
678 | int * num_candidates |
679 | ); |
680 | |
681 | VAStatus(*vaGetDriverNameByIndex)( |
682 | VADisplayContextP ctx, |
683 | char **driver_name, |
684 | int candidate_index |
685 | ); |
686 | |
687 | /** \brief Reserved bytes for future use, must be zero */ |
688 | unsigned long reserved[30]; |
689 | }; |
690 | |
691 | typedef VAStatus(*VADriverInit)( |
692 | VADriverContextP driver_context |
693 | ); |
694 | |
695 | #endif /* _VA_BACKEND_H_ */ |
696 | |