mmmw_plat/openmax_al_api/inc/OpenMAXAL.h
changeset 12 5a06f39ad45b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmmw_plat/openmax_al_api/inc/OpenMAXAL.h	Fri Apr 16 15:29:42 2010 +0300
@@ -0,0 +1,3196 @@
+/*
+ * Copyright (c) 2007-2010 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and/or associated documentation files (the
+ * "Materials "), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to 
+ * the following conditions: 
+ *
+ * The above copyright notice and this permission notice shall be included 
+ * in all copies or substantial portions of the Materials. 
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ *
+ * OpenMAXAL.h - OpenMAX AL version 1.0.1
+ *
+ */
+
+/****************************************************************************/
+/* NOTE: This file is a standard OpenMAX AL header file and should not be   */
+/* modified in any way.                                                     */
+/****************************************************************************/
+
+#ifndef _OPENMAXAL_H_
+#define _OPENMAXAL_H_
+
+#include "OpenMAXAL_Platform.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+  /*****************************************************************/
+  /* TYPES                                                         */
+  /*****************************************************************/
+
+/* remap common types to XA types for clarity */
+typedef xa_int8_t   XAint8;   /* 8 bit signed integer    */
+typedef xa_uint8_t  XAuint8;  /* 8 bit unsigned integer  */
+typedef xa_int16_t  XAint16;  /* 16 bit signed integer   */
+typedef xa_uint16_t XAuint16; /* 16 bit unsigned integer */
+typedef xa_int32_t  XAint32;  /* 32 bit signed integer   */
+typedef xa_uint32_t XAuint32; /* 32 bit unsigned integer */
+typedef xa_uint64_t XAuint64; /* 64 bit unsigned integer */
+
+typedef XAuint32    XAboolean;
+typedef XAuint8     XAchar;
+typedef XAint16     XAmillibel;
+typedef XAuint32    XAmillisecond;
+typedef XAuint32    XAmilliHertz;
+typedef XAint32     XAmillimeter;
+typedef XAint32     XAmillidegree;
+typedef XAint16     XApermille;
+typedef XAuint32    XAmicrosecond;
+typedef XAuint64    XAtime;
+typedef XAuint32    XAresult;
+
+#define XA_BOOLEAN_FALSE                    ((XAuint32) 0x00000000)
+#define XA_BOOLEAN_TRUE                     ((XAuint32) 0x00000001)
+
+#define XA_MILLIBEL_MAX                     ((XAmillibel) 0x7FFF)
+#define XA_MILLIBEL_MIN                     ((XAmillibel) (-XA_MILLIBEL_MAX-1))
+
+#define XA_MILLIHERTZ_MAX                   ((XAmilliHertz) 0xFFFFFFFF)
+
+#define XA_MILLIMETER_MAX                   ((XAmillimeter) 0x7FFFFFFF)
+
+
+
+  /*****************************************************************/
+  /* RESULT CODES                                                  */
+  /*****************************************************************/
+
+#define XA_RESULT_SUCCESS                   ((XAuint32) 0x00000000)
+#define XA_RESULT_PRECONDITIONS_VIOLATED    ((XAuint32) 0x00000001)
+#define XA_RESULT_PARAMETER_INVALID         ((XAuint32) 0x00000002)
+#define XA_RESULT_MEMORY_FAILURE            ((XAuint32) 0x00000003)
+#define XA_RESULT_RESOURCE_ERROR            ((XAuint32) 0x00000004)
+#define XA_RESULT_RESOURCE_LOST             ((XAuint32) 0x00000005)
+#define XA_RESULT_IO_ERROR                  ((XAuint32) 0x00000006)
+#define XA_RESULT_BUFFER_INSUFFICIENT       ((XAuint32) 0x00000007)
+#define XA_RESULT_CONTENT_CORRUPTED         ((XAuint32) 0x00000008)
+#define XA_RESULT_CONTENT_UNSUPPORTED       ((XAuint32) 0x00000009)
+#define XA_RESULT_CONTENT_NOT_FOUND         ((XAuint32) 0x0000000A)
+#define XA_RESULT_PERMISSION_DENIED         ((XAuint32) 0x0000000B)
+#define XA_RESULT_FEATURE_UNSUPPORTED       ((XAuint32) 0x0000000C)
+#define XA_RESULT_INTERNAL_ERROR            ((XAuint32) 0x0000000D)
+#define XA_RESULT_UNKNOWN_ERROR             ((XAuint32) 0x0000000E)
+#define XA_RESULT_OPERATION_ABORTED         ((XAuint32) 0x0000000F)
+#define XA_RESULT_CONTROL_LOST              ((XAuint32) 0x00000010)
+
+
+
+  /*****************************************************************/
+  /* INTERFACE ID DEFINITION                                       */
+  /*****************************************************************/
+
+/* Interface ID defined as a UUID */
+typedef const struct XAInterfaceID_ {
+    XAuint32 time_low;
+    XAuint16 time_mid;
+    XAuint16 time_hi_and_version;
+    XAuint16 clock_seq;
+    XAuint8  node[6];
+} * XAInterfaceID;
+
+/* NULL Interface */
+XA_API extern const XAInterfaceID XA_IID_NULL;
+
+
+
+  /*****************************************************************/
+  /* GENERAL INTERFACES, STRUCTS AND DEFINES                       */
+  /*****************************************************************/
+
+/* OBJECT */
+
+#define XA_PRIORITY_LOWEST                      ((XAint32) (-0x7FFFFFFF-1))
+#define XA_PRIORITY_VERYLOW                     ((XAint32) -0x60000000)
+#define XA_PRIORITY_LOW                         ((XAint32) -0x40000000)
+#define XA_PRIORITY_BELOWNORMAL                 ((XAint32) -0x20000000)
+#define XA_PRIORITY_NORMAL                      ((XAint32) 0x00000000)
+#define XA_PRIORITY_ABOVENORMAL                 ((XAint32) 0x20000000)
+#define XA_PRIORITY_HIGH                        ((XAint32) 0x40000000)
+#define XA_PRIORITY_VERYHIGH                    ((XAint32) 0x60000000)
+#define XA_PRIORITY_HIGHEST                     ((XAint32) 0x7FFFFFFF)
+
+#define XA_OBJECT_EVENT_RUNTIME_ERROR           ((XAuint32) 0x00000001)
+#define XA_OBJECT_EVENT_ASYNC_TERMINATION       ((XAuint32) 0x00000002)
+#define XA_OBJECT_EVENT_RESOURCES_LOST          ((XAuint32) 0x00000003)
+#define XA_OBJECT_EVENT_RESOURCES_AVAILABLE     ((XAuint32) 0x00000004)
+#define XA_OBJECT_EVENT_ITF_CONTROL_TAKEN       ((XAuint32) 0x00000005)
+#define XA_OBJECT_EVENT_ITF_CONTROL_RETURNED    ((XAuint32) 0x00000006)
+#define XA_OBJECT_EVENT_ITF_PARAMETERS_CHANGED  ((XAuint32) 0x00000007)
+
+#define XA_OBJECT_STATE_UNREALIZED              ((XAuint32) 0x00000001)
+#define XA_OBJECT_STATE_REALIZED                ((XAuint32) 0x00000002)
+#define XA_OBJECT_STATE_SUSPENDED               ((XAuint32) 0x00000003)
+
+
+XA_API extern const XAInterfaceID XA_IID_OBJECT;
+
+struct XAObjectItf_;
+typedef const struct XAObjectItf_ * const * XAObjectItf;
+
+typedef void (XAAPIENTRY * xaObjectCallback) (
+    XAObjectItf caller,
+    const void * pContext,
+    XAuint32 event,
+    XAresult result,
+    XAuint32 param,
+    void * pInterface
+);
+
+struct XAObjectItf_ {
+    XAresult (*Realize) (
+        XAObjectItf self,
+        XAboolean async
+    );
+    XAresult (*Resume) (
+        XAObjectItf self,
+        XAboolean async
+    );
+    XAresult (*GetState) (
+        XAObjectItf self,
+        XAuint32 * pState
+    );
+    XAresult (*GetInterface) (
+        XAObjectItf self,
+        const XAInterfaceID iid,
+        void * pInterface
+    );
+    XAresult (*RegisterCallback) (
+        XAObjectItf self,
+        xaObjectCallback callback,
+        void * pContext
+    );
+    void (*AbortAsyncOperation) (
+        XAObjectItf self
+    );
+    void (*Destroy) (
+        XAObjectItf self
+    );
+    XAresult (*SetPriority) (
+        XAObjectItf self,
+        XAint32 priority,
+        XAboolean preemptable
+    );
+    XAresult (*GetPriority) (
+        XAObjectItf self,
+        XAint32 * pPriority,
+        XAboolean * pPreemptable
+    );
+    XAresult (*SetLossOfControlInterfaces) (
+        XAObjectItf self,
+        XAint16 numInterfaces,
+        XAInterfaceID * pInterfaceIDs,
+        XAboolean enabled
+    );
+};
+
+/* CONFIG EXTENSION */
+
+XA_API extern const XAInterfaceID XA_IID_CONFIGEXTENSION;
+
+struct XAConfigExtensionsItf_;
+typedef const struct XAConfigExtensionsItf_ 
+    * const * XAConfigExtensionsItf;
+
+struct XAConfigExtensionsItf_ {
+    XAresult (*SetConfiguration) (
+        XAConfigExtensionsItf self, 
+        const XAchar * configKey,
+        XAuint32 valueSize, 
+        const void * pConfigValue
+    );
+    XAresult (*GetConfiguration) (
+        XAConfigExtensionsItf self, 
+        const XAchar * configKey, 
+        XAuint32 * pValueSize,
+        void * pConfigValue
+    );
+};
+
+/* DYNAMIC INTERFACE MANAGEMENT */
+
+#define XA_DYNAMIC_ITF_EVENT_RUNTIME_ERROR              ((XAuint32) 0x00000001)
+#define XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION          ((XAuint32) 0x00000002)
+#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST             ((XAuint32) 0x00000003)
+#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((XAuint32) 0x00000004)
+#define XA_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE        ((XAuint32) 0x00000005)
+
+XA_API extern const XAInterfaceID XA_IID_DYNAMICINTERFACEMANAGEMENT;
+
+struct XADynamicInterfaceManagementItf_;
+typedef const struct XADynamicInterfaceManagementItf_
+    * const * XADynamicInterfaceManagementItf;
+
+typedef void (XAAPIENTRY * xaDynamicInterfaceManagementCallback) (
+    XADynamicInterfaceManagementItf caller,
+    void * pContext,
+    XAuint32 event,
+    XAresult result,
+    const XAInterfaceID iid
+);
+
+struct XADynamicInterfaceManagementItf_ {
+    XAresult (*AddInterface) (
+        XADynamicInterfaceManagementItf self,
+        const XAInterfaceID iid,
+        XAboolean aysnc
+    );
+    XAresult (*RemoveInterface) (
+        XADynamicInterfaceManagementItf self,
+        const XAInterfaceID iid
+    );
+    XAresult (*ResumeInterface) (
+        XADynamicInterfaceManagementItf self,
+        const XAInterfaceID iid,
+        XAboolean aysnc
+    );
+    XAresult (*RegisterCallback) (
+        XADynamicInterfaceManagementItf self,
+        xaDynamicInterfaceManagementCallback callback,
+        void * pContext
+    );
+};
+
+/* DATA SOURCES/SINKS */
+
+#define XA_DATAFORMAT_MIME              ((XAuint32) 0x00000001)
+#define XA_DATAFORMAT_PCM               ((XAuint32) 0x00000002)
+#define XA_DATAFORMAT_RAWIMAGE          ((XAuint32) 0x00000003)
+
+#define XA_DATALOCATOR_URI              ((XAuint32) 0x00000001)
+#define XA_DATALOCATOR_ADDRESS          ((XAuint32) 0x00000002)
+#define XA_DATALOCATOR_IODEVICE         ((XAuint32) 0x00000003)
+#define XA_DATALOCATOR_OUTPUTMIX        ((XAuint32) 0x00000004)
+#define XA_DATALOCATOR_NATIVEDISPLAY    ((XAuint32) 0x00000005)
+#define XA_DATALOCATOR_RESERVED6        ((XAuint32) 0x00000006)
+#define XA_DATALOCATOR_RESERVED7        ((XAuint32) 0x00000007)
+
+typedef struct XADataSink_ {
+    void * pLocator;
+    void * pFormat;
+} XADataSink;
+
+typedef struct XADataSource_ {
+    void * pLocator;
+    void * pFormat;
+} XADataSource;
+
+#define XA_CONTAINERTYPE_UNSPECIFIED    ((XAuint32) 0x00000001)
+#define XA_CONTAINERTYPE_RAW            ((XAuint32) 0x00000002)
+#define XA_CONTAINERTYPE_ASF            ((XAuint32) 0x00000003)
+#define XA_CONTAINERTYPE_AVI            ((XAuint32) 0x00000004)
+#define XA_CONTAINERTYPE_BMP            ((XAuint32) 0x00000005)
+#define XA_CONTAINERTYPE_JPG            ((XAuint32) 0x00000006)
+#define XA_CONTAINERTYPE_JPG2000        ((XAuint32) 0x00000007)
+#define XA_CONTAINERTYPE_M4A            ((XAuint32) 0x00000008)
+#define XA_CONTAINERTYPE_MP3            ((XAuint32) 0x00000009)
+#define XA_CONTAINERTYPE_MP4            ((XAuint32) 0x0000000A)
+#define XA_CONTAINERTYPE_MPEG_ES        ((XAuint32) 0x0000000B)
+#define XA_CONTAINERTYPE_MPEG_PS        ((XAuint32) 0x0000000C)
+#define XA_CONTAINERTYPE_MPEG_TS        ((XAuint32) 0x0000000D)
+#define XA_CONTAINERTYPE_QT             ((XAuint32) 0x0000000E)
+#define XA_CONTAINERTYPE_WAV            ((XAuint32) 0x0000000F)
+#define XA_CONTAINERTYPE_XMF_0          ((XAuint32) 0x00000010)
+#define XA_CONTAINERTYPE_XMF_1          ((XAuint32) 0x00000011)
+#define XA_CONTAINERTYPE_XMF_2          ((XAuint32) 0x00000012)
+#define XA_CONTAINERTYPE_XMF_3          ((XAuint32) 0x00000013)
+#define XA_CONTAINERTYPE_XMF_GENERIC    ((XAuint32) 0x00000014)
+#define XA_CONTAINERTYPE_AMR            ((XAuint32) 0x00000015)
+#define XA_CONTAINERTYPE_AAC            ((XAuint32) 0x00000016)
+#define XA_CONTAINERTYPE_3GPP           ((XAuint32) 0x00000017)
+#define XA_CONTAINERTYPE_3GA            ((XAuint32) 0x00000018)
+#define XA_CONTAINERTYPE_RM             ((XAuint32) 0x00000019)
+#define XA_CONTAINERTYPE_DMF            ((XAuint32) 0x0000001A)
+#define XA_CONTAINERTYPE_SMF            ((XAuint32) 0x0000001B)
+#define XA_CONTAINERTYPE_MOBILE_DLS     ((XAuint32) 0x0000001C)
+#define XA_CONTAINERTYPE_OGG            ((XAuint32) 0x0000001D)
+
+typedef struct XADataFormat_MIME_ {
+    XAuint32 formatType;
+    XAchar * mimeType;
+    XAuint32 containerType;
+} XADataFormat_MIME;
+
+#define XA_BYTEORDER_BIGENDIAN          ((XAuint32) 0x00000001)
+#define XA_BYTEORDER_LITTLEENDIAN       ((XAuint32) 0x00000002)
+
+#define XA_SAMPLINGRATE_8               ((XAuint32)   8000000)
+#define XA_SAMPLINGRATE_11_025          ((XAuint32)  11025000)
+#define XA_SAMPLINGRATE_12              ((XAuint32)  12000000)
+#define XA_SAMPLINGRATE_16              ((XAuint32)  16000000)
+#define XA_SAMPLINGRATE_22_05           ((XAuint32)  22050000)
+#define XA_SAMPLINGRATE_24              ((XAuint32)  24000000)
+#define XA_SAMPLINGRATE_32              ((XAuint32)  32000000)
+#define XA_SAMPLINGRATE_44_1            ((XAuint32)  44100000)
+#define XA_SAMPLINGRATE_48              ((XAuint32)  48000000)
+#define XA_SAMPLINGRATE_64              ((XAuint32)  64000000)
+#define XA_SAMPLINGRATE_88_2            ((XAuint32)  88200000)
+#define XA_SAMPLINGRATE_96              ((XAuint32)  96000000)
+#define XA_SAMPLINGRATE_192             ((XAuint32) 192000000)
+
+#define XA_SPEAKER_FRONT_LEFT               ((XAuint32) 0x00000001)
+#define XA_SPEAKER_FRONT_RIGHT              ((XAuint32) 0x00000002)
+#define XA_SPEAKER_FRONT_CENTER             ((XAuint32) 0x00000004)
+#define XA_SPEAKER_LOW_FREQUENCY            ((XAuint32) 0x00000008)
+#define XA_SPEAKER_BACK_LEFT                ((XAuint32) 0x00000010)
+#define XA_SPEAKER_BACK_RIGHT               ((XAuint32) 0x00000020)
+#define XA_SPEAKER_FRONT_LEFT_OF_CENTER     ((XAuint32) 0x00000040)
+#define XA_SPEAKER_FRONT_RIGHT_OF_CENTER    ((XAuint32) 0x00000080)
+#define XA_SPEAKER_BACK_CENTER              ((XAuint32) 0x00000100)
+#define XA_SPEAKER_SIDE_LEFT                ((XAuint32) 0x00000200)
+#define XA_SPEAKER_SIDE_RIGHT               ((XAuint32) 0x00000400)
+#define XA_SPEAKER_TOP_CENTER               ((XAuint32) 0x00000800)
+#define XA_SPEAKER_TOP_FRONT_LEFT           ((XAuint32) 0x00001000)
+#define XA_SPEAKER_TOP_FRONT_CENTER         ((XAuint32) 0x00002000)
+#define XA_SPEAKER_TOP_FRONT_RIGHT          ((XAuint32) 0x00004000)
+#define XA_SPEAKER_TOP_BACK_LEFT            ((XAuint32) 0x00008000)
+#define XA_SPEAKER_TOP_BACK_CENTER          ((XAuint32) 0x00010000)
+#define XA_SPEAKER_TOP_BACK_RIGHT           ((XAuint32) 0x00020000)
+
+#define XA_PCMSAMPLEFORMAT_FIXED_8          ((XAuint16) 0x0008)
+#define XA_PCMSAMPLEFORMAT_FIXED_16         ((XAuint16) 0x0010)
+#define XA_PCMSAMPLEFORMAT_FIXED_20         ((XAuint16) 0x0014)
+#define XA_PCMSAMPLEFORMAT_FIXED_24         ((XAuint16) 0x0018)
+#define XA_PCMSAMPLEFORMAT_FIXED_28         ((XAuint16) 0x001C)
+#define XA_PCMSAMPLEFORMAT_FIXED_32         ((XAuint16) 0x0020)
+
+typedef struct XADataFormat_PCM_ {
+    XAuint32 formatType;
+    XAuint32 numChannels;
+    XAuint32 samplesPerSec;
+    XAuint32 bitsPerSample;
+    XAuint32 containerSize;
+    XAuint32 channelMask;
+    XAuint32 endianness;
+} XADataFormat_PCM;
+
+#define XA_COLORFORMAT_UNUSED                   ((XAuint32) 0x00000000)
+#define XA_COLORFORMAT_MONOCHROME               ((XAuint32) 0x00000001)
+#define XA_COLORFORMAT_8BITRGB332               ((XAuint32) 0x00000002)
+#define XA_COLORFORMAT_12BITRGB444              ((XAuint32) 0x00000003)
+#define XA_COLORFORMAT_16BITARGB4444            ((XAuint32) 0x00000004)
+#define XA_COLORFORMAT_16BITARGB1555            ((XAuint32) 0x00000005)
+#define XA_COLORFORMAT_16BITRGB565              ((XAuint32) 0x00000006)
+#define XA_COLORFORMAT_16BITBGR565              ((XAuint32) 0x00000007)
+#define XA_COLORFORMAT_18BITRGB666              ((XAuint32) 0x00000008)
+#define XA_COLORFORMAT_18BITARGB1665            ((XAuint32) 0x00000009)
+#define XA_COLORFORMAT_19BITARGB1666            ((XAuint32) 0x0000000A)
+#define XA_COLORFORMAT_24BITRGB888              ((XAuint32) 0x0000000B)
+#define XA_COLORFORMAT_24BITBGR888              ((XAuint32) 0x0000000C)
+#define XA_COLORFORMAT_24BITARGB1887            ((XAuint32) 0x0000000D)
+#define XA_COLORFORMAT_25BITARGB1888            ((XAuint32) 0x0000000E)
+#define XA_COLORFORMAT_32BITBGRA8888            ((XAuint32) 0x0000000F)
+#define XA_COLORFORMAT_32BITARGB8888            ((XAuint32) 0x00000010)
+#define XA_COLORFORMAT_YUV411PLANAR             ((XAuint32) 0x00000011)
+#define XA_COLORFORMAT_YUV420PLANAR             ((XAuint32) 0x00000013)
+#define XA_COLORFORMAT_YUV420SEMIPLANAR         ((XAuint32) 0x00000015)
+#define XA_COLORFORMAT_YUV422PLANAR             ((XAuint32) 0x00000016)
+#define XA_COLORFORMAT_YUV422SEMIPLANAR         ((XAuint32) 0x00000018)
+#define XA_COLORFORMAT_YCBYCR                   ((XAuint32) 0x00000019)
+#define XA_COLORFORMAT_YCRYCB                   ((XAuint32) 0x0000001A)
+#define XA_COLORFORMAT_CBYCRY                   ((XAuint32) 0x0000001B)
+#define XA_COLORFORMAT_CRYCBY                   ((XAuint32) 0x0000001C)
+#define XA_COLORFORMAT_YUV444INTERLEAVED        ((XAuint32) 0x0000001D)
+#define XA_COLORFORMAT_RAWBAYER8BIT             ((XAuint32) 0x0000001E)
+#define XA_COLORFORMAT_RAWBAYER10BIT            ((XAuint32) 0x0000001F)
+#define XA_COLORFORMAT_RAWBAYER8BITCOMPRESSED   ((XAuint32) 0x00000020)
+#define XA_COLORFORMAT_L2                       ((XAuint32) 0x00000021)
+#define XA_COLORFORMAT_L4                       ((XAuint32) 0x00000022)
+#define XA_COLORFORMAT_L8                       ((XAuint32) 0x00000023)
+#define XA_COLORFORMAT_L16                      ((XAuint32) 0x00000024)
+#define XA_COLORFORMAT_L24                      ((XAuint32) 0x00000025)
+#define XA_COLORFORMAT_L32                      ((XAuint32) 0x00000026)
+#define XA_COLORFORMAT_18BITBGR666              ((XAuint32) 0x00000029)
+#define XA_COLORFORMAT_24BITARGB6666            ((XAuint32) 0x0000002A)
+#define XA_COLORFORMAT_24BITABGR6666            ((XAuint32) 0x0000002B)
+
+typedef struct XADataFormat_RawImage_ {
+    XAuint32 formatType;
+    XAuint32 colorFormat;
+    XAuint32 height;
+    XAuint32 width;
+    XAuint32 stride;
+} XADataFormat_RawImage;
+
+typedef struct XADataLocator_Address_ {
+    XAuint32 locatorType;
+    void * pAddress;
+    XAuint32 length;
+} XADataLocator_Address;
+
+#define XA_IODEVICE_AUDIOINPUT          ((XAuint32) 0x00000001)
+#define XA_IODEVICE_LEDARRAY            ((XAuint32) 0x00000002)
+#define XA_IODEVICE_VIBRA               ((XAuint32) 0x00000003)
+#define XA_IODEVICE_CAMERA              ((XAuint32) 0x00000004)
+#define XA_IODEVICE_RADIO               ((XAuint32) 0x00000005)
+
+typedef struct XADataLocator_IODevice_ {
+    XAuint32 locatorType;
+    XAuint32 deviceType;
+    XAuint32 deviceID;
+    XAObjectItf device;
+} XADataLocator_IODevice;
+
+typedef void * XANativeHandle;
+
+typedef struct XADataLocator_NativeDisplay_{
+    XAuint32 locatorType;
+    XANativeHandle hWindow;
+    XANativeHandle hDisplay;
+} XADataLocator_NativeDisplay;
+
+typedef struct XADataLocator_OutputMix {
+    XAuint32 locatorType;
+    XAObjectItf outputMix;
+} XADataLocator_OutputMix;
+
+typedef struct XADataLocator_URI_ {
+    XAuint32 locatorType;
+    XAchar * URI;
+} XADataLocator_URI;
+
+
+/* ENGINE */
+
+#define XA_DEFAULTDEVICEID_AUDIOINPUT   ((XAuint32) 0xFFFFFFFF)
+#define XA_DEFAULTDEVICEID_AUDIOOUTPUT  ((XAuint32) 0xFFFFFFFE)
+#define XA_DEFAULTDEVICEID_LED          ((XAuint32) 0xFFFFFFFD)
+#define XA_DEFAULTDEVICEID_VIBRA        ((XAuint32) 0xFFFFFFFC)
+#define XA_DEFAULTDEVICEID_CAMERA       ((XAuint32) 0xFFFFFFFB)
+
+#define XA_ENGINEOPTION_THREADSAFE      ((XAuint32) 0x00000001)
+#define XA_ENGINEOPTION_LOSSOFCONTROL   ((XAuint32) 0x00000002)
+
+#define XA_OBJECTID_ENGINE              ((XAuint32) 0x00000001)
+#define XA_OBJECTID_LEDDEVICE           ((XAuint32) 0x00000002)
+#define XA_OBJECTID_VIBRADEVICE         ((XAuint32) 0x00000003)
+#define XA_OBJECTID_MEDIAPLAYER         ((XAuint32) 0x00000004)
+#define XA_OBJECTID_MEDIARECORDER       ((XAuint32) 0x00000005)
+#define XA_OBJECTID_RADIODEVICE         ((XAuint32) 0x00000006)
+#define XA_OBJECTID_OUTPUTMIX           ((XAuint32) 0x00000007)
+#define XA_OBJECTID_METADATAEXTRACTOR   ((XAuint32) 0x00000008)
+#define XA_OBJECTID_CAMERADEVICE        ((XAuint32) 0x00000009)
+
+#define XA_PROFILES_MEDIA_PLAYER            ((XAint16) 0x0001)
+#define XA_PROFILES_MEDIA_PLAYER_RECORDER   ((XAint16) 0x0002)
+#define XA_PROFILES_PLUS_MIDI               ((XAint16) 0x0004)
+
+typedef struct XAEngineOption_ {
+    XAuint32 feature;
+    XAuint32 data; 
+} XAEngineOption;
+
+XA_API XAresult XAAPIENTRY xaCreateEngine( 
+    XAObjectItf * pEngine,
+    XAuint32 numOptions,
+    const XAEngineOption * pEngineOptions,
+    XAuint32 numInterfaces,
+    const XAInterfaceID * pInterfaceIds,
+    const XAboolean * pInterfaceRequired
+);
+
+XA_API XAresult XAAPIENTRY xaQueryNumSupportedEngineInterfaces(
+    XAuint32 * pNumSupportedInterfaces
+);
+
+XA_API XAresult XAAPIENTRY xaQuerySupportedEngineInterfaces(
+    XAuint32 index,
+    XAInterfaceID * pInterfaceId
+);
+
+typedef struct XALEDDescriptor_ {
+    XAuint8 ledCount;
+    XAuint8 primaryLED;
+    XAuint32 colorMask;
+} XALEDDescriptor;
+
+typedef struct XAVibraDescriptor_ {
+    XAboolean supportsFrequency;
+    XAboolean supportsIntensity;
+    XAmilliHertz minFrequency;
+    XAmilliHertz maxFrequency;
+} XAVibraDescriptor;
+
+
+XA_API extern const XAInterfaceID XA_IID_ENGINE;
+
+struct XAEngineItf_;
+typedef const struct XAEngineItf_ * const * XAEngineItf;
+
+struct XAEngineItf_ {
+    XAresult (*CreateCameraDevice) (
+        XAEngineItf self,
+        XAObjectItf * pDevice,
+        XAuint32 deviceID,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateRadioDevice) (
+        XAEngineItf self,
+        XAObjectItf * pDevice,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateLEDDevice) (
+        XAEngineItf self,
+        XAObjectItf * pDevice,
+        XAuint32 deviceID,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+       XAresult (*CreateVibraDevice) (
+        XAEngineItf self,
+        XAObjectItf * pDevice,
+        XAuint32 deviceID,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateMediaPlayer) (
+        XAEngineItf self,
+        XAObjectItf * pPlayer,
+        XADataSource * pDataSrc,
+        XADataSource * pBankSrc,
+        XADataSink * pAudioSnk,
+        XADataSink * pImageVideoSnk,
+        XADataSink * pVibra,
+        XADataSink * pLEDArray,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateMediaRecorder) (
+        XAEngineItf self,
+        XAObjectItf * pRecorder,
+        XADataSource * pAudioSrc,
+        XADataSource * pImageVideoSrc,
+        XADataSink * pDataSnk,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateOutputMix) (
+        XAEngineItf self,
+        XAObjectItf * pMix,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateMetadataExtractor) (
+        XAEngineItf self,
+        XAObjectItf * pMetadataExtractor,
+        XADataSource * pDataSource,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*CreateExtensionObject) (
+        XAEngineItf self,
+        XAObjectItf * pObject,
+        void * pParameters,
+        XAuint32 objectID,
+        XAuint32 numInterfaces,
+        const XAInterfaceID * pInterfaceIds,
+        const XAboolean * pInterfaceRequired
+    );
+    XAresult (*GetImplementationInfo) (
+        XAEngineItf self,
+        XAuint32 * pMajor,
+        XAuint32 * pMinor,
+        XAuint32 * pStep,
+        const XAchar * pImplementationText
+    );
+    XAresult (*QuerySupportedProfiles) (
+        XAEngineItf self,
+        XAint16 * pProfilesSupported
+    );
+    XAresult (*QueryNumSupportedInterfaces) (
+        XAEngineItf self,
+        XAuint32 objectID,
+        XAuint32 * pNumSupportedInterfaces
+    );
+    XAresult (*QuerySupportedInterfaces) (
+        XAEngineItf self,
+        XAuint32 objectID,
+        XAuint32 index, 
+        XAInterfaceID * pInterfaceId
+    );
+    XAresult (*QueryNumSupportedExtensions) (
+        XAEngineItf self,
+        XAuint32 * pNumExtensions
+    );
+    XAresult (*QuerySupportedExtension) (
+        XAEngineItf self, 
+        XAuint32 index,
+        XAchar * pExtensionName,
+        XAint16 * pNameLength
+    );
+    XAresult (*IsExtensionSupported) (
+        XAEngineItf self, 
+        const XAchar * pExtensionName,
+        XAboolean * pSupported
+    );
+    XAresult (*QueryLEDCapabilities) (
+        XAEngineItf self,
+        XAuint32 *pIndex,
+        XAuint32 * pLEDDeviceID,
+        XALEDDescriptor * pDescriptor
+    );
+    XAresult (*QueryVibraCapabilities) (
+        XAEngineItf self,
+        XAuint32 *pIndex,
+        XAuint32 * pVibraDeviceID,
+        XAVibraDescriptor * pDescriptor
+    );
+};
+
+/* THREAD SYNC */
+
+XA_API extern const XAInterfaceID XA_IID_THREADSYNC;
+
+struct XAThreadSyncItf_;
+typedef const struct XAThreadSyncItf_ * const * XAThreadSyncItf;
+
+struct XAThreadSyncItf_ {
+    XAresult (*EnterCriticalSection) (
+        XAThreadSyncItf self
+    );
+    XAresult (*ExitCriticalSection) (
+        XAThreadSyncItf self
+    );
+};
+
+
+
+  /*****************************************************************/
+  /* PLAYBACK RELATED INTERFACES, STRUCTS AND DEFINES              */
+  /*****************************************************************/
+
+/* PLAY */
+
+#define XA_TIME_UNKNOWN                     ((XAuint32) 0xFFFFFFFF)
+
+#define XA_PLAYEVENT_HEADATEND              ((XAuint32) 0x00000001)
+#define XA_PLAYEVENT_HEADATMARKER           ((XAuint32) 0x00000002)
+#define XA_PLAYEVENT_HEADATNEWPOS           ((XAuint32) 0x00000004)
+#define XA_PLAYEVENT_HEADMOVING             ((XAuint32) 0x00000008)
+#define XA_PLAYEVENT_HEADSTALLED            ((XAuint32) 0x00000010)
+
+#define XA_PLAYSTATE_STOPPED                ((XAuint32) 0x00000001)
+#define XA_PLAYSTATE_PAUSED                 ((XAuint32) 0x00000002)
+#define XA_PLAYSTATE_PLAYING                ((XAuint32) 0x00000003)
+
+#define XA_PREFETCHEVENT_STATUSCHANGE       ((XAuint32) 0x00000001)
+#define XA_PREFETCHEVENT_FILLLEVELCHANGE    ((XAuint32) 0x00000002)
+
+#define XA_PREFETCHSTATUS_UNDERFLOW         ((XAuint32) 0x00000001)
+#define XA_PREFETCHSTATUS_SUFFICIENTDATA    ((XAuint32) 0x00000002)
+#define XA_PREFETCHSTATUS_OVERFLOW          ((XAuint32) 0x00000003)
+
+#define XA_SEEKMODE_FAST                    ((XAuint32) 0x0001)
+#define XA_SEEKMODE_ACCURATE                ((XAuint32) 0x0002)
+
+XA_API extern const XAInterfaceID XA_IID_PLAY;
+
+struct XAPlayItf_;
+typedef const struct XAPlayItf_ * const * XAPlayItf;
+
+typedef void (XAAPIENTRY * xaPlayCallback) (
+    XAPlayItf caller,
+    void * pContext,
+    XAuint32 event
+);
+
+struct XAPlayItf_ {
+    XAresult (*SetPlayState) (
+        XAPlayItf self,
+        XAuint32 state
+    );
+    XAresult (*GetPlayState) (
+        XAPlayItf self,
+        XAuint32 * pState
+    );
+    XAresult (*GetDuration) (
+        XAPlayItf self, 
+        XAmillisecond * pMsec
+    );
+    XAresult (*GetPosition) (
+        XAPlayItf self, 
+        XAmillisecond * pMsec
+    );
+    XAresult (*RegisterCallback) (
+        XAPlayItf self,
+        xaPlayCallback callback,
+        void * pContext
+    );
+    XAresult (*SetCallbackEventsMask) (
+        XAPlayItf self,
+        XAuint32 eventFlags
+    );
+    XAresult (*GetCallbackEventsMask) (
+        XAPlayItf self,
+        XAuint32 * pEventFlags
+    );
+    XAresult (*SetMarkerPosition) (
+        XAPlayItf self,
+        XAmillisecond mSec
+    );
+    XAresult (*ClearMarkerPosition) (
+        XAPlayItf self
+    );
+    XAresult (*GetMarkerPosition) (
+        XAPlayItf self,
+        XAmillisecond * pMsec
+    );
+    XAresult (*SetPositionUpdatePeriod) (
+        XAPlayItf self,
+        XAmillisecond mSec
+    );
+    XAresult (*GetPositionUpdatePeriod) (
+        XAPlayItf self,
+        XAmillisecond * pMsec
+    );
+};
+
+/* PLAYBACK RATE */
+
+#define XA_RATEPROP_STAGGEREDVIDEO      ((XAuint32) 0x00000001)
+#define XA_RATEPROP_SMOOTHVIDEO         ((XAuint32) 0x00000002)
+#define XA_RATEPROP_SILENTAUDIO         ((XAuint32) 0x00000100)
+#define XA_RATEPROP_STAGGEREDAUDIO      ((XAuint32) 0x00000200)
+#define XA_RATEPROP_NOPITCHCORAUDIO     ((XAuint32) 0x00000400)
+#define XA_RATEPROP_PITCHCORAUDIO       ((XAuint32) 0x00000800)
+
+XA_API extern const XAInterfaceID XA_IID_PLAYBACKRATE;
+
+struct XAPlaybackRateItf_;
+typedef const struct XAPlaybackRateItf_ * const * XAPlaybackRateItf;
+
+struct XAPlaybackRateItf_ {
+    XAresult (*SetRate) (
+        XAPlaybackRateItf self,
+        XApermille rate
+    );
+    XAresult (*GetRate) (
+        XAPlaybackRateItf self,
+        XApermille * pRate
+    );
+    XAresult (*SetPropertyConstraints) (
+        XAPlaybackRateItf self,
+        XAuint32 constraints
+    );
+    XAresult (*GetProperties) (
+        XAPlaybackRateItf self,
+        XAuint32 * pProperties
+    );
+    XAresult (*GetCapabilitiesOfRate) (
+        XAPlaybackRateItf self,
+        XApermille rate,
+        XAuint32 * pCapabilities
+    );
+    XAresult (*GetRateRange) (
+        XAPlaybackRateItf self,
+        XAuint8 index,
+        XApermille * pMinRate,
+        XApermille * pMaxRate,
+        XApermille * pStepSize,
+        XAuint32 * pCapabilities
+    );
+};
+
+/* PREFETCH STATUS */
+
+XA_API extern const XAInterfaceID XA_IID_PREFETCHSTATUS;
+
+struct XAPrefetchStatusItf_;
+typedef const struct XAPrefetchStatusItf_ 
+    * const * XAPrefetchStatusItf;
+
+typedef void (XAAPIENTRY * xaPrefetchCallback) (
+    XAPrefetchStatusItf caller,
+    void * pContext,
+    XAuint32 event
+);
+
+struct XAPrefetchStatusItf_ {
+    XAresult (*GetPrefetchStatus) (
+        XAPrefetchStatusItf self, 
+        XAuint32 * pStatus
+    );
+    XAresult (*GetFillLevel) (
+        XAPrefetchStatusItf self, 
+        XApermille * pLevel
+    );
+    XAresult (*RegisterCallback) (
+        XAPrefetchStatusItf self,
+        xaPrefetchCallback callback,
+        void * pContext
+    );
+    XAresult (*SetCallbackEventsMask) (
+        XAPrefetchStatusItf self, 
+        XAuint32 eventFlags
+    );
+    XAresult (*GetCallbackEventsMask) (
+        XAPrefetchStatusItf self, 
+        XAuint32 * pEventFlags
+    );
+    XAresult (*SetFillUpdatePeriod) (
+        XAPrefetchStatusItf self, 
+        XApermille period
+    );
+    XAresult (*GetFillUpdatePeriod) (
+        XAPrefetchStatusItf self, 
+        XApermille * pPeriod
+    );
+};
+
+/* SEEK */
+
+XA_API extern const XAInterfaceID XA_IID_SEEK;
+
+struct XASeekItf_;
+typedef const struct XASeekItf_ * const * XASeekItf;
+
+struct XASeekItf_ {
+    XAresult (*SetPosition) (
+        XASeekItf self,
+        XAmillisecond pos,
+        XAuint32 seekMode
+    );
+    XAresult (*SetLoop) (
+        XASeekItf self,
+        XAboolean loopEnable,
+        XAmillisecond startPos,
+        XAmillisecond endPos
+    );
+    XAresult (*GetLoop) (
+        XASeekItf self,
+        XAboolean * pLoopEnabled,
+        XAmillisecond * pStartPos,
+        XAmillisecond * pEndPos
+    );
+};
+
+/* VOLUME */
+
+XA_API extern const XAInterfaceID XA_IID_VOLUME;
+
+struct XAVolumeItf_;
+typedef const struct XAVolumeItf_ * const * XAVolumeItf;
+
+struct XAVolumeItf_ {
+    XAresult (*SetVolumeLevel) (
+        XAVolumeItf self,
+        XAmillibel level
+    );
+    XAresult (*GetVolumeLevel) (
+        XAVolumeItf self,
+        XAmillibel * pLevel
+    );
+    XAresult (*GetMaxVolumeLevel) (
+        XAVolumeItf self,
+        XAmillibel * pMaxLevel
+    );
+    XAresult (*SetMute) (
+        XAVolumeItf self,
+        XAboolean mute
+    );
+    XAresult (*GetMute) (
+        XAVolumeItf self,
+        XAboolean * pMute
+    );
+    XAresult (*EnableStereoPosition) (
+        XAVolumeItf self,
+        XAboolean enable
+    );
+    XAresult (*IsEnabledStereoPosition) (
+        XAVolumeItf self,
+        XAboolean * pEnable
+    );
+    XAresult (*SetStereoPosition) (
+        XAVolumeItf self,
+        XApermille stereoPosition
+    );
+    XAresult (*GetStereoPosition) (
+        XAVolumeItf self,
+        XApermille * pStereoPosition
+    );
+};
+
+/* IMAGE CONTROL */
+
+XA_API extern const XAInterfaceID XA_IID_IMAGECONTROLS;
+
+struct XAImageControlsItf_;
+typedef const struct XAImageControlsItf_ * const * XAImageControlsItf;
+
+struct XAImageControlsItf_ {
+    XAresult (*SetBrightness) (
+        XAImageControlsItf self,
+        XAuint32 brightness
+    );
+    XAresult (*GetBrightness) (
+        XAImageControlsItf self,
+        XAuint32 * pBrightness
+    );
+    XAresult (*SetContrast) (
+        XAImageControlsItf self,
+        XAint32 contrast
+    );
+    XAresult (*GetContrast) (
+        XAImageControlsItf self,
+        XAint32 * pContrast
+    );
+    XAresult (*SetGamma) (
+        XAImageControlsItf self,
+        XApermille gamma
+    );
+    XAresult (*GetGamma) (
+        XAImageControlsItf self,
+        XApermille * pGamma
+    );
+    XAresult (*GetSupportedGammaSettings) (
+        XAImageControlsItf self,
+        XApermille * pMinValue,
+        XApermille * pMaxValue,
+        XAuint32 * pNumSettings,
+        XApermille ** ppSettings
+    );
+};
+
+/* IMAGE EFFECT */
+
+#define XA_IMAGEEFFECT_MONOCHROME       ((XAuint32) 0x00000001)
+#define XA_IMAGEEFFECT_NEGATIVE         ((XAuint32) 0x00000002)
+#define XA_IMAGEEFFECT_SEPIA            ((XAuint32) 0x00000003)
+#define XA_IMAGEEFFECT_EMBOSS           ((XAuint32) 0x00000004)
+#define XA_IMAGEEFFECT_PAINTBRUSH       ((XAuint32) 0x00000005)
+#define XA_IMAGEEFFECT_SOLARIZE         ((XAuint32) 0x00000006)
+#define XA_IMAGEEFFECT_CARTOON          ((XAuint32) 0x00000007)
+
+XA_API extern const XAInterfaceID XA_IID_IMAGEEFFECTS;
+
+struct XAImageEffectsItf_;
+typedef const struct XAImageEffectsItf_ * const * XAImageEffectsItf;
+
+struct XAImageEffectsItf_ {
+    XAresult (*QuerySupportedImageEffects) (
+        XAImageEffectsItf self, 
+        XAuint32 index, 
+        XAuint32 * pImageEffectId
+    );
+    XAresult (*EnableImageEffect) (
+        XAImageEffectsItf self, 
+        XAuint32 imageEffectID
+    );
+    XAresult (*DisableImageEffect) (
+        XAImageEffectsItf self, 
+        XAuint32 imageEffectID
+    );
+    XAresult (*IsImageEffectEnabled) (
+        XAImageEffectsItf self, 
+        XAuint32 imageEffectID,
+        XAboolean * pEnabled
+    );
+};
+
+/* VIDEO POST PROCESSING */
+
+#define XA_VIDEOMIRROR_NONE             ((XAuint32) 0x00000001)
+#define XA_VIDEOMIRROR_VERTICAL         ((XAuint32) 0x00000002)
+#define XA_VIDEOMIRROR_HORIZONTAL       ((XAuint32) 0x00000003)
+#define XA_VIDEOMIRROR_BOTH             ((XAuint32) 0x00000004)
+
+#define XA_VIDEOSCALE_STRETCH           ((XAuint32) 0x00000001)
+#define XA_VIDEOSCALE_FIT               ((XAuint32) 0x00000002)
+#define XA_VIDEOSCALE_CROP              ((XAuint32) 0x00000003)
+
+#define XA_RENDERINGHINT_NONE           ((XAuint32) 0x00000000)
+#define XA_RENDERINGHINT_ANTIALIASING   ((XAuint32) 0x00000001)
+
+typedef struct XARectangle_ {
+    XAuint32 left;
+    XAuint32 top;
+    XAuint32 width;
+    XAuint32 height;
+} XARectangle;
+
+XA_API extern const XAInterfaceID XA_IID_VIDEOPOSTPROCESSING;
+
+struct XAVideoPostProcessingItf_;
+typedef const struct XAVideoPostProcessingItf_ * const * XAVideoPostProcessingItf;
+
+struct XAVideoPostProcessingItf_ {
+    XAresult (*SetRotation) (
+        XAVideoPostProcessingItf self,
+        XAmillidegree rotation
+    );
+    XAresult (*IsArbitraryRotationSupported) (
+        XAVideoPostProcessingItf self,
+        XAboolean *pSupported
+    );
+    XAresult (*SetScaleOptions) (
+        XAVideoPostProcessingItf self,
+        XAuint32 scaleOptions,
+        XAuint32 backgroundColor,
+        XAuint32 renderingHints
+    );
+    XAresult (*SetSourceRectangle) (
+        XAVideoPostProcessingItf self,
+        const XARectangle *pSrcRect
+    );
+    XAresult (*SetDestinationRectangle) (
+        XAVideoPostProcessingItf self,
+        const XARectangle *pDestRect
+    );
+    XAresult (*SetMirror) (
+        XAVideoPostProcessingItf self,
+        XAuint32 mirror
+    );
+    XAresult (*Commit) (
+        XAVideoPostProcessingItf self
+    );
+};
+
+
+
+  /*****************************************************************/
+  /* CAPTURING INTERFACES, STRUCTS AND DEFINES                     */
+  /*****************************************************************/
+
+/* RECORD */
+
+#define XA_RECORDEVENT_HEADATLIMIT          ((XAuint32) 0x00000001)
+#define XA_RECORDEVENT_HEADATMARKER         ((XAuint32) 0x00000002)
+#define XA_RECORDEVENT_HEADATNEWPOS         ((XAuint32) 0x00000004)
+#define XA_RECORDEVENT_HEADMOVING           ((XAuint32) 0x00000008)
+#define XA_RECORDEVENT_HEADSTALLED          ((XAuint32) 0x00000010)
+#define XA_RECORDEVENT_BUFFER_FULL          ((XAuint32) 0x00000020)
+
+#define XA_RECORDSTATE_STOPPED          ((XAuint32) 0x00000001)
+#define XA_RECORDSTATE_PAUSED           ((XAuint32) 0x00000002)
+#define XA_RECORDSTATE_RECORDING        ((XAuint32) 0x00000003)
+
+XA_API extern const XAInterfaceID XA_IID_RECORD;
+
+struct XARecordItf_;
+typedef const struct XARecordItf_ * const * XARecordItf;
+
+typedef void (XAAPIENTRY * xaRecordCallback) (
+    XARecordItf caller,
+    void * pContext,
+    XAuint32 event
+);
+
+struct XARecordItf_ {
+    XAresult (*SetRecordState) (
+        XARecordItf self,
+        XAuint32 state
+    );
+    XAresult (*GetRecordState) (
+        XARecordItf self,
+        XAuint32 * pState
+    );
+    XAresult (*SetDurationLimit) (
+        XARecordItf self,
+        XAmillisecond msec
+    );
+    XAresult (*GetPosition) (
+        XARecordItf self,
+        XAmillisecond * pMsec
+    );
+    XAresult (*RegisterCallback) (
+        XARecordItf self,
+        xaRecordCallback callback,
+        void * pContext
+    );
+    XAresult (*SetCallbackEventsMask) (
+        XARecordItf self,
+        XAuint32 eventFlags
+    );
+    XAresult (*GetCallbackEventsMask) (
+        XARecordItf self,
+        XAuint32 * pEventFlags
+    );
+    XAresult (*SetMarkerPosition) (
+        XARecordItf self,
+        XAmillisecond mSec
+    );
+    XAresult (*ClearMarkerPosition) (
+        XARecordItf self
+    );
+    XAresult (*GetMarkerPosition) (
+        XARecordItf self,
+        XAmillisecond * pMsec
+    );
+    XAresult (*SetPositionUpdatePeriod) (
+        XARecordItf self,
+        XAmillisecond mSec
+    );
+    XAresult (*GetPositionUpdatePeriod) (
+        XARecordItf self,
+        XAmillisecond * pMsec
+    );
+};
+
+/* SNAPSHOT */
+
+XA_API extern const XAInterfaceID XA_IID_SNAPSHOT;
+
+struct XASnapshotItf_;
+typedef const struct XASnapshotItf_ * const * XASnapshotItf;
+
+typedef void (XAAPIENTRY * xaSnapshotInitiatedCallback) (
+    XASnapshotItf caller,
+    void * context
+);
+
+typedef void (XAAPIENTRY * xaSnapshotTakenCallback) (
+    XASnapshotItf caller,
+    void * context,
+    XAuint32 numberOfPicsTaken,
+    const XADataSink * image
+);
+
+struct XASnapshotItf_ {
+    XAresult (*InitiateSnapshot) (
+        XASnapshotItf self,
+        XAuint32 numberOfPictures,
+        XAuint32 fps,
+        XAboolean freezeViewFinder,
+        XADataSink sink,
+        xaSnapshotInitiatedCallback initiatedCallback, 
+        xaSnapshotTakenCallback takenCallback, 
+        void * pContext
+    );
+    XAresult (*TakeSnapshot) (
+        XASnapshotItf self
+    );
+    XAresult (*CancelSnapshot) (
+        XASnapshotItf self
+    );
+    XAresult (*ReleaseBuffers) (
+        XASnapshotItf self,
+        XADataSink * image
+    );
+    XAresult (*GetMaxPicsPerBurst) (
+        XASnapshotItf self,
+        XAuint32 * maxNumberOfPictures
+    );
+    XAresult (*GetBurstFPSRange) (
+        XASnapshotItf self,
+        XAuint32 * minFPS,
+        XAuint32 * maxFPS
+    );
+    XAresult (*SetShutterFeedback) (
+        XASnapshotItf self,
+        XAboolean enabled
+    );
+    XAresult (*GetShutterFeedback) (
+        XASnapshotItf self,
+        XAboolean * enabled
+    );
+};
+
+
+
+  /*****************************************************************/
+  /* METADATA RELATED INTERFACES, STRUCTS AND DEFINES              */
+  /*****************************************************************/
+
+/* METADATA (EXTRACTION, INSERTION, TRAVERSAL) */
+
+#define XA_NODE_PARENT                  ((XAuint32) 0xFFFFFFFF)
+
+#define XA_ROOT_NODE_ID                 ((XAint32) 0x7FFFFFFF)
+
+#define XA_NODETYPE_UNSPECIFIED         ((XAuint32) 0x00000001)
+#define XA_NODETYPE_AUDIO               ((XAuint32) 0x00000002)
+#define XA_NODETYPE_VIDEO               ((XAuint32) 0x00000003)
+#define XA_NODETYPE_IMAGE               ((XAuint32) 0x00000004)
+
+#define XA_CHARACTERENCODING_UNKNOWN            ((XAuint32) 0x00000000)
+#define XA_CHARACTERENCODING_BINARY             ((XAuint32) 0x00000001)
+#define XA_CHARACTERENCODING_ASCII              ((XAuint32) 0x00000002)
+#define XA_CHARACTERENCODING_BIG5               ((XAuint32) 0x00000003)
+#define XA_CHARACTERENCODING_CODEPAGE1252       ((XAuint32) 0x00000004)
+#define XA_CHARACTERENCODING_GB2312             ((XAuint32) 0x00000005)
+#define XA_CHARACTERENCODING_HZGB2312           ((XAuint32) 0x00000006)
+#define XA_CHARACTERENCODING_GB12345            ((XAuint32) 0x00000007)
+#define XA_CHARACTERENCODING_GB18030            ((XAuint32) 0x00000008)
+#define XA_CHARACTERENCODING_GBK                ((XAuint32) 0x00000009)
+#define XA_CHARACTERENCODING_IMAPUTF7           ((XAuint32) 0x0000000A)
+#define XA_CHARACTERENCODING_ISO2022JP          ((XAuint32) 0x0000000B)
+#define XA_CHARACTERENCODING_ISO2022JP1         ((XAuint32) 0x0000000B)
+#define XA_CHARACTERENCODING_ISO88591           ((XAuint32) 0x0000000C)
+#define XA_CHARACTERENCODING_ISO885910          ((XAuint32) 0x0000000D)
+#define XA_CHARACTERENCODING_ISO885913          ((XAuint32) 0x0000000E)
+#define XA_CHARACTERENCODING_ISO885914          ((XAuint32) 0x0000000F)
+#define XA_CHARACTERENCODING_ISO885915          ((XAuint32) 0x00000010)
+#define XA_CHARACTERENCODING_ISO88592           ((XAuint32) 0x00000011)
+#define XA_CHARACTERENCODING_ISO88593           ((XAuint32) 0x00000012)
+#define XA_CHARACTERENCODING_ISO88594           ((XAuint32) 0x00000013)
+#define XA_CHARACTERENCODING_ISO88595           ((XAuint32) 0x00000014)
+#define XA_CHARACTERENCODING_ISO88596           ((XAuint32) 0x00000015)
+#define XA_CHARACTERENCODING_ISO88597           ((XAuint32) 0x00000016)
+#define XA_CHARACTERENCODING_ISO88598           ((XAuint32) 0x00000017)
+#define XA_CHARACTERENCODING_ISO88599           ((XAuint32) 0x00000018)
+#define XA_CHARACTERENCODING_ISOEUCJP           ((XAuint32) 0x00000019)
+#define XA_CHARACTERENCODING_SHIFTJIS           ((XAuint32) 0x0000001A)
+#define XA_CHARACTERENCODING_SMS7BIT            ((XAuint32) 0x0000001B)
+#define XA_CHARACTERENCODING_UTF7               ((XAuint32) 0x0000001C)
+#define XA_CHARACTERENCODING_UTF8               ((XAuint32) 0x0000001D)
+#define XA_CHARACTERENCODING_JAVACONFORMANTUTF8 ((XAuint32) 0x0000001E)
+#define XA_CHARACTERENCODING_UTF16BE            ((XAuint32) 0x0000001F)
+#define XA_CHARACTERENCODING_UTF16LE            ((XAuint32) 0x00000020)
+
+#define XA_METADATA_FILTER_KEY          ((XAuint8) 0x01)
+#define XA_METADATA_FILTER_LANG         ((XAuint8) 0x02)
+#define XA_METADATA_FILTER_ENCODING     ((XAuint8) 0x04)
+
+#define XA_METADATATRAVERSALMODE_ALL    ((XAuint32) 0x00000001)
+#define XA_METADATATRAVERSALMODE_NODE   ((XAuint32) 0x00000002)
+
+#ifndef _KHRONOS_KEYS_
+#define _KHRONOS_KEYS_
+#define KHRONOS_TITLE                   "KhronosTitle"
+#define KHRONOS_ALBUM                   "KhronosAlbum"
+#define KHRONOS_TRACK_NUMBER            "KhronosTrackNumber"
+#define KHRONOS_ARTIST                  "KhronosArtist"
+#define KHRONOS_GENRE                   "KhronosGenre"
+#define KHRONOS_YEAR                    "KhronosYear"
+#define KHRONOS_COMMENT                 "KhronosComment"
+#define KHRONOS_ARTIST_URL              "KhronosArtistURL"
+#define KHRONOS_CONTENT_URL             "KhronosContentURL"
+#define KHRONOS_RATING                  "KhronosRating"
+#define KHRONOS_ALBUM_ART               "KhronosAlbumArt"
+#define KHRONOS_COPYRIGHT               "KhronosCopyright"
+#endif /* _KHRONOS_KEYS_ */
+
+
+typedef struct XAMetadataInfo_ {
+    XAuint32 size;
+    XAuint32 encoding;
+    const XAchar langCountry[16];
+    XAuint8 data[1];
+} XAMetadataInfo;
+
+XA_API extern const XAInterfaceID XA_IID_METADATAEXTRACTION;
+
+struct XAMetadataExtractionItf_;
+typedef const struct XAMetadataExtractionItf_
+    * const * XAMetadataExtractionItf;
+
+struct XAMetadataExtractionItf_ {
+    XAresult (*GetItemCount) (
+        XAMetadataExtractionItf self,
+        XAuint32 * pItemCount
+    );
+    XAresult (*GetKeySize) (
+        XAMetadataExtractionItf self,
+        XAuint32 index,
+        XAuint32 * pKeySize
+    );
+    XAresult (*GetKey) (
+        XAMetadataExtractionItf self,
+        XAuint32 index,
+        XAuint32 keySize,
+        XAMetadataInfo * pKey
+    );
+    XAresult (*GetValueSize) (
+        XAMetadataExtractionItf self,
+        XAuint32 index,
+        XAuint32 * pValueSize
+    );
+    XAresult (*GetValue) (
+        XAMetadataExtractionItf self,
+        XAuint32 index,
+        XAuint32 valueSize,
+        XAMetadataInfo * pValue
+    );
+    XAresult (*AddKeyFilter) (
+        XAMetadataExtractionItf self,
+        XAuint32 keySize,
+        const void * pKey,
+        XAuint32 keyEncoding,
+        const XAchar * pValueLangCountry,
+        XAuint32 valueEncoding,
+        XAuint8 filterMask
+    );
+    XAresult (*ClearKeyFilter) (
+        XAMetadataExtractionItf self
+    );
+};
+
+
+XA_API extern const XAInterfaceID XA_IID_METADATAINSERTION;
+
+struct XAMetadataInsertionItf_;
+typedef const struct XAMetadataInsertionItf_
+    * const * XAMetadataInsertionItf;
+
+typedef void (XAAPIENTRY * xaMetadataInsertionCallback) (
+    XAMetadataInsertionItf caller,
+    void * pContext,
+    XAMetadataInfo * pKey,
+    XAMetadataInfo * pValue,
+    XAint32 nodeID,
+    XAboolean result
+);
+
+struct XAMetadataInsertionItf_ {
+    XAresult (*CreateChildNode) (
+        XAMetadataInsertionItf self,
+        XAint32 parentNodeID, 
+        XAuint32 type,
+        XAchar * mimeType,
+        XAint32 * pChildNodeID
+    );
+    XAresult (*GetSupportedKeysCount) (
+        XAMetadataInsertionItf self,
+        XAint32 nodeID,
+        XAboolean * pFreeKeys,
+        XAuint32 * pKeyCount,
+        XAuint32 * pEncodingCount
+    );
+    XAresult (*GetKeySize) (
+        XAMetadataInsertionItf self,
+        XAint32 nodeID,
+        XAuint32 keyIndex,
+        XAuint32 * pKeySize
+    );
+    XAresult (*GetKey) (
+        XAMetadataInsertionItf self,
+        XAint32 nodeID,
+        XAuint32 keyIndex,
+        XAuint32 keySize,
+        XAMetadataInfo * pKey
+    );
+    XAresult (*GetFreeKeysEncoding) (
+        XAMetadataInsertionItf self,
+        XAint32 nodeID,
+        XAuint32 encodingIndex,
+        XAuint32 * pEncoding
+    );
+    XAresult (*InsertMetadataItem) (
+        XAMetadataInsertionItf self,
+        XAint32 nodeID,
+        XAMetadataInfo * pKey,
+        XAMetadataInfo * pValue,
+        XAboolean overwrite
+    );
+    XAresult (*RegisterCallback) (
+        XAMetadataInsertionItf self,
+        xaMetadataInsertionCallback callback,
+        void * pContext
+    );
+};
+
+
+XA_API extern const XAInterfaceID XA_IID_METADATATRAVERSAL;
+ 
+struct XAMetadataTraversalItf_;
+typedef const struct XAMetadataTraversalItf_
+    *  const *  XAMetadataTraversalItf;
+
+struct XAMetadataTraversalItf_ {
+    XAresult (*SetMode) (
+        XAMetadataTraversalItf self,
+        XAuint32 mode
+    );
+    XAresult (*GetChildCount) (
+        XAMetadataTraversalItf self,
+        XAuint32 * pCount
+    );
+    XAresult (*GetChildMIMETypeSize) (
+        XAMetadataTraversalItf self,
+        XAuint32 index,
+        XAuint32 * pSize
+    );
+    XAresult (*GetChildInfo) (
+        XAMetadataTraversalItf self,
+        XAuint32 index,
+        XAint32 * pNodeID,
+        XAuint32 * pType,
+        XAuint32 size,
+        XAchar * pMimeType
+    );
+    XAresult (*SetActiveNode) (
+        XAMetadataTraversalItf self,
+        XAuint32 index
+    );
+};
+
+/* DYNAMIC SOURCE */
+
+XA_API extern const XAInterfaceID XA_IID_DYNAMICSOURCE;
+
+struct XADynamicSourceItf_;
+typedef const struct XADynamicSourceItf_ * const * XADynamicSourceItf;
+
+struct XADynamicSourceItf_ {
+    XAresult (*SetSource) (
+        XADynamicSourceItf self,
+        XADataSource * pDataSource
+    );
+};
+
+
+
+  /*****************************************************************/
+  /*  I/O DEVICES RELATED INTERFACES, STRUCTS AND DEFINES          */
+  /*****************************************************************/
+
+/* CAMERA AND CAMERA CAPABILITIES */
+
+#define XA_CAMERA_APERTUREMODE_MANUAL               ((XAuint32) 0x00000001)
+#define XA_CAMERA_APERTUREMODE_AUTO                 ((XAuint32) 0x00000002)
+
+#define XA_CAMERA_AUTOEXPOSURESTATUS_SUCCESS        ((XAuint32) 0x00000001)
+#define XA_CAMERA_AUTOEXPOSURESTATUS_UNDEREXPOSURE  ((XAuint32) 0x00000002)
+#define XA_CAMERA_AUTOEXPOSURESTATUS_OVEREXPOSURE   ((XAuint32) 0x00000003)
+
+#define XA_CAMERACBEVENT_ROTATION                   ((XAuint32) 0x00000001)
+#define XA_CAMERACBEVENT_FLASHREADY                 ((XAuint32) 0x00000002)
+#define XA_CAMERACBEVENT_FOCUSSTATUS                ((XAuint32) 0x00000003)
+#define XA_CAMERACBEVENT_EXPOSURESTATUS             ((XAuint32) 0x00000004)
+#define XA_CAMERACBEVENT_WHITEBALANCELOCKED         ((XAuint32) 0x00000005)
+#define XA_CAMERACBEVENT_ZOOMSTATUS                 ((XAuint32) 0x00000006)
+
+#define XA_CAMERACAP_FLASH                          ((XAuint32) 0x00000001)
+#define XA_CAMERACAP_AUTOFOCUS                      ((XAuint32) 0x00000002)
+#define XA_CAMERACAP_CONTINUOUSAUTOFOCUS            ((XAuint32) 0x00000004)
+#define XA_CAMERACAP_MANUALFOCUS                    ((XAuint32) 0x00000008)
+#define XA_CAMERACAP_AUTOEXPOSURE                   ((XAuint32) 0x00000010)
+#define XA_CAMERACAP_MANUALEXPOSURE                 ((XAuint32) 0x00000020)
+#define XA_CAMERACAP_AUTOISOSENSITIVITY             ((XAuint32) 0x00000040)
+#define XA_CAMERACAP_MANUALISOSENSITIVITY           ((XAuint32) 0x00000080)
+#define XA_CAMERACAP_AUTOAPERTURE                   ((XAuint32) 0x00000100)
+#define XA_CAMERACAP_MANUALAPERTURE                 ((XAuint32) 0x00000200)
+#define XA_CAMERACAP_AUTOSHUTTERSPEED               ((XAuint32) 0x00000400)
+#define XA_CAMERACAP_MANUALSHUTTERSPEED             ((XAuint32) 0x00000800)
+#define XA_CAMERACAP_AUTOWHITEBALANCE               ((XAuint32) 0x00001000)
+#define XA_CAMERACAP_MANUALWHITEBALANCE             ((XAuint32) 0x00002000)
+#define XA_CAMERACAP_OPTICALZOOM                    ((XAuint32) 0x00004000)
+#define XA_CAMERACAP_DIGITALZOOM                    ((XAuint32) 0x00008000)
+#define XA_CAMERACAP_METERING                       ((XAuint32) 0x00010000)
+#define XA_CAMERACAP_BRIGHTNESS                     ((XAuint32) 0x00020000)
+#define XA_CAMERACAP_CONTRAST                       ((XAuint32) 0x00040000)
+#define XA_CAMERACAP_GAMMA                          ((XAuint32) 0x00080000)
+
+
+#define XA_CAMERA_EXPOSUREMODE_MANUAL               ((XAuint32) 0x00000001)
+#define XA_CAMERA_EXPOSUREMODE_AUTO                 ((XAuint32) 0x00000002)
+#define XA_CAMERA_EXPOSUREMODE_NIGHT                ((XAuint32) 0x00000004)
+#define XA_CAMERA_EXPOSUREMODE_BACKLIGHT            ((XAuint32) 0x00000008)
+#define XA_CAMERA_EXPOSUREMODE_SPOTLIGHT            ((XAuint32) 0x00000010)
+#define XA_CAMERA_EXPOSUREMODE_SPORTS               ((XAuint32) 0x00000020)
+#define XA_CAMERA_EXPOSUREMODE_SNOW                 ((XAuint32) 0x00000040)
+#define XA_CAMERA_EXPOSUREMODE_BEACH                ((XAuint32) 0x00000080)
+#define XA_CAMERA_EXPOSUREMODE_LARGEAPERTURE        ((XAuint32) 0x00000100)
+#define XA_CAMERA_EXPOSUREMODE_SMALLAPERTURE        ((XAuint32) 0x00000200)
+#define XA_CAMERA_EXPOSUREMODE_PORTRAIT             ((XAuint32) 0x0000400)
+#define XA_CAMERA_EXPOSUREMODE_NIGHTPORTRAIT        ((XAuint32) 0x00000800)
+
+#define XA_CAMERA_FLASHMODE_OFF                     ((XAuint32) 0x00000001)
+#define XA_CAMERA_FLASHMODE_ON                      ((XAuint32) 0x00000002)
+#define XA_CAMERA_FLASHMODE_AUTO                    ((XAuint32) 0x00000004)
+#define XA_CAMERA_FLASHMODE_REDEYEREDUCTION         ((XAuint32) 0x00000008)
+#define XA_CAMERA_FLASHMODE_REDEYEREDUCTION_AUTO    ((XAuint32) 0x00000010)
+#define XA_CAMERA_FLASHMODE_FILLIN                  ((XAuint32) 0x00000020)
+#define XA_CAMERA_FLASHMODE_TORCH                   ((XAuint32) 0x00000040)
+
+#define XA_CAMERA_FOCUSMODE_MANUAL                  ((XAuint32) 0x00000001)
+#define XA_CAMERA_FOCUSMODE_AUTO                    ((XAuint32) 0x00000002)
+#define XA_CAMERA_FOCUSMODE_CENTROID                ((XAuint32) 0x00000004)
+#define XA_CAMERA_FOCUSMODE_CONTINUOUS_AUTO         ((XAuint32) 0x00000008)
+#define XA_CAMERA_FOCUSMODE_CONTINUOUS_CENTROID     ((XAuint32) 0x00000010)
+
+#define XA_CAMERA_FOCUSMODESTATUS_OFF               ((XAuint32) 0x00000001)
+#define XA_CAMERA_FOCUSMODESTATUS_REQUEST           ((XAuint32) 0x00000002)
+#define XA_CAMERA_FOCUSMODESTATUS_REACHED           ((XAuint32) 0x00000003)
+#define XA_CAMERA_FOCUSMODESTATUS_UNABLETOREACH     ((XAuint32) 0x00000004)
+#define XA_CAMERA_FOCUSMODESTATUS_LOST              ((XAuint32) 0x00000005)
+
+#define XA_CAMERA_ISOSENSITIVITYMODE_MANUAL         ((XAuint32) 0x00000001)
+#define XA_CAMERA_ISOSENSITIVITYMODE_AUTO           ((XAuint32) 0x00000002)
+
+#define XA_CAMERA_LOCK_AUTOFOCUS                    ((XAuint32) 0x00000001)
+#define XA_CAMERA_LOCK_AUTOEXPOSURE                 ((XAuint32) 0x00000002)
+#define XA_CAMERA_LOCK_AUTOWHITEBALANCE             ((XAuint32) 0x00000004)
+
+#define XA_CAMERA_METERINGMODE_AVERAGE              ((XAuint32) 0x00000001)
+#define XA_CAMERA_METERINGMODE_SPOT                 ((XAuint32) 0x00000002)
+#define XA_CAMERA_METERINGMODE_MATRIX               ((XAuint32) 0x00000004)
+
+#define XA_CAMERA_SHUTTERSPEEDMODE_MANUAL           ((XAuint32) 0x00000001)
+#define XA_CAMERA_SHUTTERSPEEDMODE_AUTO             ((XAuint32) 0x00000002)
+
+#define XA_CAMERA_WHITEBALANCEMODE_MANUAL           ((XAuint32) 0x00000001)
+#define XA_CAMERA_WHITEBALANCEMODE_AUTO             ((XAuint32) 0x00000002)
+#define XA_CAMERA_WHITEBALANCEMODE_SUNLIGHT         ((XAuint32) 0x00000004)
+#define XA_CAMERA_WHITEBALANCEMODE_CLOUDY           ((XAuint32) 0x00000008)
+#define XA_CAMERA_WHITEBALANCEMODE_SHADE            ((XAuint32) 0x00000010)
+#define XA_CAMERA_WHITEBALANCEMODE_TUNGSTEN         ((XAuint32) 0x00000020)
+#define XA_CAMERA_WHITEBALANCEMODE_FLUORESCENT      ((XAuint32) 0x00000040)
+#define XA_CAMERA_WHITEBALANCEMODE_INCANDESCENT     ((XAuint32) 0x00000080)
+#define XA_CAMERA_WHITEBALANCEMODE_FLASH            ((XAuint32) 0x00000100)
+#define XA_CAMERA_WHITEBALANCEMODE_SUNSET           ((XAuint32) 0x00000200)
+
+#define XA_CAMERA_ZOOM_SLOW                         ((XAuint32) 50)
+#define XA_CAMERA_ZOOM_NORMAL                       ((XAuint32) 100)
+#define XA_CAMERA_ZOOM_FAST                         ((XAuint32) 200)
+#define XA_CAMERA_ZOOM_FASTEST                      ((XAuint32) 0xFFFFFFFF)
+
+#define XA_FOCUSPOINTS_ONE                          ((XAuint32) 0x00000001)
+#define XA_FOCUSPOINTS_THREE_3X1                    ((XAuint32) 0x00000002)
+#define XA_FOCUSPOINTS_FIVE_CROSS                   ((XAuint32) 0x00000003)
+#define XA_FOCUSPOINTS_SEVEN_CROSS                  ((XAuint32) 0x00000004)
+#define XA_FOCUSPOINTS_NINE_SQUARE                  ((XAuint32) 0x00000005)
+#define XA_FOCUSPOINTS_ELEVEN_CROSS                 ((XAuint32) 0x00000006)
+#define XA_FOCUSPOINTS_TWELVE_3X4                   ((XAuint32) 0x00000007)
+#define XA_FOCUSPOINTS_TWELVE_4X3                   ((XAuint32) 0x00000008)
+#define XA_FOCUSPOINTS_SIXTEEN_SQUARE               ((XAuint32) 0x00000009)
+#define XA_FOCUSPOINTS_CUSTOM                       ((XAuint32) 0x0000000A)
+
+typedef struct XAFocusPointPosition_ {
+    XAuint32 left;
+    XAuint32 top;
+    XAuint32 width;
+    XAuint32 height;
+} XAFocusPointPosition;
+
+#define XA_ORIENTATION_UNKNOWN                      ((XAuint32) 0x00000001)
+#define XA_ORIENTATION_OUTWARDS                     ((XAuint32) 0x00000002)
+#define XA_ORIENTATION_INWARDS                      ((XAuint32) 0x00000003)
+
+typedef struct XACameraDescriptor_ {
+    XAchar * name;
+    XAuint32 maxWidth;
+    XAuint32 maxHeight;
+    XAuint32 orientation;
+    XAuint32 featuresSupported;
+    XAuint32 exposureModesSupported;
+    XAuint32 flashModesSupported;
+    XAuint32 focusModesSupported;
+    XAuint32 meteringModesSupported;
+    XAuint32 whiteBalanceModesSupported;
+} XACameraDescriptor;
+
+XA_API extern const XAInterfaceID XA_IID_CAMERACAPABILITIES;
+
+struct XACameraCapabilitiesItf_;
+typedef const struct XACameraCapabilitiesItf_
+    * const * XACameraCapabilitiesItf;
+
+struct XACameraCapabilitiesItf_ {
+    XAresult (*GetCameraCapabilities) (
+        XACameraCapabilitiesItf self,
+        XAuint32 *pIndex,
+        XAuint32 * pCameraDeviceID,
+        XACameraDescriptor * pDescriptor
+    );
+    XAresult (*QueryFocusRegionPatterns) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAuint32 * pPatternID,
+        XAuint32 * pFocusPattern,
+        XAuint32 * pCustomPoints1,
+        XAuint32 * pCustomPoints2
+    );
+    XAresult (*GetSupportedAutoLocks) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAuint32 * pNumCombinations,
+        XAuint32 ** ppLocks
+    );
+    XAresult (*GetSupportedFocusManualSettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAboolean macroEnabled,
+        XAmillimeter * pMinValue,
+        XAmillimeter * pMaxValue,
+        XAuint32 * pNumSettings,
+        XAmillimeter ** ppSettings
+    );
+    XAresult (*GetSupportedISOSensitivitySettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAuint32 * pMinValue,
+        XAuint32 * pMaxValue,
+        XAuint32 * pNumSettings,
+        XAuint32 ** ppSettings
+    );
+    XAresult (*GetSupportedApertureManualSettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAuint32 * pMinValue,
+        XAuint32 * pMaxValue,
+        XAuint32 * pNumSettings,
+        XAuint32 ** ppSettings
+    );
+    XAresult (*GetSupportedShutterSpeedManualSettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAmicrosecond * pMinValue,
+        XAmicrosecond * pMaxValue,
+        XAuint32 * pNumSettings,
+        XAmicrosecond ** ppSettings
+    );
+    XAresult (*GetSupportedWhiteBalanceManualSettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAuint32 * pMinValue,
+        XAuint32 * pMaxValue,
+        XAuint32 * pNumSettings,
+        XAuint32 ** ppSettings
+    );
+    XAresult (*GetSupportedZoomSettings) (
+        XACameraCapabilitiesItf self,
+        XAuint32 cameraDeviceID,
+        XAboolean digitalEnabled,
+        XAboolean macroEnabled,
+        XApermille * pMaxValue,
+        XAuint32 * pNumSettings,
+        XApermille ** ppSettings,
+        XAboolean * pSpeedSupported
+
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_CAMERA;
+
+struct XACameraItf_;
+typedef const struct XACameraItf_ * const * XACameraItf;
+
+typedef void (XAAPIENTRY * xaCameraCallback) (
+    XACameraItf caller,
+    void * pContext,
+    XAuint32 eventId,
+    XAuint32 eventData
+);
+
+struct XACameraItf_ {
+    XAresult (*RegisterCallback) (
+        XACameraItf self,
+        xaCameraCallback callback,
+        void * pContext
+    );
+    XAresult (*SetFlashMode) (
+        XACameraItf self, 
+        XAuint32 flashMode
+    );
+    XAresult (*GetFlashMode) (
+        XACameraItf self,
+        XAuint32 * pFlashMode
+    );
+    XAresult (*IsFlashReady) (
+        XACameraItf self,
+        XAboolean * pReady
+    );
+    XAresult (*SetFocusMode) (
+        XACameraItf self, 
+        XAuint32 focusMode, 
+        XAmillimeter manualSetting,
+        XAboolean macroEnabled
+    );
+    XAresult (*GetFocusMode) (
+        XACameraItf self,
+        XAuint32 * pFocusMode, 
+        XAmillimeter * pManualSetting,
+        XAboolean * pMacroEnabled
+    );
+    XAresult (*SetFocusRegionPattern) (
+        XACameraItf self, 
+        XAuint32 focusPattern,
+        XAuint32 activePoints1,
+        XAuint32 activePoints2
+    );
+    XAresult (*GetFocusRegionPattern) (
+        XACameraItf self,
+        XAuint32 * pFocusPattern,
+        XAuint32 * pActivePoints1,
+        XAuint32 * pActivePoints2
+    );
+    XAresult (*GetFocusRegionPositions) (
+        XACameraItf self,
+        XAuint32 * pNumPositionEntries,
+        XAFocusPointPosition * pFocusPosition
+    ); 
+    XAresult (*GetFocusModeStatus) (
+        XACameraItf self,
+        XAuint32 * pFocusStatus,
+        XAuint32 * pRegionStatus1,
+        XAuint32 * pRegionStatus2
+    );
+    XAresult (*SetMeteringMode) (
+        XACameraItf self, 
+        XAuint32 meteringMode
+    );
+    XAresult (*GetMeteringMode) (
+        XACameraItf self,
+        XAuint32 * pMeteringMode
+    );
+    XAresult (*SetExposureMode) (
+        XACameraItf self, 
+        XAuint32 exposure,
+        XAuint32 compensation
+    );
+    XAresult (*GetExposureMode) (
+        XACameraItf self,
+        XAuint32 * pExposure,
+        XAuint32 * pCompensation
+    );
+    XAresult (*SetISOSensitivity) (
+        XACameraItf self, 
+        XAuint32 isoSensitivity,
+        XAuint32 manualSetting
+    );
+    XAresult (*GetISOSensitivity) (
+        XACameraItf self,
+        XAuint32 * pIsoSensitivity,
+        XAuint32 * pManualSetting
+    );
+    XAresult (*SetAperture) (
+        XACameraItf self, 
+        XAuint32 aperture,
+        XAuint32 manualSetting
+    );
+    XAresult (*GetAperture) (
+        XACameraItf self,
+        XAuint32 * pAperture,
+        XAuint32 * pManualSetting
+    );
+    XAresult (*SetShutterSpeed) (
+        XACameraItf self, 
+        XAuint32 shutterSpeed,
+        XAmicrosecond manualSetting
+    );
+    XAresult (*GetShutterSpeed) (
+        XACameraItf self,
+        XAuint32 * pShutterSpeed,
+        XAmicrosecond * pManualSetting
+    );
+    XAresult (*SetWhiteBalance) (
+        XACameraItf self, 
+        XAuint32 whiteBalance,
+        XAuint32 manualSetting
+    );
+    XAresult (*GetWhiteBalance) (
+        XACameraItf self,
+        XAuint32 * pWhiteBalance,
+        XAuint32 * pManualSetting
+    );
+    XAresult (*SetAutoLocks) (
+        XACameraItf self,
+        XAuint32 locks
+    );
+    XAresult (*GetAutoLocks) (
+        XACameraItf self,
+        XAuint32 * locks
+    );
+    XAresult (*SetZoom) (
+        XACameraItf self,
+        XApermille zoom,
+        XAboolean digitalEnabled,
+        XAuint32 speed,
+        XAboolean async
+    );
+    XAresult (*GetZoom) (
+        XACameraItf self,
+        XApermille * pZoom,
+        XAboolean * pDigital
+    );
+};
+
+/* AUDIO I/O DEVICE CAPABILITIES */
+
+#define XA_DEVCONNECTION_INTEGRATED                 ((XAint16) 0x0001)
+#define XA_DEVCONNECTION_ATTACHED_WIRED             ((XAint16) 0x0100)
+#define XA_DEVCONNECTION_ATTACHED_WIRELESS          ((XAint16) 0x0200)
+#define XA_DEVCONNECTION_NETWORK                    ((XAint16) 0x0400)
+
+#define XA_DEVLOCATION_HANDSET                      ((XAint16) 0x0001)
+#define XA_DEVLOCATION_HEADSET                      ((XAint16) 0x0002)
+#define XA_DEVLOCATION_CARKIT                       ((XAint16) 0x0003)
+#define XA_DEVLOCATION_DOCK                         ((XAint16) 0x0004)
+#define XA_DEVLOCATION_REMOTE                       ((XAint16) 0x0005)
+
+#define XA_DEVSCOPE_UNKNOWN                         ((XAint16) 0x0001)
+#define XA_DEVSCOPE_ENVIRONMENT                     ((XAint16) 0x0002)
+#define XA_DEVSCOPE_USER                            ((XAint16) 0x0003)
+
+typedef struct XAAudioInputDescriptor_ {
+    XAchar * deviceName;
+    XAint16 deviceConnection;
+    XAint16 deviceScope;
+    XAint16 deviceLocation;
+    XAboolean isForTelephony;
+    XAmilliHertz minSampleRate;
+    XAmilliHertz maxSampleRate;
+    XAboolean isFreqRangeContinuous;
+    XAmilliHertz * samplingRatesSupported;
+    XAint16 numOfSamplingRatesSupported;
+    XAint16 maxChannels;
+} XAAudioInputDescriptor;
+
+typedef struct XAAudioOutputDescriptor_ {
+    XAchar *pDeviceName;
+    XAint16 deviceConnection;
+    XAint16 deviceScope;
+    XAint16 deviceLocation;
+    XAboolean isForTelephony;
+    XAmilliHertz minSampleRate; 
+    XAmilliHertz maxSampleRate;
+    XAboolean isFreqRangeContinuous;
+    XAmilliHertz *samplingRatesSupported;
+    XAint16 numOfSamplingRatesSupported;
+    XAint16 maxChannels;
+} XAAudioOutputDescriptor;
+
+XA_API extern const XAInterfaceID XA_IID_AUDIOIODEVICECAPABILITIES;
+
+struct XAAudioIODeviceCapabilitiesItf_;
+typedef const struct XAAudioIODeviceCapabilitiesItf_
+    * const * XAAudioIODeviceCapabilitiesItf;
+
+typedef void (XAAPIENTRY * xaAvailableAudioInputsChangedCallback) (
+    XAAudioIODeviceCapabilitiesItf caller,
+    void * pContext,
+    XAuint32 deviceID,
+    XAint32 numInputs,
+    XAboolean isNew
+);
+
+typedef void (XAAPIENTRY * xaAvailableAudioOutputsChangedCallback) (
+    XAAudioIODeviceCapabilitiesItf caller,
+    void * pContext,
+    XAuint32 deviceID,
+    XAint32 numOutputs,
+    XAboolean isNew
+);
+
+typedef void (XAAPIENTRY * xaDefaultDeviceIDMapChangedCallback) (
+    XAAudioIODeviceCapabilitiesItf caller,
+    void * pContext,
+	XAboolean isOutput,
+    XAint32 numDevices
+);
+
+struct XAAudioIODeviceCapabilitiesItf_ {
+    XAresult (*GetAvailableAudioInputs) (
+        XAAudioIODeviceCapabilitiesItf self, 
+        XAint32 * pNumInputs,
+        XAuint32 * pInputDeviceIDs
+    );
+    XAresult (*QueryAudioInputCapabilities) (
+        XAAudioIODeviceCapabilitiesItf self, 
+        XAuint32 deviceID, 
+        XAAudioInputDescriptor * pDescriptor
+    );
+    XAresult (*RegisterAvailableAudioInputsChangedCallback) (
+        XAAudioIODeviceCapabilitiesItf self,
+        xaAvailableAudioInputsChangedCallback callback,
+        void * pContext 
+    );
+    XAresult (*GetAvailableAudioOutputs) (
+        XAAudioIODeviceCapabilitiesItf self, 
+        XAint32 * pNumOutputs,
+        XAuint32 * pOutputDeviceIDs
+    );
+    XAresult (*QueryAudioOutputCapabilities) (
+        XAAudioIODeviceCapabilitiesItf self, 
+        XAuint32 deviceID, 
+        XAAudioOutputDescriptor * pDescriptor
+    );
+    XAresult (*RegisterAvailableAudioOutputsChangedCallback) (
+        XAAudioIODeviceCapabilitiesItf self,
+        xaAvailableAudioOutputsChangedCallback callback,
+        void * pContext 
+    );
+    XAresult (*RegisterDefaultDeviceIDMapChangedCallback) (
+        XAAudioIODeviceCapabilitiesItf self,
+        xaDefaultDeviceIDMapChangedCallback callback,
+        void * pContext
+    );
+    XAresult (*GetAssociatedAudioInputs) (
+        XAAudioIODeviceCapabilitiesItf self,
+        XAuint32 deviceID,
+        XAint32 * pNumAudioInputs,
+        XAuint32 * pAudioInputDeviceIDs
+    ); 
+    XAresult (*GetAssociatedAudioOutputs) (
+        XAAudioIODeviceCapabilitiesItf self,
+        XAuint32 deviceID,
+        XAint32 * pNumAudioOutputs,
+        XAuint32 * pAudioOutputDeviceIDs
+    );
+    XAresult (*GetDefaultAudioDevices) (
+        XAAudioIODeviceCapabilitiesItf self,
+        XAuint32 defaultDeviceID,
+        XAint32 *pNumAudioDevices,
+        XAuint32 *pAudioDeviceIDs
+    );
+    XAresult (*QuerySampleFormatsSupported) (
+        XAAudioIODeviceCapabilitiesItf self, 
+        XAuint32 deviceID,
+        XAmilliHertz samplingRate,
+        XAint32 *pSampleFormats,
+        XAint32 *pNumOfSampleFormats
+    );
+};
+
+/* DEVICE VOLUME */
+
+XA_API extern const XAInterfaceID XA_IID_DEVICEVOLUME;
+
+struct XADeviceVolumeItf_;
+typedef const struct XADeviceVolumeItf_ * const * XADeviceVolumeItf;
+
+struct XADeviceVolumeItf_ {
+    XAresult (*GetVolumeScale) (
+        XADeviceVolumeItf self,
+        XAuint32 deviceID,
+        XAint32 * pMinValue,
+        XAint32 * pMaxValue,
+        XAboolean * pIsMillibelScale
+    );
+    XAresult (*SetVolume) (
+        XADeviceVolumeItf self,
+        XAuint32 deviceID,
+        XAint32 volume
+    );
+    XAresult (*GetVolume) (
+        XADeviceVolumeItf self,
+        XAuint32 deviceID,
+        XAint32 * pVolume
+    );
+};
+
+/* EQUALIZER */
+
+#define XA_EQUALIZER_UNDEFINED    ((XAuint16) 0xFFFF)
+
+XA_API extern const XAInterfaceID XA_IID_EQUALIZER;
+
+struct XAEqualizerItf_;
+typedef const struct XAEqualizerItf_ * const * XAEqualizerItf;
+
+struct XAEqualizerItf_ {
+    XAresult (*SetEnabled) (
+        XAEqualizerItf self,
+        XAboolean enabled
+    );
+    XAresult (*IsEnabled) (
+        XAEqualizerItf self,
+        XAboolean * pEnabled
+    );
+    XAresult (*GetNumberOfBands) (
+        XAEqualizerItf self,
+        XAuint16 * pNumBands
+    );
+    XAresult (*GetBandLevelRange) (
+        XAEqualizerItf self,
+        XAmillibel * pMin,
+        XAmillibel * pMax
+    );
+    XAresult (*SetBandLevel) (
+        XAEqualizerItf self,
+        XAuint16 band,
+        XAmillibel level
+    );
+    XAresult (*GetBandLevel) (
+        XAEqualizerItf self,
+        XAuint16 band,
+        XAmillibel * pLevel
+    );
+    XAresult (*GetCenterFreq) (
+        XAEqualizerItf self,
+        XAuint16 band,
+        XAmilliHertz * pCenter
+    );
+    XAresult (*GetBandFreqRange) (
+        XAEqualizerItf self,
+        XAuint16 band,
+        XAmilliHertz * pMin,
+        XAmilliHertz * pMax
+    );
+    XAresult (*GetBand) (
+        XAEqualizerItf self,
+        XAmilliHertz frequency,
+        XAuint16 * pBand
+    );
+    XAresult (*GetCurrentPreset) (
+        XAEqualizerItf self,
+        XAuint16 * pPreset
+    );
+    XAresult (*UsePreset) (
+        XAEqualizerItf self,
+        XAuint16 index
+    );
+    XAresult (*GetNumberOfPresets) (
+        XAEqualizerItf self,
+        XAuint16 * pNumPresets
+    );
+    XAresult (*GetPresetName) (
+        XAEqualizerItf self,
+        XAuint16 index,
+        const XAchar ** ppName
+    );
+};
+
+/* OUTPUT MIX */
+
+XA_API extern const XAInterfaceID XA_IID_OUTPUTMIX;
+
+struct XAOutputMixItf_;
+typedef const struct XAOutputMixItf_ * const * XAOutputMixItf;
+
+typedef void (XAAPIENTRY * xaMixDeviceChangeCallback) (
+    XAOutputMixItf caller,
+    void * pContext
+);
+
+struct XAOutputMixItf_ {
+    XAresult (*GetDestinationOutputDeviceIDs) (
+        XAOutputMixItf self,
+        XAint32 * pNumDevices,
+        XAuint32 * pDeviceIDs
+    );
+    XAresult (*RegisterDeviceChangeCallback) (
+        XAOutputMixItf self,
+        xaMixDeviceChangeCallback callback,
+        void * pContext
+    );
+    XAresult (*ReRoute) (
+        XAOutputMixItf self,
+        XAint32 numOutputDevices,
+        XAuint32 * pOutputDeviceIDs
+    );
+};
+
+/* RADIO */
+
+#define XA_FREQRANGE_FMEUROAMERICA                  ((XAuint8) 0x01)
+#define XA_FREQRANGE_FMJAPAN                        ((XAuint8) 0x02)
+#define XA_FREQRANGE_AMLW                           ((XAuint8) 0x03)
+#define XA_FREQRANGE_AMMW                           ((XAuint8) 0x04)
+#define XA_FREQRANGE_AMSW                           ((XAuint8) 0x05)
+
+#define XA_RADIO_EVENT_ANTENNA_STATUS_CHANGED       ((XAuint32) 0x00000001)
+#define XA_RADIO_EVENT_FREQUENCY_CHANGED            ((XAuint32) 0x00000002)
+#define XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED      ((XAuint32) 0x00000003)
+#define XA_RADIO_EVENT_PRESET_CHANGED               ((XAuint32) 0x00000004)
+#define XA_RADIO_EVENT_SEEK_COMPLETED               ((XAuint32) 0x00000005)
+
+#define XA_STEREOMODE_MONO                          ((XAuint32) 0x00000000)
+#define XA_STEREOMODE_STEREO                        ((XAuint32) 0x00000001)
+#define XA_STEREOMODE_AUTO                          ((XAuint32) 0x00000002)
+
+XA_API extern const XAInterfaceID XA_IID_RADIO;
+
+struct XARadioItf_;
+typedef const struct XARadioItf_ * const * XARadioItf;
+
+typedef void (XAAPIENTRY * xaRadioCallback) (
+    XARadioItf caller,
+    void * pContext,
+    XAuint32 event,
+    XAuint32 eventIntData,
+    XAboolean eventBooleanData
+);
+
+struct XARadioItf_ {
+    XAresult (*SetFreqRange) (
+        XARadioItf self,
+        XAuint8 range
+    );
+    XAresult (*GetFreqRange) (
+        XARadioItf self,
+        XAuint8 * pRange
+    );
+    XAresult (*IsFreqRangeSupported) (
+        XARadioItf self,
+        XAuint8 range,
+        XAboolean * pSupported
+    );
+    XAresult (*GetFreqRangeProperties) (
+        XARadioItf self,
+        XAuint8 range,
+        XAuint32 * pMinFreq,
+        XAuint32 * pMaxFreq,
+        XAuint32 * pFreqInterval
+    );
+    XAresult (*SetFrequency) (
+        XARadioItf self,
+        XAuint32 freq
+    );
+    XAresult (*CancelSetFrequency) (
+        XARadioItf self
+    );
+    XAresult (*GetFrequency) (
+        XARadioItf self,
+        XAuint32 * pFreq
+    );
+    XAresult (*SetSquelch) (
+        XARadioItf self,
+        XAboolean squelch
+    );
+    XAresult (*GetSquelch) (
+        XARadioItf self,
+        XAboolean * pSquelch
+    );
+    XAresult (*SetStereoMode) (
+        XARadioItf self,
+        XAuint32 mode
+    );
+    XAresult (*GetStereoMode) (
+        XARadioItf self,
+        XAuint32 * pMode
+    );
+    XAresult (*GetSignalStrength) (
+        XARadioItf self,
+        XAuint32 * pStrength
+    );
+    XAresult (*Seek) (
+        XARadioItf self,
+        XAboolean upwards
+    );
+    XAresult (*StopSeeking) (
+        XARadioItf self
+    );
+    XAresult (*GetNumberOfPresets) (
+        XARadioItf self,
+        XAuint32 * pNumPresets
+    );
+    XAresult (*SetPreset) (
+        XARadioItf self,
+        XAuint32 preset,
+        XAuint32 freq,
+        XAuint8 range,
+        XAuint32 mode,
+        const XAchar * pName
+    );
+    XAresult (*GetPreset) (
+        XARadioItf self,
+        XAuint32 preset,
+        XAuint32 * pFreq,
+        XAuint8 * pRange,
+        XAuint32 * pMode,
+        XAchar * pName,
+        XAuint16 * pNameLength
+    );
+    XAresult (*RegisterRadioCallback) (
+        XARadioItf self,
+        xaRadioCallback callback, 
+        void * pContext
+    );
+};
+
+/* RDS */
+
+#define XA_RDS_EVENT_NEW_PI                         ((XAuint16) 0x0001)
+#define XA_RDS_EVENT_NEW_PTY                        ((XAuint16) 0x0002)
+#define XA_RDS_EVENT_NEW_PS                         ((XAuint16) 0x0004)
+#define XA_RDS_EVENT_NEW_RT                         ((XAuint16) 0x0008)
+#define XA_RDS_EVENT_NEW_RT_PLUS                    ((XAuint16) 0x0010)
+#define XA_RDS_EVENT_NEW_CT                         ((XAuint16) 0x0020)
+#define XA_RDS_EVENT_NEW_TA                         ((XAuint16) 0x0040)
+#define XA_RDS_EVENT_NEW_TP                         ((XAuint16) 0x0080)
+#define XA_RDS_EVENT_NEW_ALARM                      ((XAuint16) 0x0100)
+
+#define XA_RDSPROGRAMMETYPE_RDSPTY_NONE \
+    ((XAuint32) 0x00000000)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_NEWS \
+    ((XAuint32) 0x00000001)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_CURRENTAFFAIRS \
+    ((XAuint32) 0x00000002)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_INFORMATION \
+    ((XAuint32) 0x00000003)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_SPORT \
+    ((XAuint32) 0x00000004)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_EDUCATION \
+    ((XAuint32) 0x00000005)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_DRAMA \
+    ((XAuint32) 0x00000006)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_CULTURE \
+    ((XAuint32) 0x00000007)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_SCIENCE \
+    ((XAuint32) 0x00000008)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_VARIEDSPEECH \
+    ((XAuint32) 0x00000009)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_POPMUSIC \
+    ((XAuint32) 0x0000000A)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_ROCKMUSIC \
+    ((XAuint32) 0x0000000B)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_EASYLISTENING \
+    ((XAuint32) 0x0000000C)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_LIGHTCLASSICAL \
+    ((XAuint32) 0x0000000D)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_SERIOUSCLASSICAL \
+    ((XAuint32) 0x0000000E)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_OTHERMUSIC \
+    ((XAuint32) 0x0000000F)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_WEATHER \
+    ((XAuint32) 0x00000010)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_FINANCE \
+    ((XAuint32) 0x00000011)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_CHILDRENSPROGRAMMES \
+    ((XAuint32) 0x00000012)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_SOCIALAFFAIRS \
+    ((XAuint32) 0x00000013)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_RELIGION \
+    ((XAuint32) 0x00000014)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_PHONEIN \
+    ((XAuint32) 0x00000015)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_TRAVEL \
+    ((XAuint32) 0x00000016)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_LEISURE \
+    ((XAuint32) 0x00000017)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_JAZZMUSIC \
+    ((XAuint32) 0x00000018)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_COUNTRYMUSIC \
+    ((XAuint32) 0x00000019)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_NATIONALMUSIC \
+    ((XAuint32) 0x0000001A)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_OLDIESMUSIC \
+    ((XAuint32) 0x0000001B)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_FOLKMUSIC \
+    ((XAuint32) 0x0000001C)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_DOCUMENTARY \
+    ((XAuint32) 0x0000001D)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_ALARMTEST \
+    ((XAuint32) 0x0000001E)
+#define XA_RDSPROGRAMMETYPE_RDSPTY_ALARM \
+    ((XAuint32) 0x0000001F)
+
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_NONE \
+    ((XAuint32) 0x00000000)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_NEWS \
+    ((XAuint32) 0x00000001)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_INFORMATION \
+    ((XAuint32) 0x00000002)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_SPORTS \
+    ((XAuint32) 0x00000003)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_TALK \
+    ((XAuint32) 0x00000004)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_ROCK \
+    ((XAuint32) 0x00000005)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_CLASSICROCK \
+    ((XAuint32) 0x00000006)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_ADULTHITS \
+    ((XAuint32) 0x00000007)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFTROCK \
+    ((XAuint32) 0x00000008)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_TOP40 \
+    ((XAuint32) 0x00000009)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_COUNTRY \
+    ((XAuint32) 0x0000000A)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_OLDIES \
+    ((XAuint32) 0x0000000B)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFT \
+    ((XAuint32) 0x0000000C)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_NOSTALGIA \
+    ((XAuint32) 0x0000000D)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_JAZZ \
+    ((XAuint32) 0x0000000E)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_CLASSICAL \
+    ((XAuint32) 0x0000000F)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_RHYTHMANDBLUES \
+    ((XAuint32) 0x00000010)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFTRHYTHMANDBLUES \
+    ((XAuint32) 0x00000011)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_LANGUAGE \
+    ((XAuint32) 0x00000012)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_RELIGIOUSMUSIC \
+    ((XAuint32) 0x00000013)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_RELIGIOUSTALK \
+    ((XAuint32) 0x00000014)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_PERSONALITY \
+    ((XAuint32) 0x00000015)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_PUBLIC \
+    ((XAuint32) 0x00000016)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_COLLEGE \
+    ((XAuint32) 0x00000017)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED1 \
+    ((XAuint32) 0x00000018)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED2 \
+    ((XAuint32) 0x00000019)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED3 \
+    ((XAuint32) 0x0000001A)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED4 \
+    ((XAuint32) 0x0000001B)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED5 \
+    ((XAuint32) 0x0000001C)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_WEATHER \
+    ((XAuint32) 0x0000001D)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_EMERGENCYTEST \
+    ((XAuint32) 0x0000001E)
+#define XA_RDSPROGRAMMETYPE_RBDSPTY_EMERGENCY \
+    ((XAuint32) 0x0000001F)
+
+#define XA_RDSRTPLUS_ITEMTITLE              ((XAuint8) 0x01)
+#define XA_RDSRTPLUS_ITEMALBUM              ((XAuint8) 0x02)
+#define XA_RDSRTPLUS_ITEMTRACKNUMBER        ((XAuint8) 0x03)
+#define XA_RDSRTPLUS_ITEMARTIST             ((XAuint8) 0x04)
+#define XA_RDSRTPLUS_ITEMCOMPOSITION        ((XAuint8) 0x05)
+#define XA_RDSRTPLUS_ITEMMOVEMENT           ((XAuint8) 0x06)
+#define XA_RDSRTPLUS_ITEMCONDUCTOR          ((XAuint8) 0x07)
+#define XA_RDSRTPLUS_ITEMCOMPOSER           ((XAuint8) 0x08)
+#define XA_RDSRTPLUS_ITEMBAND               ((XAuint8) 0x09)
+#define XA_RDSRTPLUS_ITEMCOMMENT            ((XAuint8) 0x0A)
+#define XA_RDSRTPLUS_ITEMGENRE              ((XAuint8) 0x0B)
+#define XA_RDSRTPLUS_INFONEWS               ((XAuint8) 0x0C)
+#define XA_RDSRTPLUS_INFONEWSLOCAL          ((XAuint8) 0x0D)
+#define XA_RDSRTPLUS_INFOSTOCKMARKET        ((XAuint8) 0x0E)
+#define XA_RDSRTPLUS_INFOSPORT              ((XAuint8) 0x0F)
+#define XA_RDSRTPLUS_INFOLOTTERY            ((XAuint8) 0x10)
+#define XA_RDSRTPLUS_INFOHOROSCOPE          ((XAuint8) 0x11)
+#define XA_RDSRTPLUS_INFODAILYDIVERSION     ((XAuint8) 0x12)
+#define XA_RDSRTPLUS_INFOHEALTH             ((XAuint8) 0x13)
+#define XA_RDSRTPLUS_INFOEVENT              ((XAuint8) 0x14)
+#define XA_RDSRTPLUS_INFOSZENE              ((XAuint8) 0x15)
+#define XA_RDSRTPLUS_INFOCINEMA             ((XAuint8) 0x16)
+#define XA_RDSRTPLUS_INFOTV                 ((XAuint8) 0x17)
+#define XA_RDSRTPLUS_INFODATETIME           ((XAuint8) 0x18)
+#define XA_RDSRTPLUS_INFOWEATHER            ((XAuint8) 0x19)
+#define XA_RDSRTPLUS_INFOTRAFFIC            ((XAuint8) 0x1A)
+#define XA_RDSRTPLUS_INFOALARM              ((XAuint8) 0x1B)
+#define XA_RDSRTPLUS_INFOADVISERTISEMENT    ((XAuint8) 0x1C)
+#define XA_RDSRTPLUS_INFOURL                ((XAuint8) 0x1D)
+#define XA_RDSRTPLUS_INFOOTHER              ((XAuint8) 0x1E)
+#define XA_RDSRTPLUS_STATIONNAMESHORT       ((XAuint8) 0x1F)
+#define XA_RDSRTPLUS_STATIONNAMELONG        ((XAuint8) 0x20)
+#define XA_RDSRTPLUS_PROGRAMNOW             ((XAuint8) 0x21)
+#define XA_RDSRTPLUS_PROGRAMNEXT            ((XAuint8) 0x22)
+#define XA_RDSRTPLUS_PROGRAMPART            ((XAuint8) 0x23)
+#define XA_RDSRTPLUS_PROGRAMHOST            ((XAuint8) 0x24)
+#define XA_RDSRTPLUS_PROFRAMEDITORIALSTAFF  ((XAuint8) 0x25)
+#define XA_RDSRTPLUS_PROGRAMFREQUENCY       ((XAuint8) 0x26)
+#define XA_RDSRTPLUS_PROGRAMHOMEPAGE        ((XAuint8) 0x27)
+#define XA_RDSRTPLUS_PROGRAMSUBCHANNEL      ((XAuint8) 0x28)
+#define XA_RDSRTPLUS_PHONEHOTLINE           ((XAuint8) 0x29)
+#define XA_RDSRTPLUS_PHONESTUDIO            ((XAuint8) 0x2A)
+#define XA_RDSRTPLUS_PHONEOTHER             ((XAuint8) 0x2B)
+#define XA_RDSRTPLUS_SMSSTUDIO              ((XAuint8) 0x2C)
+#define XA_RDSRTPLUS_SMSOTHER               ((XAuint8) 0x2D)
+#define XA_RDSRTPLUS_EMAILHOTLINE           ((XAuint8) 0x2E)
+#define XA_RDSRTPLUS_EMAILSTUDIO            ((XAuint8) 0x2F)
+#define XA_RDSRTPLUS_EMAILOTHER             ((XAuint8) 0x30)
+#define XA_RDSRTPLUS_MMSOTHER               ((XAuint8) 0x31)
+#define XA_RDSRTPLUS_CHAT                   ((XAuint8) 0x32)
+#define XA_RDSRTPLUS_CHATCENTER             ((XAuint8) 0x33)
+#define XA_RDSRTPLUS_VOTEQUESTION           ((XAuint8) 0x34)
+#define XA_RDSRTPLUS_VOTECENTER             ((XAuint8) 0x35)
+#define XA_RDSRTPLUS_OPENCLASS45            ((XAuint8) 0x36)
+#define XA_RDSRTPLUS_OPENCLASS55            ((XAuint8) 0x37)
+#define XA_RDSRTPLUS_OPENCLASS56            ((XAuint8) 0x38)
+#define XA_RDSRTPLUS_OPENCLASS57            ((XAuint8) 0x39)
+#define XA_RDSRTPLUS_OPENCLASS58            ((XAuint8) 0x3A)
+#define XA_RDSRTPLUS_PLACE                  ((XAuint8) 0x3B)
+#define XA_RDSRTPLUS_APPOINTMENT            ((XAuint8) 0x3C)
+#define XA_RDSRTPLUS_IDENTIFIER             ((XAuint8) 0x3D)
+#define XA_RDSRTPLUS_PURCHASE               ((XAuint8) 0x3E)
+#define XA_RDSRTPLUS_GETDATA                ((XAuint8) 0x3F)
+
+XA_API extern const XAInterfaceID XA_IID_RDS;
+
+struct XARDSItf_;
+typedef const struct XARDSItf_ * const * XARDSItf;
+
+typedef void (XAAPIENTRY * xaGetODAGroupCallback) (
+    XARadioItf caller,
+    void * pContext,
+    XAboolean success,
+    XAint16 group,
+    XAuint16 message
+);
+
+typedef void (XAAPIENTRY * xaNewODADataCallback) (
+    XARDSItf caller,
+    void * pContext,
+    XAint16 group,
+    XAuint64 data
+);
+
+typedef void (XAAPIENTRY * xaRDSCallback) (
+    XARDSItf caller,
+    void * pContext,
+    XAuint16 event,
+    XAuint8 eventData
+);
+
+struct XARDSItf_ {
+    XAresult (*QueryRDSSignal) (
+        XARDSItf self,
+        XAboolean * isSignal
+    );
+    XAresult (*GetProgrammeServiceName) (
+        XARDSItf self,
+        XAchar * ps
+    );
+    XAresult (*GetRadioText) (
+        XARDSItf self,
+        XAchar * rt
+    );
+    XAresult (*GetRadioTextPlus) (
+        XARDSItf self,
+        XAuint8 contentType,
+        XAchar * informationElement,
+        XAchar * descriptor,
+        XAuint8 * descriptorContentType
+    );
+    XAresult (*GetProgrammeType) (
+        XARDSItf self,
+        XAuint32 * pty
+    );
+    XAresult (*GetProgrammeTypeString) (
+        XARDSItf self,
+        XAboolean isLengthMax16,
+        XAchar * pty
+    );
+    XAresult (*GetProgrammeIdentificationCode) (
+        XARDSItf self,
+        XAint16 * pi
+    );
+    XAresult (*GetClockTime) (
+        XARDSItf self,
+        XAtime * dateAndTime
+    );
+    XAresult (*GetTrafficAnnouncement) (
+        XARDSItf self,
+        XAboolean * ta
+    );
+    XAresult (*GetTrafficProgramme) (
+        XARDSItf self,
+        XAboolean * tp
+    );
+    XAresult (*SeekByProgrammeType) (
+        XARDSItf self,
+        XAuint32 pty,
+        XAboolean upwards
+    );
+    XAresult (*SeekTrafficAnnouncement) (
+        XARDSItf self,
+        XAboolean upwards
+    );
+    XAresult (*SeekTrafficProgramme) (
+        XARDSItf self,
+        XAboolean upwards
+    );
+    XAresult (*SetAutomaticSwitching) (
+        XARDSItf self,
+        XAboolean automatic
+    );
+    XAresult (*GetAutomaticSwitching) (
+        XARDSItf self,
+        XAboolean * automatic
+    );
+    XAresult (*SetAutomaticTrafficAnnouncement) (
+        XARDSItf self,
+        XAboolean automatic
+    );
+    XAresult (*GetAutomaticTrafficAnnouncement) (
+        XARDSItf self,
+        XAboolean * automatic
+    );
+    XAresult (*GetODAGroup) (
+        XARDSItf self,
+        XAuint16 AID,
+        xaGetODAGroupCallback callback,
+        void * pContext
+    );
+    XAresult (*SubscribeODAGroup) (
+        XARDSItf self,
+        XAint16 group,
+        XAboolean useErrorCorrection
+    );
+    XAresult (*UnsubscribeODAGroup) (
+        XARDSItf self,
+        XAint16 group
+    );
+    XAresult (*ListODAGroupSubscriptions) (
+        XARDSItf self,
+        XAint16* pGroups,
+        XAuint32* pLength
+    );
+    XAresult (*RegisterRDSCallback) (
+        XARDSItf self,
+        xaRDSCallback callback, 
+        void * pContext
+    );
+    XAresult (*RegisterODADataCallback) (
+        XARDSItf self,
+        xaNewODADataCallback callback, 
+        void * pContext
+    );
+};
+
+/* VIBRA */
+
+XA_API extern const XAInterfaceID XA_IID_VIBRA;
+
+struct XAVibraItf_;
+typedef const struct XAVibraItf_ * const * XAVibraItf;
+
+struct XAVibraItf_ {
+    XAresult (*Vibrate) (
+        XAVibraItf self,
+        XAboolean vibrate
+    );
+    XAresult (*IsVibrating) (
+        XAVibraItf self,
+        XAboolean * pVibrating
+    );
+    XAresult (*SetFrequency) (
+        XAVibraItf self,
+        XAmilliHertz frequency
+    );
+    XAresult (*GetFrequency) (
+        XAVibraItf self,
+        XAmilliHertz * pFrequency
+    );
+    XAresult (*SetIntensity) (
+        XAVibraItf self,
+        XApermille intensity
+    );
+    XAresult (*GetIntensity) (
+        XAVibraItf self,
+        XApermille * pIntensity
+    );
+};
+
+/* LED ARRAY */
+
+typedef struct XAHSL_ {
+    XAmillidegree hue;
+    XApermille saturation;
+    XApermille lightness;
+} XAHSL;
+
+XA_API extern const XAInterfaceID XA_IID_LED;
+
+struct XALEDArrayItf_;
+typedef const struct XALEDArrayItf_ * const * XALEDArrayItf;
+
+struct XALEDArrayItf_ {
+    XAresult (*ActivateLEDArray) (
+        XALEDArrayItf self,
+        XAuint32 lightMask
+    );
+    XAresult (*IsLEDArrayActivated) (
+        XALEDArrayItf self,
+        XAuint32 * pLightMask
+    );
+    XAresult (*SetColor) (
+        XALEDArrayItf self,
+        XAuint8 index,
+        const XAHSL * pColor
+    );
+    XAresult (*GetColor) (
+        XALEDArrayItf self,
+        XAuint8 index,
+        XAHSL * pColor
+    );
+};
+
+
+
+  /*****************************************************************/
+  /* CODEC RELATED INTERFACES, STRUCTS AND DEFINES                 */
+  /*****************************************************************/
+
+/* AUDIO ENCODER AND AUDIO ENCODER/DECODER CAPABILITIES */
+
+#define XA_RATECONTROLMODE_CONSTANTBITRATE  ((XAuint32) 0x00000001)
+#define XA_RATECONTROLMODE_VARIABLEBITRATE  ((XAuint32) 0x00000002)
+
+#define XA_AUDIOCODEC_PCM                   ((XAuint32) 0x00000001)
+#define XA_AUDIOCODEC_MP3                   ((XAuint32) 0x00000002)
+#define XA_AUDIOCODEC_AMR                   ((XAuint32) 0x00000003)
+#define XA_AUDIOCODEC_AMRWB                 ((XAuint32) 0x00000004)
+#define XA_AUDIOCODEC_AMRWBPLUS             ((XAuint32) 0x00000005)
+#define XA_AUDIOCODEC_AAC                   ((XAuint32) 0x00000006)
+#define XA_AUDIOCODEC_WMA                   ((XAuint32) 0x00000007)
+#define XA_AUDIOCODEC_REAL                  ((XAuint32) 0x00000008)
+#define XA_AUDIOCODEC_VORBIS                ((XAuint32) 0x00000009)
+
+#define XA_AUDIOPROFILE_PCM                 ((XAuint32) 0x00000001)
+
+#define XA_AUDIOPROFILE_MPEG1_L3            ((XAuint32) 0x00000001)
+#define XA_AUDIOPROFILE_MPEG2_L3            ((XAuint32) 0x00000002)
+#define XA_AUDIOPROFILE_MPEG25_L3           ((XAuint32) 0x00000003)
+
+#define XA_AUDIOCHANMODE_MP3_MONO           ((XAuint32) 0x00000001)
+#define XA_AUDIOCHANMODE_MP3_STEREO         ((XAuint32) 0x00000002)
+#define XA_AUDIOCHANMODE_MP3_JOINTSTEREO    ((XAuint32) 0x00000003)
+#define XA_AUDIOCHANMODE_MP3_DUAL           ((XAuint32) 0x00000004)
+
+#define XA_AUDIOPROFILE_AMR                 ((XAuint32) 0x00000001)
+
+#define XA_AUDIOSTREAMFORMAT_CONFORMANCE    ((XAuint32) 0x00000001)
+#define XA_AUDIOSTREAMFORMAT_IF1            ((XAuint32) 0x00000002)
+#define XA_AUDIOSTREAMFORMAT_IF2            ((XAuint32) 0x00000003)
+#define XA_AUDIOSTREAMFORMAT_FSF            ((XAuint32) 0x00000004)
+#define XA_AUDIOSTREAMFORMAT_RTPPAYLOAD     ((XAuint32) 0x00000005)
+#define XA_AUDIOSTREAMFORMAT_ITU            ((XAuint32) 0x00000006)
+
+#define XA_AUDIOPROFILE_AMRWB               ((XAuint32) 0x00000001)
+
+#define XA_AUDIOPROFILE_AMRWBPLUS           ((XAuint32) 0x00000001)
+
+#define XA_AUDIOPROFILE_AAC_AAC             ((XAuint32) 0x00000001)
+
+#define XA_AUDIOMODE_AAC_MAIN               ((XAuint32) 0x00000001)
+#define XA_AUDIOMODE_AAC_LC                 ((XAuint32) 0x00000002)
+#define XA_AUDIOMODE_AAC_SSR                ((XAuint32) 0x00000003)
+#define XA_AUDIOMODE_AAC_LTP                ((XAuint32) 0x00000004)
+#define XA_AUDIOMODE_AAC_HE                 ((XAuint32) 0x00000005)
+#define XA_AUDIOMODE_AAC_SCALABLE           ((XAuint32) 0x00000006)
+#define XA_AUDIOMODE_AAC_ERLC               ((XAuint32) 0x00000007)
+#define XA_AUDIOMODE_AAC_LD                 ((XAuint32) 0x00000008)
+#define XA_AUDIOMODE_AAC_HE_PS              ((XAuint32) 0x00000009)
+#define XA_AUDIOMODE_AAC_HE_MPS             ((XAuint32) 0x0000000A)
+
+#define XA_AUDIOSTREAMFORMAT_MP2ADTS        ((XAuint32) 0x00000001)
+#define XA_AUDIOSTREAMFORMAT_MP4ADTS        ((XAuint32) 0x00000002)
+#define XA_AUDIOSTREAMFORMAT_MP4LOAS        ((XAuint32) 0x00000003)
+#define XA_AUDIOSTREAMFORMAT_MP4LATM        ((XAuint32) 0x00000004)
+#define XA_AUDIOSTREAMFORMAT_ADIF           ((XAuint32) 0x00000005)
+#define XA_AUDIOSTREAMFORMAT_MP4FF          ((XAuint32) 0x00000006)
+#define XA_AUDIOSTREAMFORMAT_RAW            ((XAuint32) 0x00000007)
+
+#define XA_AUDIOPROFILE_WMA7                ((XAuint32) 0x00000001)
+#define XA_AUDIOPROFILE_WMA8                ((XAuint32) 0x00000002)
+#define XA_AUDIOPROFILE_WMA9                ((XAuint32) 0x00000003)
+#define XA_AUDIOPROFILE_WMA10               ((XAuint32) 0x00000004)
+
+#define XA_AUDIOMODE_WMA_LEVEL1             ((XAuint32) 0x00000001)
+#define XA_AUDIOMODE_WMA_LEVEL2             ((XAuint32) 0x00000002)
+#define XA_AUDIOMODE_WMA_LEVEL3             ((XAuint32) 0x00000003)
+#define XA_AUDIOMODE_WMA_LEVEL4             ((XAuint32) 0x00000004)
+#define XA_AUDIOMODE_WMAPRO_LEVELM0         ((XAuint32) 0x00000005)
+#define XA_AUDIOMODE_WMAPRO_LEVELM1         ((XAuint32) 0x00000006)
+#define XA_AUDIOMODE_WMAPRO_LEVELM2         ((XAuint32) 0x00000007)
+#define XA_AUDIOMODE_WMAPRO_LEVELM3         ((XAuint32) 0x00000008)
+
+#define XA_AUDIOPROFILE_REALAUDIO           ((XAuint32) 0x00000001)
+
+#define XA_AUDIOMODE_REALAUDIO_G2           ((XAuint32) 0x00000001)
+#define XA_AUDIOMODE_REALAUDIO_8            ((XAuint32) 0x00000002)
+#define XA_AUDIOMODE_REALAUDIO_10           ((XAuint32) 0x00000003)
+#define XA_AUDIOMODE_REALAUDIO_SURROUND     ((XAuint32) 0x00000004)
+
+#define XA_AUDIOPROFILE_VORBIS              ((XAuint32) 0x00000001)
+
+#define XA_AUDIOMODE_VORBIS                 ((XAuint32) 0x00000001)
+
+
+typedef struct XAAudioCodecDescriptor_ {
+    XAuint32 maxChannels;
+    XAuint32 minBitsPerSample;
+    XAuint32 maxBitsPerSample;
+    XAmilliHertz minSampleRate;
+    XAmilliHertz maxSampleRate;
+    XAboolean isFreqRangeContinuous;
+    XAmilliHertz * pSampleRatesSupported;
+    XAuint32 numSampleRatesSupported;
+    XAuint32 minBitRate;
+    XAuint32 maxBitRate;
+    XAboolean isBitrateRangeContinuous;
+    XAuint32 * pBitratesSupported;
+    XAuint32 numBitratesSupported;
+    XAuint32 profileSetting;
+    XAuint32 modeSetting;
+} XAAudioCodecDescriptor;
+
+typedef struct XAAudioEncoderSettings_ {
+    XAuint32 encoderId;
+    XAuint32 channelsIn;
+    XAuint32 channelsOut;
+    XAmilliHertz sampleRate;
+    XAuint32 bitRate;
+    XAuint32 bitsPerSample;
+    XAuint32 rateControl;
+    XAuint32 profileSetting;
+    XAuint32 levelSetting;
+    XAuint32 channelMode;
+    XAuint32 streamFormat;
+    XAuint32 encodeOptions;
+    XAuint32 blockAlignment;
+} XAAudioEncoderSettings;
+
+XA_API extern const XAInterfaceID XA_IID_AUDIODECODERCAPABILITIES;
+
+struct XAAudioDecoderCapabilitiesItf_;
+typedef const struct XAAudioDecoderCapabilitiesItf_
+    * const * XAAudioDecoderCapabilitiesItf;
+
+struct XAAudioDecoderCapabilitiesItf_ {
+    XAresult (*GetAudioDecoders) (
+        XAAudioDecoderCapabilitiesItf self,
+        XAuint32 * pNumDecoders,
+        XAuint32 * pDecoderIds
+    );
+    XAresult (*GetAudioDecoderCapabilities) (
+        XAAudioDecoderCapabilitiesItf self,
+        XAuint32 decoderId,
+        XAuint32 * pIndex,
+        XAAudioCodecDescriptor * pDescriptor
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_AUDIOENCODER;
+
+struct XAAudioEncoderItf_;
+typedef const struct XAAudioEncoderItf_ * const * XAAudioEncoderItf;
+
+struct XAAudioEncoderItf_ {
+    XAresult (*SetEncoderSettings) (
+        XAAudioEncoderItf self,
+        XAAudioEncoderSettings * pSettings
+    );
+    XAresult (*GetEncoderSettings) (
+        XAAudioEncoderItf self,
+        XAAudioEncoderSettings * pSettings
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_AUDIOENCODERCAPABILITIES;
+
+struct XAAudioEncoderCapabilitiesItf_;
+typedef const struct XAAudioEncoderCapabilitiesItf_
+    * const * XAAudioEncoderCapabilitiesItf;
+
+struct XAAudioEncoderCapabilitiesItf_ {
+    XAresult (*GetAudioEncoders) (
+        XAAudioEncoderCapabilitiesItf self,
+        XAuint32 * pNumEncoders,
+        XAuint32 * pEncoderIds
+    );
+    XAresult (*GetAudioEncoderCapabilities) (
+        XAAudioEncoderCapabilitiesItf self,
+        XAuint32 encoderId,
+        XAuint32 * pIndex,
+        XAAudioCodecDescriptor * pDescriptor
+    );
+};
+
+/* IMAGE ENCODER AND IMAGE ENCODER/DECODER CAPABILITIES */
+
+#define XA_IMAGECODEC_JPEG              ((XAuint32) 0x00000001)
+#define XA_IMAGECODEC_GIF               ((XAuint32) 0x00000002)
+#define XA_IMAGECODEC_BMP               ((XAuint32) 0x00000003)
+#define XA_IMAGECODEC_PNG               ((XAuint32) 0x00000004)
+#define XA_IMAGECODEC_TIFF              ((XAuint32) 0x00000005)
+#define XA_IMAGECODEC_RAW               ((XAuint32) 0x00000006)
+
+typedef struct XAImageCodecDescriptor_ {
+    XAuint32 codecId;
+    XAuint32 maxWidth;
+    XAuint32 maxHeight;
+} XAImageCodecDescriptor;
+
+typedef struct XAImageSettings_ {
+    XAuint32 encoderId;
+    XAuint32 width;
+    XAuint32 height;
+    XApermille compressionLevel;
+    XAuint32 colorFormat;
+} XAImageSettings;
+
+XA_API extern const XAInterfaceID XA_IID_IMAGEENCODERCAPABILITIES;
+
+struct XAImageEncoderCapabilitiesItf_;
+typedef const struct XAImageEncoderCapabilitiesItf_
+    * const * XAImageEncoderCapabilitiesItf;
+
+struct XAImageEncoderCapabilitiesItf_ {
+    XAresult (*GetImageEncoderCapabilities) (
+        XAImageEncoderCapabilitiesItf self,
+        XAuint32 * pEncoderId,
+        XAImageCodecDescriptor * pDescriptor
+    );
+    XAresult (*QueryColorFormats) (
+        const XAImageEncoderCapabilitiesItf self,
+        XAuint32 * pIndex,
+        XAuint32 * pColorFormat
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_IMAGEDECODERCAPABILITIES;
+
+struct XAImageDecoderCapabilitiesItf_;
+typedef const struct XAImageDecoderCapabilitiesItf_
+    * const * XAImageDecoderCapabilitiesItf;
+
+struct XAImageDecoderCapabilitiesItf_ {
+    XAresult (*GetImageDecoderCapabilities) (
+        XAImageDecoderCapabilitiesItf self,
+        XAuint32 * pDecoderId,
+        XAImageCodecDescriptor * pDescriptor
+    );
+    XAresult (*QueryColorFormats) (
+        const XAImageDecoderCapabilitiesItf self,
+        XAuint32 * pIndex,
+        XAuint32 * pColorFormat
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_IMAGEENCODER;
+
+struct XAImageEncoderItf_;
+typedef const struct XAImageEncoderItf_ * const * XAImageEncoderItf;
+
+struct XAImageEncoderItf_ {
+    XAresult (*SetImageSettings) (
+        XAImageEncoderItf self,
+        const XAImageSettings * pSettings
+    );
+    XAresult (*GetImageSettings) (
+        XAImageEncoderItf self,
+        XAImageSettings * pSettings
+    );
+    XAresult (*GetSizeEstimate) (
+        XAImageEncoderItf self,
+        XAuint32 * pSize
+    );
+};
+
+/* VIDEO ENCODER AND VIDEO ENCODER/DECODER CAPABILITIES */
+
+#define XA_VIDEOCODEC_MPEG2                     ((XAuint32) 0x00000001)
+#define XA_VIDEOCODEC_H263                      ((XAuint32) 0x00000002)
+#define XA_VIDEOCODEC_MPEG4                     ((XAuint32) 0x00000003)
+#define XA_VIDEOCODEC_AVC                       ((XAuint32) 0x00000004)
+#define XA_VIDEOCODEC_VC1                       ((XAuint32) 0x00000005)
+
+#define XA_VIDEOPROFILE_MPEG2_SIMPLE            ((XAuint32) 0x00000001)
+#define XA_VIDEOPROFILE_MPEG2_MAIN              ((XAuint32) 0x00000002)
+#define XA_VIDEOPROFILE_MPEG2_422               ((XAuint32) 0x00000003)
+#define XA_VIDEOPROFILE_MPEG2_SNR               ((XAuint32) 0x00000004)
+#define XA_VIDEOPROFILE_MPEG2_SPATIAL           ((XAuint32) 0x00000005)
+#define XA_VIDEOPROFILE_MPEG2_HIGH              ((XAuint32) 0x00000006)
+
+#define XA_VIDEOLEVEL_MPEG2_LL                  ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_MPEG2_ML                  ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_MPEG2_H14                 ((XAuint32) 0x00000003)
+#define XA_VIDEOLEVEL_MPEG2_HL                  ((XAuint32) 0x00000004)
+
+#define XA_VIDEOPROFILE_H263_BASELINE           ((XAuint32) 0x00000001)
+#define XA_VIDEOPROFILE_H263_H320CODING         ((XAuint32) 0x00000002)
+#define XA_VIDEOPROFILE_H263_BACKWARDCOMPATIBLE ((XAuint32) 0x00000003)
+#define XA_VIDEOPROFILE_H263_ISWV2              ((XAuint32) 0x00000004)
+#define XA_VIDEOPROFILE_H263_ISWV3              ((XAuint32) 0x00000005)
+#define XA_VIDEOPROFILE_H263_HIGHCOMPRESSION    ((XAuint32) 0x00000006)
+#define XA_VIDEOPROFILE_H263_INTERNET           ((XAuint32) 0x00000007)
+#define XA_VIDEOPROFILE_H263_INTERLACE          ((XAuint32) 0x00000008)
+#define XA_VIDEOPROFILE_H263_HIGHLATENCY        ((XAuint32) 0x00000009)
+
+#define XA_VIDEOLEVEL_H263_10                   ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_H263_20                   ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_H263_30                   ((XAuint32) 0x00000003)
+#define XA_VIDEOLEVEL_H263_40                   ((XAuint32) 0x00000004)
+#define XA_VIDEOLEVEL_H263_45                   ((XAuint32) 0x00000005)
+#define XA_VIDEOLEVEL_H263_50                   ((XAuint32) 0x00000006)
+#define XA_VIDEOLEVEL_H263_60                   ((XAuint32) 0x00000007)
+#define XA_VIDEOLEVEL_H263_70                   ((XAuint32) 0x00000008)
+
+#define XA_VIDEOPROFILE_MPEG4_SIMPLE            ((XAuint32) 0x00000001)
+#define XA_VIDEOPROFILE_MPEG4_SIMPLESCALABLE    ((XAuint32) 0x00000002)
+#define XA_VIDEOPROFILE_MPEG4_CORE              ((XAuint32) 0x00000003)
+#define XA_VIDEOPROFILE_MPEG4_MAIN              ((XAuint32) 0x00000004)
+#define XA_VIDEOPROFILE_MPEG4_NBIT              ((XAuint32) 0x00000005)
+#define XA_VIDEOPROFILE_MPEG4_SCALABLETEXTURE   ((XAuint32) 0x00000006)
+#define XA_VIDEOPROFILE_MPEG4_SIMPLEFACE        ((XAuint32) 0x00000007)
+#define XA_VIDEOPROFILE_MPEG4_SIMPLEFBA         ((XAuint32) 0x00000008)
+#define XA_VIDEOPROFILE_MPEG4_BASICANIMATED     ((XAuint32) 0x00000009)
+#define XA_VIDEOPROFILE_MPEG4_HYBRID            ((XAuint32) 0x0000000A)
+#define XA_VIDEOPROFILE_MPEG4_ADVANCEDREALTIME  ((XAuint32) 0x0000000B)
+#define XA_VIDEOPROFILE_MPEG4_CORESCALABLE      ((XAuint32) 0x0000000C)
+#define XA_VIDEOPROFILE_MPEG4_ADVANCEDCODING    ((XAuint32) 0x0000000D)
+#define XA_VIDEOPROFILE_MPEG4_ADVANCEDCORE      ((XAuint32) 0x0000000E)
+#define XA_VIDEOPROFILE_MPEG4_ADVANCEDSCALABLE  ((XAuint32) 0x0000000F)
+
+#define XA_VIDEOLEVEL_MPEG4_0                   ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_MPEG4_0b                  ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_MPEG4_1                   ((XAuint32) 0x00000003)
+#define XA_VIDEOLEVEL_MPEG4_2                   ((XAuint32) 0x00000004)
+#define XA_VIDEOLEVEL_MPEG4_3                   ((XAuint32) 0x00000005)
+#define XA_VIDEOLEVEL_MPEG4_4                   ((XAuint32) 0x00000006)
+#define XA_VIDEOLEVEL_MPEG4_4a                  ((XAuint32) 0x00000007)
+#define XA_VIDEOLEVEL_MPEG4_5                   ((XAuint32) 0x00000008)
+
+#define XA_VIDEOPROFILE_AVC_BASELINE            ((XAuint32) 0x00000001)
+#define XA_VIDEOPROFILE_AVC_MAIN                ((XAuint32) 0x00000002)
+#define XA_VIDEOPROFILE_AVC_EXTENDED            ((XAuint32) 0x00000003)
+#define XA_VIDEOPROFILE_AVC_HIGH                ((XAuint32) 0x00000004)
+#define XA_VIDEOPROFILE_AVC_HIGH10              ((XAuint32) 0x00000005)
+#define XA_VIDEOPROFILE_AVC_HIGH422             ((XAuint32) 0x00000006)
+#define XA_VIDEOPROFILE_AVC_HIGH444             ((XAuint32) 0x00000007)
+
+#define XA_VIDEOLEVEL_AVC_1                     ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_AVC_1B                    ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_AVC_11                    ((XAuint32) 0x00000003)
+#define XA_VIDEOLEVEL_AVC_12                    ((XAuint32) 0x00000004)
+#define XA_VIDEOLEVEL_AVC_13                    ((XAuint32) 0x00000005)
+#define XA_VIDEOLEVEL_AVC_2                     ((XAuint32) 0x00000006)
+#define XA_VIDEOLEVEL_AVC_21                    ((XAuint32) 0x00000007)
+#define XA_VIDEOLEVEL_AVC_22                    ((XAuint32) 0x00000008)
+#define XA_VIDEOLEVEL_AVC_3                     ((XAuint32) 0x00000009)
+#define XA_VIDEOLEVEL_AVC_31                    ((XAuint32) 0x0000000A)
+#define XA_VIDEOLEVEL_AVC_32                    ((XAuint32) 0x0000000B)
+#define XA_VIDEOLEVEL_AVC_4                     ((XAuint32) 0x0000000C)
+#define XA_VIDEOLEVEL_AVC_41                    ((XAuint32) 0x0000000D)
+#define XA_VIDEOLEVEL_AVC_42                    ((XAuint32) 0x0000000E)
+#define XA_VIDEOLEVEL_AVC_5                     ((XAuint32) 0x0000000F)
+#define XA_VIDEOLEVEL_AVC_51                    ((XAuint32) 0x00000010)
+
+#define XA_VIDEOLEVEL_VC1_SIMPLE                ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_VC1_MAIN                  ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_VC1_ADVANCED              ((XAuint32) 0x00000003)
+
+#define XA_VIDEOLEVEL_VC1_LOW                   ((XAuint32) 0x00000001)
+#define XA_VIDEOLEVEL_VC1_MEDIUM                ((XAuint32) 0x00000002)
+#define XA_VIDEOLEVEL_VC1_HIGH                  ((XAuint32) 0x00000003)
+#define XA_VIDEOLEVEL_VC1_L0                    ((XAuint32) 0x00000004)
+#define XA_VIDEOLEVEL_VC1_L1                    ((XAuint32) 0x00000005)
+#define XA_VIDEOLEVEL_VC1_L2                    ((XAuint32) 0x00000006)
+#define XA_VIDEOLEVEL_VC1_L3                    ((XAuint32) 0x00000007)
+#define XA_VIDEOLEVEL_VC1_L4                    ((XAuint32) 0x00000008)
+
+typedef struct XAVideoCodecDescriptor_ {
+    XAuint32 codecId;
+    XAuint32 maxWidth;
+    XAuint32 maxHeight;
+    XAuint32 maxFrameRate;
+    XAuint32 maxBitRate;
+    XAuint32 rateControlSupported;
+    XAuint32 profileSetting;
+    XAuint32 levelSetting;
+} XAVideoCodecDescriptor;
+
+typedef struct XAVideoSettings_ {
+    XAuint32 encoderId;
+    XAuint32 width;
+    XAuint32 height;
+    XAuint32 frameRate;
+    XAuint32 bitRate;
+    XAuint32 rateControl;
+    XAuint32 profileSetting;
+    XAuint32 levelSetting;
+    XAuint32 keyFrameInterval;
+} XAVideoSettings;
+
+XA_API extern const XAInterfaceID XA_IID_VIDEODECODERCAPABILITIES;
+
+struct XAVideoDecoderCapabilitiesItf_;
+typedef const struct XAVideoDecoderCapabilitiesItf_
+    * const * XAVideoDecoderCapabilitiesItf;
+
+struct XAVideoDecoderCapabilitiesItf_ {
+    XAresult (*GetVideoDecoders) (
+        XAVideoDecoderCapabilitiesItf self,
+        XAuint32 * pNumDecoders,
+        XAuint32 * pDecoderIds
+    );
+    XAresult (*GetVideoDecoderCapabilities) (
+        XAVideoDecoderCapabilitiesItf self,
+        XAuint32 decoderId,
+        XAuint32 * pIndex,
+        XAVideoCodecDescriptor * pDescriptor
+    );
+};
+
+XA_API extern const XAInterfaceID XA_IID_VIDEOENCODER;
+
+XA_API extern const XAInterfaceID XA_IID_VIDEOENCODERCAPABILITIES;
+
+struct XAVideoEncoderCapabilitiesItf_;
+typedef const struct XAVideoEncoderCapabilitiesItf_
+    * const * XAVideoEncoderCapabilitiesItf;
+
+struct XAVideoEncoderCapabilitiesItf_ {
+    XAresult (*GetVideoEncoders) (
+        XAVideoEncoderCapabilitiesItf self,
+        XAuint32 * pNumEncoders,
+        XAuint32 * pEncoderIds
+    );
+    XAresult (*GetVideoEncoderCapabilities) (
+        XAVideoEncoderCapabilitiesItf self,
+        XAuint32 encoderId,
+        XAuint32 * pIndex,
+        XAVideoCodecDescriptor * pDescriptor
+    );
+};
+
+struct XAVideoEncoderItf_;
+typedef const struct XAVideoEncoderItf_ * const * XAVideoEncoderItf;
+
+struct XAVideoEncoderItf_ {
+    XAresult (*SetVideoSettings) (
+        XAVideoEncoderItf self,
+        XAVideoSettings * pSettings
+    );
+    XAresult (*GetVideoSettings) (
+        XAVideoEncoderItf self,
+        XAVideoSettings * pSettings
+    );
+};
+
+/* STREAM INFORMATION */
+
+#define XA_DOMAINTYPE_AUDIO     0x00000001
+#define XA_DOMAINTYPE_VIDEO     0x00000002
+#define XA_DOMAINTYPE_IMAGE     0x00000003
+#define XA_DOMAINTYPE_TIMEDTEXT 0x00000004
+#define XA_DOMAINTYPE_MIDI      0x00000005
+#define XA_DOMAINTYPE_VENDOR    0xFFFFFFFE
+#define XA_DOMAINTYPE_UNKNOWN   0xFFFFFFFF
+
+#define XA_MIDIBANK_DEVICE      0x00000001
+#define XA_MIDIBANK_CUSTOM      0x00000002
+
+#define XA_MIDI_UNKNOWN         0xFFFFFFFF
+
+#define XA_STREAMCBEVENT_PROPERTYCHANGE     ((XAuint32) 0x00000001)
+
+typedef struct XAMediaContainerInformation_ {
+    XAuint32 containerType;
+    XAmillisecond mediaDuration;
+    XAuint32 numStreams;
+} XAMediaContainerInformation;
+
+typedef struct XAVideoStreamInformation_ {
+    XAuint32 codecId;
+    XAuint32 width;
+    XAuint32 height;
+    XAuint32 frameRate;
+    XAuint32 bitRate;
+    XAmillisecond duration;
+} XAVideoStreamInformation;
+
+typedef struct XAAudioStreamInformation_ {
+    XAuint32 codecId;
+    XAuint32 channels;
+    XAmilliHertz sampleRate;
+    XAuint32 bitRate;
+    XAchar langCountry[16];
+    XAmillisecond duration;
+} XAAudioStreamInformation;
+
+typedef struct XAImageStreamInformation_ {
+    XAuint32 codecId;
+    XAuint32 width;
+    XAuint32 height;
+    XAmillisecond presentationDuration;
+} XAImageStreamInformation;
+
+typedef struct XATimedTextStreamInformation_ {
+    XAuint16 layer;
+    XAuint32 width;
+    XAuint32 height;
+    XAuint16 tx;
+    XAuint16 ty;
+    XAuint32 bitrate;
+    XAchar langCountry[16];
+    XAmillisecond duration;
+} XATimedTextStreamInformation;
+
+typedef struct XAMIDIStreamInformation_ {
+    XAuint32 channels;
+    XAuint32 tracks;
+    XAuint32 bankType;
+    XAchar langCountry[16];
+    XAmillisecond duration;
+} XAMIDIStreamInformation;
+
+typedef struct XAVendorStreamInformation_ {
+    void *VendorStreamInfo;
+} XAVendorStreamInformation;
+
+XA_API extern const XAInterfaceID XA_IID_STREAMINFORMATION;
+
+struct XAStreamInformationItf_;
+typedef const struct XAStreamInformationItf_ * const * XAStreamInformationItf;
+
+typedef void (XAAPIENTRY * xaStreamEventChangeCallback) (
+    XAStreamInformationItf caller,
+    XAuint32 eventId,
+    XAuint32 streamIndex,
+    void * pEventData,
+    void * pContext
+);
+
+struct XAStreamInformationItf_ {
+    XAresult (*QueryMediaContainerInformation) (
+        XAStreamInformationItf self,
+        XAMediaContainerInformation * info
+    );
+    XAresult (*QueryStreamType) (
+        XAStreamInformationItf self,
+        XAuint32 streamIndex,
+        XAuint32 *domain
+    );
+    XAresult (*QueryStreamInformation) (
+        XAStreamInformationItf self,
+        XAuint32 streamIndex,
+        void * info
+    );
+    XAresult (*QueryStreamName) (
+        XAStreamInformationItf self,
+        XAuint32 streamIndex,
+        XAuint16 * pNameSize,
+        XAchar * pName
+    );
+    XAresult (*RegisterStreamChangeCallback) (
+        XAStreamInformationItf self,
+        xaStreamEventChangeCallback callback,
+        void * pContext
+    );
+    XAresult (*QueryActiveStreams) (
+        XAStreamInformationItf self,
+        XAuint32 *numStreams,
+        XAboolean *activeStreams
+    );
+    XAresult (*SetActiveStream) (
+        XAStreamInformationItf self,
+        XAuint32   streamNum,
+        XAboolean  active,
+        XAboolean  commitNow
+    );
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* _OPENMAXAL_H_ */