1501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen/**************************************************************************
2501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen *
3990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen * Copyright 2010 Thomas Balling Sørensen & Orasanu Lucian.
4501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * All Rights Reserved.
5501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen *
6501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * Permission is hereby granted, free of charge, to any person obtaining a
7501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * copy of this software and associated documentation files (the
8501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * "Software"), to deal in the Software without restriction, including
9501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * without limitation the rights to use, copy, modify, merge, publish,
10501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * distribute, sub license, and/or sell copies of the Software, and to
11501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * permit persons to whom the Software is furnished to do so, subject to
12501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * the following conditions:
13501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen *
14501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * The above copyright notice and this permission notice (including the
15501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * next paragraph) shall be included in all copies or substantial portions
16501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * of the Software.
17501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen *
18501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen *
26501ac572c604ef248ed41311a065bc5f4746fcb3Thomas Balling Sørensen **************************************************************************/
27990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen
28990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#ifndef VA_PRIVATE_H
29990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#define VA_PRIVATE_H
30990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen
31990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#include <va/va.h>
32990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#include <va/va_backend.h>
335e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König
348bc7ccede1e126329c371e22b6d462edd21720d0Kai Wasserbäch#include "pipe/p_format.h"
358bc7ccede1e126329c371e22b6d462edd21720d0Kai Wasserbäch#include "pipe/p_state.h"
362b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
37990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#define VA_DEBUG(_str,...) debug_printf("[Gallium VA backend]: " _str,__VA_ARGS__)
38990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#define VA_INFO(_str,...) VA_DEBUG("INFO: " _str,__VA_ARGS__)
39990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#define VA_WARNING(_str,...) VA_DEBUG("WARNING: " _str,__VA_ARGS__)
40990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#define VA_ERROR(_str,...) VA_DEBUG("ERROR: " _str,__VA_ARGS__)
41aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling Sørensen
422b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen#define VA_MAX_IMAGE_FORMATS_SUPPORTED 2
432b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen#define VA_MAX_SUBPIC_FORMATS_SUPPORTED 2
442b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen#define VA_MAX_ENTRYPOINTS 1
452b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
462b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen#define VL_HANDLES
472b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
482b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensentypedef struct {
495e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   struct vl_screen *vscreen;
505e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   struct pipe_surface *backbuffer;
512b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen} vlVaDriverContextPriv;
522b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
532b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensentypedef struct {
545e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   unsigned int width;
555e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   unsigned int height;
565e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   enum pipe_video_chroma_format format;
575e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian König   VADriverContextP ctx;
582b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen} vlVaSurfacePriv;
592b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
60aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling Sørensen// Public functions:
61aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling SørensenVAStatus __vaDriverInit_0_31 (VADriverContextP ctx);
62aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling Sørensen
63aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling Sørensen// Private functions:
64aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling Sørensenstruct VADriverVTable vlVaGetVtable();
65fd2cbe94dfaa98b79c16fb81d7bac84c5c683249Thomas Balling Sørensen
665e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian Königbool vlCreateHTAB(void);
675e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian Königvoid vlDestroyHTAB(void);
685e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian KönigVAGenericID vlAddDataHTAB(void *data);
695e5d7acc2f93ddad8212b00c845dbd6381ee4119Christian Königvoid* vlGetDataHTAB(VAGenericID handle);
702b296ec77c2b95e7632b45100de5a0878ac2a294Thomas Balling Sørensen
71fd2cbe94dfaa98b79c16fb81d7bac84c5c683249Thomas Balling Sørensen// Vtable functions:
72990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaTerminate (VADriverContextP ctx);
73990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQueryConfigProfiles (VADriverContextP ctx, VAProfile *profile_list,int *num_profiles);
74990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQueryConfigEntrypoints (VADriverContextP ctx, VAProfile profile, VAEntrypoint  *entrypoint_list, int *num_entrypoints);
75990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaGetConfigAttributes (VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs);
76990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaCreateConfig (VADriverContextP ctx, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs, VAConfigID *config_id);
77990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDestroyConfig (VADriverContextP ctx, VAConfigID config_id);
78990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQueryConfigAttributes (VADriverContextP ctx, VAConfigID config_id, VAProfile *profile, VAEntrypoint *entrypoint, VAConfigAttrib *attrib_list, int *num_attribs);
79990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaCreateSurfaces (VADriverContextP ctx,int width,int height,int format,int num_surfaces,VASurfaceID *surfaces);
80990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDestroySurfaces (VADriverContextP ctx, VASurfaceID *surface_list, int num_surfaces);
81990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaCreateContext (VADriverContextP ctx,VAConfigID config_id,int picture_width,int picture_height,int flag,VASurfaceID *render_targets,int num_render_targets,VAContextID *context);
82990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDestroyContext (VADriverContextP ctx,VAContextID context);
83990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaCreateBuffer (VADriverContextP ctx,VAContextID context,VABufferType type,unsigned int size,unsigned int num_elements,void *data,VABufferID *buf_id);
84990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaBufferSetNumElements (VADriverContextP ctx,VABufferID buf_id,unsigned int num_elements);
85990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaMapBuffer (VADriverContextP ctx,VABufferID buf_id,void **pbuf);
86990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaUnmapBuffer (VADriverContextP ctx,VABufferID buf_id);
87fd2cbe94dfaa98b79c16fb81d7bac84c5c683249Thomas Balling SørensenVAStatus vlVaDestroyBuffer (VADriverContextP ctx,VABufferID buffer_id);
88990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaBeginPicture (VADriverContextP ctx,VAContextID context,VASurfaceID render_target);
89990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaRenderPicture (VADriverContextP ctx,VAContextID context,VABufferID *buffers,int num_buffers);
90990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaEndPicture (VADriverContextP ctx,VAContextID context);
91990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSyncSurface (VADriverContextP ctx,VASurfaceID render_target);
92990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQuerySurfaceStatus (VADriverContextP ctx,VASurfaceID render_target,VASurfaceStatus *status);
93990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaPutSurface (VADriverContextP ctx,
94990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         VASurfaceID surface,
95990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         void* draw,
96990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         short srcx,
97990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         short srcy,
98990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned short srcw,
99990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned short srch,
100990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         short destx,
101990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         short desty,
102990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned short destw,
103990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned short desth,
104990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         VARectangle *cliprects,
105990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int number_cliprects,
106990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int flags);
107aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling SørensenVAStatus vlVaQueryImageFormats (VADriverContextP ctx,VAImageFormat *format_list,int *num_formats);
108aea4d004d2781ebb9cf437c9125ca232dd2d0aebThomas Balling SørensenVAStatus vlVaQuerySubpictureFormats(VADriverContextP ctx,VAImageFormat *format_list,unsigned int *flags,unsigned int *num_formats);
1091dccc4cfaa423f15ab582d2a0253a84a0ae0b9faThomas Balling SørensenVAStatus vlVaCreateImage(VADriverContextP ctx,VAImageFormat *format,int width,int height,VAImage *image);
110990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDeriveImage(VADriverContextP ctx,VASurfaceID surface,VAImage *image);
111990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDestroyImage(VADriverContextP ctx,VAImageID image);
112990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSetImagePalette(VADriverContextP ctx,VAImageID image, unsigned char *palette);
113990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaGetImage(VADriverContextP ctx,VASurfaceID surface,int x,int y,unsigned int width,unsigned int height,VAImageID image);
114990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaPutImage(VADriverContextP ctx,
115990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      VASurfaceID surface,
116990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      VAImageID image,
117990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      int src_x,
118990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      int src_y,
119990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      unsigned int src_width,
120990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      unsigned int src_height,
121990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      int dest_x,
122990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      int dest_y,
123990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      unsigned int dest_width,
124990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                      unsigned int dest_height);
125990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQuerySubpictureFormats(VADriverContextP ctx,VAImageFormat *format_list,unsigned int *flags,unsigned int *num_formats);
126990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaCreateSubpicture(VADriverContextP ctx,VAImageID image,VASubpictureID *subpicture);
127990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDestroySubpicture(VADriverContextP ctx,VASubpictureID subpicture);
128990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSubpictureImage(VADriverContextP ctx,VASubpictureID subpicture,VAImageID image);
129990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSetSubpictureChromakey(VADriverContextP ctx,VASubpictureID subpicture,unsigned int chromakey_min,unsigned int chromakey_max,unsigned int chromakey_mask);
130990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSetSubpictureGlobalAlpha(VADriverContextP ctx,VASubpictureID subpicture,float global_alpha);
131990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaAssociateSubpicture(VADriverContextP ctx,
132990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 VASubpictureID subpicture,
133990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 VASurfaceID *target_surfaces,
134990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 int num_surfaces,
135990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 short src_x,
136990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 short src_y,
137990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 unsigned short src_width,
138990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 unsigned short src_height,
139990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 short dest_x,
140990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 short dest_y,
141990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 unsigned short dest_width,
142990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 unsigned short dest_height,
143990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                                 unsigned int flags);
144990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaDeassociateSubpicture(VADriverContextP ctx,VASubpictureID subpicture,VASurfaceID *target_surfaces,int num_surfaces);
145990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaQueryDisplayAttributes(VADriverContextP ctx,VADisplayAttribute *attr_list,int *num_attributes);
146990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaGetDisplayAttributes(VADriverContextP ctx,VADisplayAttribute *attr_list,int num_attributes);
147990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaSetDisplayAttributes(VADriverContextP ctx,VADisplayAttribute *attr_list,int num_attributes);
148990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaBufferInfo(VADriverContextP ctx,VAContextID context,VABufferID buf_id,VABufferType *type,unsigned int *size,unsigned int *num_elements);
149990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaLockSurface(VADriverContextP ctx,
150990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         VASurfaceID surface,
151990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *fourcc,
152990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *luma_stride,
153990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *chroma_u_stride,
154990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *chroma_v_stride,
155990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *luma_offset,
156990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *chroma_u_offset,
157990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *chroma_v_offset,
158990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         unsigned int *buffer_name,
159990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen                         void **buffer);
160990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling SørensenVAStatus vlVaUnlockSurface(VADriverContextP ctx,VASurfaceID surface);
161990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen
162990cb6296351a41a2e728f181c0dc096eaddaeb7Thomas Balling Sørensen#endif //VA_PRIVATE_H
163