OpenMAXAL.h revision 8db0b106cdce5f5216b1535492de7930ad738aed
1872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/*
2872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Copyright (c) 2007-2010 The Khronos Group Inc.
3872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
4872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * Permission is hereby granted, free of charge, to any person obtaining
5872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * a copy of this software and/or associated documentation files (the
6872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * "Materials "), to deal in the Materials without restriction, including
7872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * without limitation the rights to use, copy, modify, merge, publish,
8872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * distribute, sublicense, and/or sell copies of the Materials, and to
9872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * permit persons to whom the Materials are furnished to do so, subject to
10872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * the following conditions:
11872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
12872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * The above copyright notice and this permission notice shall be included
13872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * in all copies or substantial portions of the Materials.
14872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
15872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
1707ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
1807ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
1907ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2007ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2107ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes *
23872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes * OpenMAXAL.h - OpenMAX AL version 1.0.1
2407ed66b5ae659c452cbe1ab20c3dbf1d6f546461Elliott Hughes *
25872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes */
26872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
2700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers/****************************************************************************/
28872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/* NOTE: This file is a standard OpenMAX AL header file and should not be   */
29872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/* modified in any way.                                                     */
30872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/****************************************************************************/
31872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
32872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#ifndef _OPENMAXAL_H_
33376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define _OPENMAXAL_H_
34872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
35872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#include "OpenMAXAL_Platform.h"
36872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
37872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#ifdef __cplusplus
385d10a87ea630b22180d3731018a70b77270c726eElliott Hughesextern "C" {
394b95e8fad803ad307fa09c11c08894544e07a731Mathieu Chartier#endif
40872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
415d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
425d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
435d10a87ea630b22180d3731018a70b77270c726eElliott Hughes  /*****************************************************************/
4468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /* TYPES                                                         */
45cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes  /*****************************************************************/
46cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes
475d10a87ea630b22180d3731018a70b77270c726eElliott Hughes/* remap common types to XA types for clarity */
485d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_int8_t   XAint8;   /* 8 bit signed integer    */
495d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_uint8_t  XAuint8;  /* 8 bit unsigned integer  */
505d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_int16_t  XAint16;  /* 16 bit signed integer   */
515d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_uint16_t XAuint16; /* 16 bit unsigned integer */
525d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_int32_t  XAint32;  /* 32 bit signed integer   */
535d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_uint32_t XAuint32; /* 32 bit unsigned integer */
545d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef xa_uint64_t XAuint64; /* 64 bit unsigned integer */
555d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
565d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint32    XAboolean;
575d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint8     XAchar;
585d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAint16     XAmillibel;
595d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint32    XAmillisecond;
605d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint32    XAmilliHertz;
615d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAint32     XAmillimeter;
625d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAint32     XAmillidegree;
635d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAint16     XApermille;
645d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint32    XAmicrosecond;
655d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint64    XAtime;
665d10a87ea630b22180d3731018a70b77270c726eElliott Hughestypedef XAuint32    XAresult;
675d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
685d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_BOOLEAN_FALSE                    ((XAuint32) 0x00000000)
695d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_BOOLEAN_TRUE                     ((XAuint32) 0x00000001)
705d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
715d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_MILLIBEL_MAX                     ((XAmillibel) 0x7FFF)
725d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_MILLIBEL_MIN                     ((XAmillibel) (-XA_MILLIBEL_MAX-1))
735d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
74cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_MILLIHERTZ_MAX                   ((XAmilliHertz) 0xFFFFFFFF)
75cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes
765d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_MILLIMETER_MAX                   ((XAmillimeter) 0x7FFFFFFF)
77cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes
785d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
795d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
80cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes  /*****************************************************************/
81cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes  /* RESULT CODES                                                  */
82cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes  /*****************************************************************/
835d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
845d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_RESULT_SUCCESS                   ((XAuint32) 0x00000000)
85872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_RESULT_PRECONDITIONS_VIOLATED    ((XAuint32) 0x00000001)
86872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_RESULT_PARAMETER_INVALID         ((XAuint32) 0x00000002)
8768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_MEMORY_FAILURE            ((XAuint32) 0x00000003)
8868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_RESOURCE_ERROR            ((XAuint32) 0x00000004)
895d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_RESULT_RESOURCE_LOST             ((XAuint32) 0x00000005)
9068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_IO_ERROR                  ((XAuint32) 0x00000006)
915d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_RESULT_BUFFER_INSUFFICIENT       ((XAuint32) 0x00000007)
9268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_CONTENT_CORRUPTED         ((XAuint32) 0x00000008)
9368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_CONTENT_UNSUPPORTED       ((XAuint32) 0x00000009)
945d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_RESULT_CONTENT_NOT_FOUND         ((XAuint32) 0x0000000A)
955d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_RESULT_PERMISSION_DENIED         ((XAuint32) 0x0000000B)
9668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_FEATURE_UNSUPPORTED       ((XAuint32) 0x0000000C)
9768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_INTERNAL_ERROR            ((XAuint32) 0x0000000D)
9868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_UNKNOWN_ERROR             ((XAuint32) 0x0000000E)
9968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_OPERATION_ABORTED         ((XAuint32) 0x0000000F)
10068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_RESULT_CONTROL_LOST              ((XAuint32) 0x00000010)
10168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
10268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
10368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
10468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /*****************************************************************/
10568a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /* INTERFACE ID DEFINITION                                       */
10668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /*****************************************************************/
10768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
10868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes/* Interface ID defined as a UUID */
10968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughestypedef const struct XAInterfaceID_ {
11068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint32 time_low;
11168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint16 time_mid;
11268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint16 time_hi_and_version;
11368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint16 clock_seq;
11468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint8  node[6];
11568a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes} * XAInterfaceID;
11668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
11768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes/* NULL Interface */
11868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott HughesXA_API extern const XAInterfaceID XA_IID_NULL;
11968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
12068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
12168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
12268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /*****************************************************************/
12368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes  /* GENERAL INTERFACES, STRUCTS AND DEFINES                       */
124872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes  /*****************************************************************/
12543c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz
126872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/* OBJECT */
12743c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz
12850b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers#define XA_PRIORITY_LOWEST                      ((XAint32) (-0x7FFFFFFF-1))
12943c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz#define XA_PRIORITY_VERYLOW                     ((XAint32) -0x60000000)
13043c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz#define XA_PRIORITY_LOW                         ((XAint32) -0x40000000)
131872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PRIORITY_BELOWNORMAL                 ((XAint32) -0x20000000)
132872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PRIORITY_NORMAL                      ((XAint32) 0x00000000)
133872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PRIORITY_ABOVENORMAL                 ((XAint32) 0x20000000)
134872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PRIORITY_HIGH                        ((XAint32) 0x40000000)
135872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PRIORITY_VERYHIGH                    ((XAint32) 0x60000000)
136f52935278fca8c7aa220543eef4544e3d1105d91Brian Carlstrom#define XA_PRIORITY_HIGHEST                     ((XAint32) 0x7FFFFFFF)
13750b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers
138f52935278fca8c7aa220543eef4544e3d1105d91Brian Carlstrom#define XA_OBJECT_EVENT_RUNTIME_ERROR           ((XAuint32) 0x00000001)
139872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECT_EVENT_ASYNC_TERMINATION       ((XAuint32) 0x00000002)
140872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECT_EVENT_RESOURCES_LOST          ((XAuint32) 0x00000003)
141376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_OBJECT_EVENT_RESOURCES_AVAILABLE     ((XAuint32) 0x00000004)
1427d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_OBJECT_EVENT_ITF_CONTROL_TAKEN       ((XAuint32) 0x00000005)
143872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECT_EVENT_ITF_CONTROL_RETURNED    ((XAuint32) 0x00000006)
144872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECT_EVENT_ITF_PARAMETERS_CHANGED  ((XAuint32) 0x00000007)
145f52935278fca8c7aa220543eef4544e3d1105d91Brian Carlstrom
14660ed7da4d193e0f90b05c4236af77d3b276c0ea4Sebastien Hertz#define XA_OBJECT_STATE_UNREALIZED              ((XAuint32) 0x00000001)
14768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_OBJECT_STATE_REALIZED                ((XAuint32) 0x00000002)
14868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_OBJECT_STATE_SUSPENDED               ((XAuint32) 0x00000003)
14968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
15068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
15168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott HughesXA_API extern const XAInterfaceID XA_IID_OBJECT;
15268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
153f52935278fca8c7aa220543eef4544e3d1105d91Brian Carlstromstruct XAObjectItf_;
15468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughestypedef const struct XAObjectItf_ * const * XAObjectItf;
15568a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes
15668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughestypedef void (XAAPIENTRY * xaObjectCallback) (
15768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAObjectItf caller,
158f52935278fca8c7aa220543eef4544e3d1105d91Brian Carlstrom    const void * pContext,
15968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAuint32 event,
160d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers    XAresult result,
161d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers    XAuint32 param,
162d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers    void * pInterface
163d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers);
164d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers
16568a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughesstruct XAObjectItf_ {
16668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAresult (*Realize) (
16768a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAObjectItf self,
16868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAboolean async
16968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    );
17060ed7da4d193e0f90b05c4236af77d3b276c0ea4Sebastien Hertz    XAresult (*Resume) (
17168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAObjectItf self,
17268a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAboolean async
17368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    );
17468a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAresult (*GetState) (
17568a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAObjectItf self,
17668a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        XAuint32 * pState
17743c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz    );
17868a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes    XAresult (*GetInterface) (
179d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers        XAObjectItf self,
18068a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        const XAInterfaceID iid,
18168a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes        void * pInterface
182872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
183872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*RegisterCallback) (
184376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAObjectItf self,
185376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        xaObjectCallback callback,
186376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        void * pContext
187376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    );
188376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    void (*AbortAsyncOperation) (
189f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes        XAObjectItf self
190872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
191872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    void (*Destroy) (
192376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAObjectItf self
193376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    );
194376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    XAresult (*SetPriority) (
195376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAObjectItf self,
196376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAint32 priority,
197f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes        XAboolean preemptable
198872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
199872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*GetPriority) (
200376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAObjectItf self,
201376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAint32 * pPriority,
2020dfbb7ead0b6da92911b4bc78114ff0f0f9b4129jeffhao        XAboolean * pPreemptable
203c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers    );
20400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    XAresult (*SetLossOfControlInterfaces) (
2057d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz        XAObjectItf self,
206872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAint16 numInterfaces,
207a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes        XAInterfaceID * pInterfaceIDs,
208872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAboolean enabled
2097d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz    );
2100dfbb7ead0b6da92911b4bc78114ff0f0f9b4129jeffhao};
211c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers
212a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes/* CONFIG EXTENSION */
213f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes
214f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott HughesXA_API extern const XAInterfaceID XA_IID_CONFIGEXTENSION;
215a77f0f68a59870ff027dad654fe31eb3fdaf3d5djeffhao
2167d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertzstruct XAConfigExtensionsItf_;
217f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughestypedef const struct XAConfigExtensionsItf_
218872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    * const * XAConfigExtensionsItf;
219c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers
220a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughesstruct XAConfigExtensionsItf_ {
22199660e1c3d6117cfb8bac25b1a0413833ab15b2aSebastien Hertz    XAresult (*SetConfiguration) (
22299660e1c3d6117cfb8bac25b1a0413833ab15b2aSebastien Hertz        XAConfigExtensionsItf self,
22399660e1c3d6117cfb8bac25b1a0413833ab15b2aSebastien Hertz        const XAchar * configKey,
22464f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        XAuint32 valueSize,
22564f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        const void * pConfigValue
22664f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes    );
227872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*GetConfiguration) (
228872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAConfigExtensionsItf self,
229872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAchar * configKey,
230872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 * pValueSize,
231872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        void * pConfigValue
232872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
233872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes};
234872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
235376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes/* DYNAMIC INTERFACE MANAGEMENT */
23681d425b0b232962441616f8b14f73620bffef5e5Ian Rogers
23781d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_DYNAMIC_ITF_EVENT_RUNTIME_ERROR              ((XAuint32) 0x00000001)
238700a402244a1a423da4f3ba8032459f4b65fa18fIan Rogers#define XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION          ((XAuint32) 0x00000002)
239376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST             ((XAuint32) 0x00000003)
240bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((XAuint32) 0x00000004)
241bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz#define XA_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE        ((XAuint32) 0x00000005)
242bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz
243872d4ec7225444d9400d30f9027247deb91012fdElliott HughesXA_API extern const XAInterfaceID XA_IID_DYNAMICINTERFACEMANAGEMENT;
244bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz
245bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertzstruct XADynamicInterfaceManagementItf_;
246bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertztypedef const struct XADynamicInterfaceManagementItf_
247872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    * const * XADynamicInterfaceManagementItf;
248bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz
249bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertztypedef void (XAAPIENTRY * xaDynamicInterfaceManagementCallback) (
250872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XADynamicInterfaceManagementItf caller,
251872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    void * pContext,
252bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz    XAuint32 event,
253add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    XAresult result,
254add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    const XAInterfaceID iid
255add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao);
256add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao
25750b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogersstruct XADynamicInterfaceManagementItf_ {
258bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz    XAresult (*AddInterface) (
259add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        XADynamicInterfaceManagementItf self,
260add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        const XAInterfaceID iid,
261add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        XAboolean aysnc
262add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    );
263bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz    XAresult (*RemoveInterface) (
264bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz        XADynamicInterfaceManagementItf self,
265add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        const XAInterfaceID iid
266add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    );
267add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    XAresult (*ResumeInterface) (
268add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        XADynamicInterfaceManagementItf self,
269bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz        const XAInterfaceID iid,
270c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers        XAboolean aysnc
271add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    );
272bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz    XAresult (*RegisterCallback) (
273872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADynamicInterfaceManagementItf self,
274bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz        xaDynamicInterfaceManagementCallback callback,
275add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao        void * pContext
276add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    );
277add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao};
278add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao
279add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao/* DATA SOURCES/SINKS */
280add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao
281add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATAFORMAT_MIME              ((XAuint32) 0x00000001)
282add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATAFORMAT_PCM               ((XAuint32) 0x00000002)
283add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATAFORMAT_RAWIMAGE          ((XAuint32) 0x00000003)
284add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao
285add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATALOCATOR_URI              ((XAuint32) 0x00000001)
286c6345efb56f9096c4b1a1a90e1d8d847fc01d910Sebastien Hertz#define XA_DATALOCATOR_ADDRESS          ((XAuint32) 0x00000002)
287c6345efb56f9096c4b1a1a90e1d8d847fc01d910Sebastien Hertz#define XA_DATALOCATOR_IODEVICE         ((XAuint32) 0x00000003)
288c6345efb56f9096c4b1a1a90e1d8d847fc01d910Sebastien Hertz#define XA_DATALOCATOR_OUTPUTMIX        ((XAuint32) 0x00000004)
289add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATALOCATOR_NATIVEDISPLAY    ((XAuint32) 0x00000005)
290add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATALOCATOR_RESERVED6        ((XAuint32) 0x00000006)
291add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao#define XA_DATALOCATOR_RESERVED7        ((XAuint32) 0x00000007)
2927d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz
293872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataSink_ {
294add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    void * pLocator;
295add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    void * pFormat;
296add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao} XADataSink;
297add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao
298add037df2399821eb048a5d9146a9d2174bcd1bdJeff Haotypedef struct XADataSource_ {
299add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    void * pLocator;
300add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao    void * pFormat;
301add037df2399821eb048a5d9146a9d2174bcd1bdJeff Hao} XADataSource;
302872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
303872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_UNSPECIFIED    ((XAuint32) 0x00000001)
304761928d24e4e7ed7776b52243eaf9095ad35f448Elliott Hughes#define XA_CONTAINERTYPE_RAW            ((XAuint32) 0x00000002)
305872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_ASF            ((XAuint32) 0x00000003)
306872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_AVI            ((XAuint32) 0x00000004)
307872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_BMP            ((XAuint32) 0x00000005)
308872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_JPG            ((XAuint32) 0x00000006)
309872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_JPG2000        ((XAuint32) 0x00000007)
310872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_M4A            ((XAuint32) 0x00000008)
311872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_MP3            ((XAuint32) 0x00000009)
312872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_MP4            ((XAuint32) 0x0000000A)
313872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_MPEG_ES        ((XAuint32) 0x0000000B)
314376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_CONTAINERTYPE_MPEG_PS        ((XAuint32) 0x0000000C)
315872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_MPEG_TS        ((XAuint32) 0x0000000D)
316872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_QT             ((XAuint32) 0x0000000E)
317761928d24e4e7ed7776b52243eaf9095ad35f448Elliott Hughes#define XA_CONTAINERTYPE_WAV            ((XAuint32) 0x0000000F)
318f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes#define XA_CONTAINERTYPE_XMF_0          ((XAuint32) 0x00000010)
31950b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers#define XA_CONTAINERTYPE_XMF_1          ((XAuint32) 0x00000011)
3207d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_CONTAINERTYPE_XMF_2          ((XAuint32) 0x00000012)
321f8349361a16a4e2796efe9f3586b994e8d4834e4Elliott Hughes#define XA_CONTAINERTYPE_XMF_3          ((XAuint32) 0x00000013)
322872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_XMF_GENERIC    ((XAuint32) 0x00000014)
3237ec2f1ca3cbd021848da75d5566f7239ce29676fSebastien Hertz#define XA_CONTAINERTYPE_AMR            ((XAuint32) 0x00000015)
3247ec2f1ca3cbd021848da75d5566f7239ce29676fSebastien Hertz#define XA_CONTAINERTYPE_AAC            ((XAuint32) 0x00000016)
325872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_3GPP           ((XAuint32) 0x00000017)
326872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_3GA            ((XAuint32) 0x00000018)
327872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_RM             ((XAuint32) 0x00000019)
328872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_DMF            ((XAuint32) 0x0000001A)
329a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes#define XA_CONTAINERTYPE_SMF            ((XAuint32) 0x0000001B)
3303d30d9b09c16542d41554aad9f46ec9109ba5cb5Elliott Hughes#define XA_CONTAINERTYPE_MOBILE_DLS     ((XAuint32) 0x0000001C)
331872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_CONTAINERTYPE_OGG            ((XAuint32) 0x0000001D)
332872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
333872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataFormat_MIME_ {
334872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 formatType;
335872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAchar * mimeType;
336872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 containerType;
337872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataFormat_MIME;
338376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes
3397d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_BYTEORDER_BIGENDIAN          ((XAuint32) 0x00000001)
340872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_BYTEORDER_LITTLEENDIAN       ((XAuint32) 0x00000002)
341872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
342872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_8               ((XAuint32)   8000000)
3430cc1bbd9247151289db88ccea89c842953323a6aElliott Hughes#define XA_SAMPLINGRATE_11_025          ((XAuint32)  11025000)
3445d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_SAMPLINGRATE_12              ((XAuint32)  12000000)
345872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_16              ((XAuint32)  16000000)
346376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SAMPLINGRATE_22_05           ((XAuint32)  22050000)
347376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SAMPLINGRATE_24              ((XAuint32)  24000000)
348376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SAMPLINGRATE_32              ((XAuint32)  32000000)
349475fc23a4a7f35d1be87ea0b06c80df317a720acElliott Hughes#define XA_SAMPLINGRATE_44_1            ((XAuint32)  44100000)
350872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_48              ((XAuint32)  48000000)
351872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_64              ((XAuint32)  64000000)
352872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_88_2            ((XAuint32)  88200000)
353872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SAMPLINGRATE_96              ((XAuint32)  96000000)
3540cc1bbd9247151289db88ccea89c842953323a6aElliott Hughes#define XA_SAMPLINGRATE_192             ((XAuint32) 192000000)
3555d10a87ea630b22180d3731018a70b77270c726eElliott Hughes
3567d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_SPEAKER_FRONT_LEFT               ((XAuint32) 0x00000001)
357872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_FRONT_RIGHT              ((XAuint32) 0x00000002)
3587d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_SPEAKER_FRONT_CENTER             ((XAuint32) 0x00000004)
359872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_LOW_FREQUENCY            ((XAuint32) 0x00000008)
360376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SPEAKER_BACK_LEFT                ((XAuint32) 0x00000010)
361872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_BACK_RIGHT               ((XAuint32) 0x00000020)
362872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_FRONT_LEFT_OF_CENTER     ((XAuint32) 0x00000040)
363872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_FRONT_RIGHT_OF_CENTER    ((XAuint32) 0x00000080)
364872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_BACK_CENTER              ((XAuint32) 0x00000100)
365872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_SIDE_LEFT                ((XAuint32) 0x00000200)
366376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SPEAKER_SIDE_RIGHT               ((XAuint32) 0x00000400)
367376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_SPEAKER_TOP_CENTER               ((XAuint32) 0x00000800)
368872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_TOP_FRONT_LEFT           ((XAuint32) 0x00001000)
369872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_SPEAKER_TOP_FRONT_CENTER         ((XAuint32) 0x00002000)
370cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_SPEAKER_TOP_FRONT_RIGHT          ((XAuint32) 0x00004000)
371cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_SPEAKER_TOP_BACK_LEFT            ((XAuint32) 0x00008000)
372cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_SPEAKER_TOP_BACK_CENTER          ((XAuint32) 0x00010000)
3735d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_SPEAKER_TOP_BACK_RIGHT           ((XAuint32) 0x00020000)
374cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes
375cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_PCMSAMPLEFORMAT_FIXED_8          ((XAuint16) 0x0008)
376c0542af3e2170143ba40d89136e284997e16bf64Ian Rogers#define XA_PCMSAMPLEFORMAT_FIXED_16         ((XAuint16) 0x0010)
37743c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz#define XA_PCMSAMPLEFORMAT_FIXED_20         ((XAuint16) 0x0014)
378400a3a9d332ee17e69b876cbbfb47d9e576fc4f2Sebastien Hertz#define XA_PCMSAMPLEFORMAT_FIXED_24         ((XAuint16) 0x0018)
379400a3a9d332ee17e69b876cbbfb47d9e576fc4f2Sebastien Hertz#define XA_PCMSAMPLEFORMAT_FIXED_28         ((XAuint16) 0x001C)
380400a3a9d332ee17e69b876cbbfb47d9e576fc4f2Sebastien Hertz#define XA_PCMSAMPLEFORMAT_FIXED_32         ((XAuint16) 0x0020)
381400a3a9d332ee17e69b876cbbfb47d9e576fc4f2Sebastien Hertz
382400a3a9d332ee17e69b876cbbfb47d9e576fc4f2Sebastien Hertztypedef struct XADataFormat_PCM_ {
38399660e1c3d6117cfb8bac25b1a0413833ab15b2aSebastien Hertz    XAuint32 formatType;
38499660e1c3d6117cfb8bac25b1a0413833ab15b2aSebastien Hertz    XAuint32 numChannels;
38543c8d729556844d1a74449a8a300c795d6a5406aSebastien Hertz    XAuint32 samplesPerSec;
386cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes    XAuint32 bitsPerSample;
387cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes    XAuint32 containerSize;
388cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes    XAuint32 channelMask;
389cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes    XAuint32 endianness;
390cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes} XADataFormat_PCM;
391cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes
392cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_COLORFORMAT_UNUSED                   ((XAuint32) 0x00000000)
393cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_COLORFORMAT_MONOCHROME               ((XAuint32) 0x00000001)
394cb69306eefc1e6e42b3eaec8b479a268222b01b6Elliott Hughes#define XA_COLORFORMAT_8BITRGB332               ((XAuint32) 0x00000002)
395872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_12BITRGB444              ((XAuint32) 0x00000003)
396872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_16BITARGB4444            ((XAuint32) 0x00000004)
397872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_16BITARGB1555            ((XAuint32) 0x00000005)
398872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_16BITRGB565              ((XAuint32) 0x00000006)
399376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_16BITBGR565              ((XAuint32) 0x00000007)
400872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_18BITRGB666              ((XAuint32) 0x00000008)
4017d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_COLORFORMAT_18BITARGB1665            ((XAuint32) 0x00000009)
402872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_19BITARGB1666            ((XAuint32) 0x0000000A)
403376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_24BITRGB888              ((XAuint32) 0x0000000B)
4047d95565c84d91ae5dcec4b89728ada208633de0cSebastien Hertz#define XA_COLORFORMAT_24BITBGR888              ((XAuint32) 0x0000000C)
405376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_24BITARGB1887            ((XAuint32) 0x0000000D)
406376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_25BITARGB1888            ((XAuint32) 0x0000000E)
407376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_32BITBGRA8888            ((XAuint32) 0x0000000F)
408872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_32BITARGB8888            ((XAuint32) 0x00000010)
409664bebf92eb2151b9b570ccd42ac4b6056c3ea9cMathieu Chartier#define XA_COLORFORMAT_YUV411PLANAR             ((XAuint32) 0x00000011)
410664bebf92eb2151b9b570ccd42ac4b6056c3ea9cMathieu Chartier#define XA_COLORFORMAT_YUV420PLANAR             ((XAuint32) 0x00000013)
411872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_YUV420SEMIPLANAR         ((XAuint32) 0x00000015)
4124dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4Elliott Hughes#define XA_COLORFORMAT_YUV422PLANAR             ((XAuint32) 0x00000016)
413872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_YUV422SEMIPLANAR         ((XAuint32) 0x00000018)
414872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_YCBYCR                   ((XAuint32) 0x00000019)
415376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_YCRYCB                   ((XAuint32) 0x0000001A)
416872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_CBYCRY                   ((XAuint32) 0x0000001B)
417872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_CRYCBY                   ((XAuint32) 0x0000001C)
418475fc23a4a7f35d1be87ea0b06c80df317a720acElliott Hughes#define XA_COLORFORMAT_YUV444INTERLEAVED        ((XAuint32) 0x0000001D)
419376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes#define XA_COLORFORMAT_RAWBAYER8BIT             ((XAuint32) 0x0000001E)
420872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_RAWBAYER10BIT            ((XAuint32) 0x0000001F)
42181d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_COLORFORMAT_RAWBAYER8BITCOMPRESSED   ((XAuint32) 0x00000020)
42281d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_COLORFORMAT_L2                       ((XAuint32) 0x00000021)
42381d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_COLORFORMAT_L4                       ((XAuint32) 0x00000022)
424c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers#define XA_COLORFORMAT_L8                       ((XAuint32) 0x00000023)
42581d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_COLORFORMAT_L16                      ((XAuint32) 0x00000024)
426872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_COLORFORMAT_L24                      ((XAuint32) 0x00000025)
42700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers#define XA_COLORFORMAT_L32                      ((XAuint32) 0x00000026)
42850b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers#define XA_COLORFORMAT_18BITBGR666              ((XAuint32) 0x00000029)
42962d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers#define XA_COLORFORMAT_24BITARGB6666            ((XAuint32) 0x0000002A)
43050b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers#define XA_COLORFORMAT_24BITABGR6666            ((XAuint32) 0x0000002B)
431872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
432872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataFormat_RawImage_ {
433872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 formatType;
434872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 colorFormat;
435872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 height;
436872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 width;
437872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 stride;
438872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataFormat_RawImage;
439872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
440376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughestypedef struct XADataLocator_Address_ {
441376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    XAuint32 locatorType;
442872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    void * pAddress;
443872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 length;
444872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataLocator_Address;
445872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
4465d10a87ea630b22180d3731018a70b77270c726eElliott Hughes#define XA_IODEVICE_AUDIOINPUT          ((XAuint32) 0x00000001)
447872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_IODEVICE_LEDARRAY            ((XAuint32) 0x00000002)
448872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_IODEVICE_VIBRA               ((XAuint32) 0x00000003)
449872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_IODEVICE_CAMERA              ((XAuint32) 0x00000004)
450872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_IODEVICE_RADIO               ((XAuint32) 0x00000005)
451872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
452872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataLocator_IODevice_ {
453872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 locatorType;
454872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 deviceType;
455872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 deviceID;
4565d10a87ea630b22180d3731018a70b77270c726eElliott Hughes    XAObjectItf device;
457872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataLocator_IODevice;
45850b35e2fd1a68cd1240e4a9d9f363e11764957d1Ian Rogers
459c6345efb56f9096c4b1a1a90e1d8d847fc01d910Sebastien Hertztypedef void * XANativeHandle;
460c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers
461872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataLocator_NativeDisplay_{
462872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 locatorType;
463872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XANativeHandle hWindow;
464872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XANativeHandle hDisplay;
465872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataLocator_NativeDisplay;
466872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
467872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XADataLocator_OutputMix {
468872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 locatorType;
469376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    XAObjectItf outputMix;
4708696433d1b3d8ba15288483b777edd888de69135Elliott Hughes} XADataLocator_OutputMix;
471bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertz
472bb5c355df9d93d103f1a008fba485d03c56465b5Sebastien Hertztypedef struct XADataLocator_URI_ {
473872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 locatorType;
4745d10a87ea630b22180d3731018a70b77270c726eElliott Hughes    XAchar * URI;
475872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XADataLocator_URI;
476872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
477872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
478872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes/* ENGINE */
47964f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes
48064f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes#define XA_DEFAULTDEVICEID_AUDIOINPUT   ((XAuint32) 0xFFFFFFFF)
48164f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes#define XA_DEFAULTDEVICEID_AUDIOOUTPUT  ((XAuint32) 0xFFFFFFFE)
48264f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes#define XA_DEFAULTDEVICEID_LED          ((XAuint32) 0xFFFFFFFD)
48368a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_DEFAULTDEVICEID_VIBRA        ((XAuint32) 0xFFFFFFFC)
484872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_DEFAULTDEVICEID_CAMERA       ((XAuint32) 0xFFFFFFFB)
485872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
486872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_ENGINEOPTION_THREADSAFE      ((XAuint32) 0x00000001)
487872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_ENGINEOPTION_LOSSOFCONTROL   ((XAuint32) 0x00000002)
48800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers
48900f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers#define XA_OBJECTID_ENGINE              ((XAuint32) 0x00000001)
49000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers#define XA_OBJECTID_LEDDEVICE           ((XAuint32) 0x00000002)
49100f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers#define XA_OBJECTID_VIBRADEVICE         ((XAuint32) 0x00000003)
492872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECTID_MEDIAPLAYER         ((XAuint32) 0x00000004)
493872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECTID_MEDIARECORDER       ((XAuint32) 0x00000005)
49481d425b0b232962441616f8b14f73620bffef5e5Ian Rogers#define XA_OBJECTID_RADIODEVICE         ((XAuint32) 0x00000006)
495c604d731730b43231f63040c8db1d58304da0cf3Ian Rogers#define XA_OBJECTID_OUTPUTMIX           ((XAuint32) 0x00000007)
496872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECTID_METADATAEXTRACTOR   ((XAuint32) 0x00000008)
497872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_OBJECTID_CAMERADEVICE        ((XAuint32) 0x00000009)
498872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
49968a5e3c9115f9ba396563ce3b72df9cb036bc665Elliott Hughes#define XA_PROFILES_MEDIA_PLAYER            ((XAint16) 0x0001)
500872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes#define XA_PROFILES_MEDIA_PLAYER_RECORDER   ((XAint16) 0x0002)
501a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes#define XA_PROFILES_PLUS_MIDI               ((XAint16) 0x0004)
502a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes
503872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XAEngineOption_ {
504872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 feature;
50500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    XAuint32 data;
506872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes} XAEngineOption;
50700f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers
508872d4ec7225444d9400d30f9027247deb91012fdElliott HughesXA_API XAresult XAAPIENTRY xaCreateEngine(
509872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAObjectItf * pEngine,
51000f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    XAuint32 numOptions,
51100f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    const XAEngineOption * pEngineOptions,
5120f827169742aad6209d830db773a101849c32a83Elliott Hughes    XAuint32 numInterfaces,
5130f827169742aad6209d830db773a101849c32a83Elliott Hughes    const XAInterfaceID * pInterfaceIds,
51400f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    const XAboolean * pInterfaceRequired
51500f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers);
51662d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers
51762d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian RogersXA_API XAresult XAAPIENTRY xaQueryNumSupportedEngineInterfaces(
518872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 * pNumSupportedInterfaces
519872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes);
520872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
521872d4ec7225444d9400d30f9027247deb91012fdElliott HughesXA_API XAresult XAAPIENTRY xaQuerySupportedEngineInterfaces(
522872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint32 index,
523376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes    XAInterfaceID * pInterfaceId
524376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes);
525872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
526872d4ec7225444d9400d30f9027247deb91012fdElliott Hughestypedef struct XALEDDescriptor_ {
527872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAuint8 ledCount;
52800f7d0eaa6bd93d33bf0c1429bf4ba0b3f28abacIan Rogers    XAuint8 primaryLED;
52981d425b0b232962441616f8b14f73620bffef5e5Ian Rogers    XAuint32 colorMask;
53081d425b0b232962441616f8b14f73620bffef5e5Ian Rogers} XALEDDescriptor;
531872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes
5324dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4Elliott Hughestypedef struct XAVibraDescriptor_ {
5336ba581a6711c4fed24828c9a294b1b49ac6bbb30Elliott Hughes    XAboolean supportsFrequency;
534872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAboolean supportsIntensity;
535872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAmilliHertz minFrequency;
536a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes    XAmilliHertz maxFrequency;
537a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes} XAVibraDescriptor;
538a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes
539a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes
540a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott HughesXA_API extern const XAInterfaceID XA_IID_ENGINE;
541a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughes
542a21039c3ae2b20e44ceb2735251c04d0aac89afdElliott Hughesstruct XAEngineItf_;
543475fc23a4a7f35d1be87ea0b06c80df317a720acElliott Hughestypedef const struct XAEngineItf_ * const * XAEngineItf;
544475fc23a4a7f35d1be87ea0b06c80df317a720acElliott Hughes
545872d4ec7225444d9400d30f9027247deb91012fdElliott Hughesstruct XAEngineItf_ {
546872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*CreateCameraDevice) (
547872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAEngineItf self,
548872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pDevice,
549872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 deviceID,
550872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 numInterfaces,
551872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAInterfaceID * pInterfaceIds,
552872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAboolean * pInterfaceRequired
553872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
554872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*CreateRadioDevice) (
555872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAEngineItf self,
556872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pDevice,
557872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 numInterfaces,
558872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAInterfaceID * pInterfaceIds,
559872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAboolean * pInterfaceRequired
560872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
561872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*CreateLEDDevice) (
562872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAEngineItf self,
563872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pDevice,
564872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 deviceID,
565872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 numInterfaces,
566872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAInterfaceID * pInterfaceIds,
567872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAboolean * pInterfaceRequired
568872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
569872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes       XAresult (*CreateVibraDevice) (
570872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAEngineItf self,
571872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pDevice,
572872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 deviceID,
573376a7a033d29d5f2b6e16574a340c999ff2999a0Elliott Hughes        XAuint32 numInterfaces,
574c0f0933249cf516b37717faa766e1e9808f7c1f8Elliott Hughes        const XAInterfaceID * pInterfaceIds,
5754d466a8e4587422c989705dce3b2a19e7f0137f5Brian Carlstrom        const XAboolean * pInterfaceRequired
576872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    );
577872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*CreateMediaPlayer) (
578872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAEngineItf self,
57937f3c968ecd04e77802fe17bb82dabc07de21ca1Ian Rogers        XAObjectItf * pPlayer,
580872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSource * pDataSrc,
581872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSource * pBankSrc,
582872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSink * pAudioSnk,
5834dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4Elliott Hughes        XADataSink * pImageVideoSnk,
584872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSink * pVibra,
585872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSink * pLEDArray,
586872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 numInterfaces,
587872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        const XAInterfaceID * pInterfaceIds,
5887162ad937f5f6bec32bf78d4675ff65cd6d1a233Elliott Hughes        const XAboolean * pInterfaceRequired
589c3b3e75e2ec66b16214fcd56dd08c0d9f6b1a591Elliott Hughes    );
590872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes    XAresult (*CreateMediaRecorder) (
5914dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4Elliott Hughes        XAEngineItf self,
592872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pRecorder,
593872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSource * pAudioSrc,
594872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XADataSource * pImageVideoSrc,
59564f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        XADataSink * pDataSnk,
59664f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        XAuint32 numInterfaces,
59764f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        const XAInterfaceID * pInterfaceIds,
59864f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes        const XAboolean * pInterfaceRequired
59964f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes    );
60064f574f474aa77c72778640ab21f8cfa72546812Elliott Hughes    XAresult (*CreateOutputMix) (
60103181a828cd493545b278e0aa4f150fdaf1e3325Elliott Hughes        XAEngineItf self,
602d07986fad0d08cdf05505cf9230714a2cf0dd9aeElliott Hughes        XAObjectItf * pMix,
603a96836a4115ad08762567c10bd4d198c5b644985Elliott Hughes        XAuint32 numInterfaces,
604d9e4e0c8606f8b87e0a48aab68125dbee543bf88Ian Rogers        const XAInterfaceID * pInterfaceIds,
60503181a828cd493545b278e0aa4f150fdaf1e3325Elliott Hughes        const XAboolean * pInterfaceRequired
60603181a828cd493545b278e0aa4f150fdaf1e3325Elliott Hughes    );
60703181a828cd493545b278e0aa4f150fdaf1e3325Elliott Hughes    XAresult (*CreateMetadataExtractor) (
6082aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes        XAEngineItf self,
609748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes        XAObjectItf * pMetadataExtractor,
610748474146da0c6484fa3dca0a700f612d47550c3Elliott Hughes        XADataSource * pDataSource,
6112aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes        XAuint32 numInterfaces,
6122aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes        const XAInterfaceID * pInterfaceIds,
6132aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes        const XAboolean * pInterfaceRequired
6142aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes    );
6152aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes    XAresult (*CreateExtensionObject) (
6162aa2e39548e194c5514d6534149ca1078021eab1Elliott Hughes        XAEngineItf self,
617872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAObjectItf * pObject,
618872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        void * pParameters,
619872d4ec7225444d9400d30f9027247deb91012fdElliott Hughes        XAuint32 objectID,
620        XAuint32 numInterfaces,
621        const XAInterfaceID * pInterfaceIds,
622        const XAboolean * pInterfaceRequired
623    );
624    XAresult (*GetImplementationInfo) (
625        XAEngineItf self,
626        XAuint32 * pMajor,
627        XAuint32 * pMinor,
628        XAuint32 * pStep,
629        const XAchar * pImplementationText
630    );
631    XAresult (*QuerySupportedProfiles) (
632        XAEngineItf self,
633        XAint16 * pProfilesSupported
634    );
635    XAresult (*QueryNumSupportedInterfaces) (
636        XAEngineItf self,
637        XAuint32 objectID,
638        XAuint32 * pNumSupportedInterfaces
639    );
640    XAresult (*QuerySupportedInterfaces) (
641        XAEngineItf self,
642        XAuint32 objectID,
643        XAuint32 index,
644        XAInterfaceID * pInterfaceId
645    );
646    XAresult (*QueryNumSupportedExtensions) (
647        XAEngineItf self,
648        XAuint32 * pNumExtensions
649    );
650    XAresult (*QuerySupportedExtension) (
651        XAEngineItf self,
652        XAuint32 index,
653        XAchar * pExtensionName,
654        XAint16 * pNameLength
655    );
656    XAresult (*IsExtensionSupported) (
657        XAEngineItf self,
658        const XAchar * pExtensionName,
659        XAboolean * pSupported
660    );
661    XAresult (*QueryLEDCapabilities) (
662        XAEngineItf self,
663        XAuint32 *pIndex,
664        XAuint32 * pLEDDeviceID,
665        XALEDDescriptor * pDescriptor
666    );
667    XAresult (*QueryVibraCapabilities) (
668        XAEngineItf self,
669        XAuint32 *pIndex,
670        XAuint32 * pVibraDeviceID,
671        XAVibraDescriptor * pDescriptor
672    );
673};
674
675/* THREAD SYNC */
676
677XA_API extern const XAInterfaceID XA_IID_THREADSYNC;
678
679struct XAThreadSyncItf_;
680typedef const struct XAThreadSyncItf_ * const * XAThreadSyncItf;
681
682struct XAThreadSyncItf_ {
683    XAresult (*EnterCriticalSection) (
684        XAThreadSyncItf self
685    );
686    XAresult (*ExitCriticalSection) (
687        XAThreadSyncItf self
688    );
689};
690
691
692
693  /*****************************************************************/
694  /* PLAYBACK RELATED INTERFACES, STRUCTS AND DEFINES              */
695  /*****************************************************************/
696
697/* PLAY */
698
699#define XA_TIME_UNKNOWN                     ((XAuint32) 0xFFFFFFFF)
700
701#define XA_PLAYEVENT_HEADATEND              ((XAuint32) 0x00000001)
702#define XA_PLAYEVENT_HEADATMARKER           ((XAuint32) 0x00000002)
703#define XA_PLAYEVENT_HEADATNEWPOS           ((XAuint32) 0x00000004)
704#define XA_PLAYEVENT_HEADMOVING             ((XAuint32) 0x00000008)
705#define XA_PLAYEVENT_HEADSTALLED            ((XAuint32) 0x00000010)
706
707#define XA_PLAYSTATE_STOPPED                ((XAuint32) 0x00000001)
708#define XA_PLAYSTATE_PAUSED                 ((XAuint32) 0x00000002)
709#define XA_PLAYSTATE_PLAYING                ((XAuint32) 0x00000003)
710
711#define XA_PREFETCHEVENT_STATUSCHANGE       ((XAuint32) 0x00000001)
712#define XA_PREFETCHEVENT_FILLLEVELCHANGE    ((XAuint32) 0x00000002)
713
714#define XA_PREFETCHSTATUS_UNDERFLOW         ((XAuint32) 0x00000001)
715#define XA_PREFETCHSTATUS_SUFFICIENTDATA    ((XAuint32) 0x00000002)
716#define XA_PREFETCHSTATUS_OVERFLOW          ((XAuint32) 0x00000003)
717
718#define XA_SEEKMODE_FAST                    ((XAuint32) 0x0001)
719#define XA_SEEKMODE_ACCURATE                ((XAuint32) 0x0002)
720
721XA_API extern const XAInterfaceID XA_IID_PLAY;
722
723struct XAPlayItf_;
724typedef const struct XAPlayItf_ * const * XAPlayItf;
725
726typedef void (XAAPIENTRY * xaPlayCallback) (
727    XAPlayItf caller,
728    void * pContext,
729    XAuint32 event
730);
731
732struct XAPlayItf_ {
733    XAresult (*SetPlayState) (
734        XAPlayItf self,
735        XAuint32 state
736    );
737    XAresult (*GetPlayState) (
738        XAPlayItf self,
739        XAuint32 * pState
740    );
741    XAresult (*GetDuration) (
742        XAPlayItf self,
743        XAmillisecond * pMsec
744    );
745    XAresult (*GetPosition) (
746        XAPlayItf self,
747        XAmillisecond * pMsec
748    );
749    XAresult (*RegisterCallback) (
750        XAPlayItf self,
751        xaPlayCallback callback,
752        void * pContext
753    );
754    XAresult (*SetCallbackEventsMask) (
755        XAPlayItf self,
756        XAuint32 eventFlags
757    );
758    XAresult (*GetCallbackEventsMask) (
759        XAPlayItf self,
760        XAuint32 * pEventFlags
761    );
762    XAresult (*SetMarkerPosition) (
763        XAPlayItf self,
764        XAmillisecond mSec
765    );
766    XAresult (*ClearMarkerPosition) (
767        XAPlayItf self
768    );
769    XAresult (*GetMarkerPosition) (
770        XAPlayItf self,
771        XAmillisecond * pMsec
772    );
773    XAresult (*SetPositionUpdatePeriod) (
774        XAPlayItf self,
775        XAmillisecond mSec
776    );
777    XAresult (*GetPositionUpdatePeriod) (
778        XAPlayItf self,
779        XAmillisecond * pMsec
780    );
781};
782
783/* PLAYBACK RATE */
784
785#define XA_RATEPROP_STAGGEREDVIDEO      ((XAuint32) 0x00000001)
786#define XA_RATEPROP_SMOOTHVIDEO         ((XAuint32) 0x00000002)
787#define XA_RATEPROP_SILENTAUDIO         ((XAuint32) 0x00000100)
788#define XA_RATEPROP_STAGGEREDAUDIO      ((XAuint32) 0x00000200)
789#define XA_RATEPROP_NOPITCHCORAUDIO     ((XAuint32) 0x00000400)
790#define XA_RATEPROP_PITCHCORAUDIO       ((XAuint32) 0x00000800)
791
792XA_API extern const XAInterfaceID XA_IID_PLAYBACKRATE;
793
794struct XAPlaybackRateItf_;
795typedef const struct XAPlaybackRateItf_ * const * XAPlaybackRateItf;
796
797struct XAPlaybackRateItf_ {
798    XAresult (*SetRate) (
799        XAPlaybackRateItf self,
800        XApermille rate
801    );
802    XAresult (*GetRate) (
803        XAPlaybackRateItf self,
804        XApermille * pRate
805    );
806    XAresult (*SetPropertyConstraints) (
807        XAPlaybackRateItf self,
808        XAuint32 constraints
809    );
810    XAresult (*GetProperties) (
811        XAPlaybackRateItf self,
812        XAuint32 * pProperties
813    );
814    XAresult (*GetCapabilitiesOfRate) (
815        XAPlaybackRateItf self,
816        XApermille rate,
817        XAuint32 * pCapabilities
818    );
819    XAresult (*GetRateRange) (
820        XAPlaybackRateItf self,
821        XAuint8 index,
822        XApermille * pMinRate,
823        XApermille * pMaxRate,
824        XApermille * pStepSize,
825        XAuint32 * pCapabilities
826    );
827};
828
829/* PREFETCH STATUS */
830
831XA_API extern const XAInterfaceID XA_IID_PREFETCHSTATUS;
832
833struct XAPrefetchStatusItf_;
834typedef const struct XAPrefetchStatusItf_
835    * const * XAPrefetchStatusItf;
836
837typedef void (XAAPIENTRY * xaPrefetchCallback) (
838    XAPrefetchStatusItf caller,
839    void * pContext,
840    XAuint32 event
841);
842
843struct XAPrefetchStatusItf_ {
844    XAresult (*GetPrefetchStatus) (
845        XAPrefetchStatusItf self,
846        XAuint32 * pStatus
847    );
848    XAresult (*GetFillLevel) (
849        XAPrefetchStatusItf self,
850        XApermille * pLevel
851    );
852    XAresult (*RegisterCallback) (
853        XAPrefetchStatusItf self,
854        xaPrefetchCallback callback,
855        void * pContext
856    );
857    XAresult (*SetCallbackEventsMask) (
858        XAPrefetchStatusItf self,
859        XAuint32 eventFlags
860    );
861    XAresult (*GetCallbackEventsMask) (
862        XAPrefetchStatusItf self,
863        XAuint32 * pEventFlags
864    );
865    XAresult (*SetFillUpdatePeriod) (
866        XAPrefetchStatusItf self,
867        XApermille period
868    );
869    XAresult (*GetFillUpdatePeriod) (
870        XAPrefetchStatusItf self,
871        XApermille * pPeriod
872    );
873};
874
875/* SEEK */
876
877XA_API extern const XAInterfaceID XA_IID_SEEK;
878
879struct XASeekItf_;
880typedef const struct XASeekItf_ * const * XASeekItf;
881
882struct XASeekItf_ {
883    XAresult (*SetPosition) (
884        XASeekItf self,
885        XAmillisecond pos,
886        XAuint32 seekMode
887    );
888    XAresult (*SetLoop) (
889        XASeekItf self,
890        XAboolean loopEnable,
891        XAmillisecond startPos,
892        XAmillisecond endPos
893    );
894    XAresult (*GetLoop) (
895        XASeekItf self,
896        XAboolean * pLoopEnabled,
897        XAmillisecond * pStartPos,
898        XAmillisecond * pEndPos
899    );
900};
901
902/* VOLUME */
903
904XA_API extern const XAInterfaceID XA_IID_VOLUME;
905
906struct XAVolumeItf_;
907typedef const struct XAVolumeItf_ * const * XAVolumeItf;
908
909struct XAVolumeItf_ {
910    XAresult (*SetVolumeLevel) (
911        XAVolumeItf self,
912        XAmillibel level
913    );
914    XAresult (*GetVolumeLevel) (
915        XAVolumeItf self,
916        XAmillibel * pLevel
917    );
918    XAresult (*GetMaxVolumeLevel) (
919        XAVolumeItf self,
920        XAmillibel * pMaxLevel
921    );
922    XAresult (*SetMute) (
923        XAVolumeItf self,
924        XAboolean mute
925    );
926    XAresult (*GetMute) (
927        XAVolumeItf self,
928        XAboolean * pMute
929    );
930    XAresult (*EnableStereoPosition) (
931        XAVolumeItf self,
932        XAboolean enable
933    );
934    XAresult (*IsEnabledStereoPosition) (
935        XAVolumeItf self,
936        XAboolean * pEnable
937    );
938    XAresult (*SetStereoPosition) (
939        XAVolumeItf self,
940        XApermille stereoPosition
941    );
942    XAresult (*GetStereoPosition) (
943        XAVolumeItf self,
944        XApermille * pStereoPosition
945    );
946};
947
948/* IMAGE CONTROL */
949
950XA_API extern const XAInterfaceID XA_IID_IMAGECONTROLS;
951
952struct XAImageControlsItf_;
953typedef const struct XAImageControlsItf_ * const * XAImageControlsItf;
954
955struct XAImageControlsItf_ {
956    XAresult (*SetBrightness) (
957        XAImageControlsItf self,
958        XAuint32 brightness
959    );
960    XAresult (*GetBrightness) (
961        XAImageControlsItf self,
962        XAuint32 * pBrightness
963    );
964    XAresult (*SetContrast) (
965        XAImageControlsItf self,
966        XAint32 contrast
967    );
968    XAresult (*GetContrast) (
969        XAImageControlsItf self,
970        XAint32 * pContrast
971    );
972    XAresult (*SetGamma) (
973        XAImageControlsItf self,
974        XApermille gamma
975    );
976    XAresult (*GetGamma) (
977        XAImageControlsItf self,
978        XApermille * pGamma
979    );
980    XAresult (*GetSupportedGammaSettings) (
981        XAImageControlsItf self,
982        XApermille * pMinValue,
983        XApermille * pMaxValue,
984        XAuint32 * pNumSettings,
985        XApermille ** ppSettings
986    );
987};
988
989/* IMAGE EFFECT */
990
991#define XA_IMAGEEFFECT_MONOCHROME       ((XAuint32) 0x00000001)
992#define XA_IMAGEEFFECT_NEGATIVE         ((XAuint32) 0x00000002)
993#define XA_IMAGEEFFECT_SEPIA            ((XAuint32) 0x00000003)
994#define XA_IMAGEEFFECT_EMBOSS           ((XAuint32) 0x00000004)
995#define XA_IMAGEEFFECT_PAINTBRUSH       ((XAuint32) 0x00000005)
996#define XA_IMAGEEFFECT_SOLARIZE         ((XAuint32) 0x00000006)
997#define XA_IMAGEEFFECT_CARTOON          ((XAuint32) 0x00000007)
998
999XA_API extern const XAInterfaceID XA_IID_IMAGEEFFECTS;
1000
1001struct XAImageEffectsItf_;
1002typedef const struct XAImageEffectsItf_ * const * XAImageEffectsItf;
1003
1004struct XAImageEffectsItf_ {
1005    XAresult (*QuerySupportedImageEffects) (
1006        XAImageEffectsItf self,
1007        XAuint32 index,
1008        XAuint32 * pImageEffectId
1009    );
1010    XAresult (*EnableImageEffect) (
1011        XAImageEffectsItf self,
1012        XAuint32 imageEffectID
1013    );
1014    XAresult (*DisableImageEffect) (
1015        XAImageEffectsItf self,
1016        XAuint32 imageEffectID
1017    );
1018    XAresult (*IsImageEffectEnabled) (
1019        XAImageEffectsItf self,
1020        XAuint32 imageEffectID,
1021        XAboolean * pEnabled
1022    );
1023};
1024
1025/* VIDEO POST PROCESSING */
1026
1027#define XA_VIDEOMIRROR_NONE             ((XAuint32) 0x00000001)
1028#define XA_VIDEOMIRROR_VERTICAL         ((XAuint32) 0x00000002)
1029#define XA_VIDEOMIRROR_HORIZONTAL       ((XAuint32) 0x00000003)
1030#define XA_VIDEOMIRROR_BOTH             ((XAuint32) 0x00000004)
1031
1032#define XA_VIDEOSCALE_STRETCH           ((XAuint32) 0x00000001)
1033#define XA_VIDEOSCALE_FIT               ((XAuint32) 0x00000002)
1034#define XA_VIDEOSCALE_CROP              ((XAuint32) 0x00000003)
1035
1036#define XA_RENDERINGHINT_NONE           ((XAuint32) 0x00000000)
1037#define XA_RENDERINGHINT_ANTIALIASING   ((XAuint32) 0x00000001)
1038
1039typedef struct XARectangle_ {
1040    XAuint32 left;
1041    XAuint32 top;
1042    XAuint32 width;
1043    XAuint32 height;
1044} XARectangle;
1045
1046XA_API extern const XAInterfaceID XA_IID_VIDEOPOSTPROCESSING;
1047
1048struct XAVideoPostProcessingItf_;
1049typedef const struct XAVideoPostProcessingItf_ * const * XAVideoPostProcessingItf;
1050
1051struct XAVideoPostProcessingItf_ {
1052    XAresult (*SetRotation) (
1053        XAVideoPostProcessingItf self,
1054        XAmillidegree rotation
1055    );
1056    XAresult (*IsArbitraryRotationSupported) (
1057        XAVideoPostProcessingItf self,
1058        XAboolean *pSupported
1059    );
1060    XAresult (*SetScaleOptions) (
1061        XAVideoPostProcessingItf self,
1062        XAuint32 scaleOptions,
1063        XAuint32 backgroundColor,
1064        XAuint32 renderingHints
1065    );
1066    XAresult (*SetSourceRectangle) (
1067        XAVideoPostProcessingItf self,
1068        const XARectangle *pSrcRect
1069    );
1070    XAresult (*SetDestinationRectangle) (
1071        XAVideoPostProcessingItf self,
1072        const XARectangle *pDestRect
1073    );
1074    XAresult (*SetMirror) (
1075        XAVideoPostProcessingItf self,
1076        XAuint32 mirror
1077    );
1078    XAresult (*Commit) (
1079        XAVideoPostProcessingItf self
1080    );
1081};
1082
1083
1084
1085  /*****************************************************************/
1086  /* CAPTURING INTERFACES, STRUCTS AND DEFINES                     */
1087  /*****************************************************************/
1088
1089/* RECORD */
1090
1091#define XA_RECORDEVENT_HEADATLIMIT          ((XAuint32) 0x00000001)
1092#define XA_RECORDEVENT_HEADATMARKER         ((XAuint32) 0x00000002)
1093#define XA_RECORDEVENT_HEADATNEWPOS         ((XAuint32) 0x00000004)
1094#define XA_RECORDEVENT_HEADMOVING           ((XAuint32) 0x00000008)
1095#define XA_RECORDEVENT_HEADSTALLED          ((XAuint32) 0x00000010)
1096#define XA_RECORDEVENT_BUFFER_FULL          ((XAuint32) 0x00000020)
1097
1098#define XA_RECORDSTATE_STOPPED          ((XAuint32) 0x00000001)
1099#define XA_RECORDSTATE_PAUSED           ((XAuint32) 0x00000002)
1100#define XA_RECORDSTATE_RECORDING        ((XAuint32) 0x00000003)
1101
1102XA_API extern const XAInterfaceID XA_IID_RECORD;
1103
1104struct XARecordItf_;
1105typedef const struct XARecordItf_ * const * XARecordItf;
1106
1107typedef void (XAAPIENTRY * xaRecordCallback) (
1108    XARecordItf caller,
1109    void * pContext,
1110    XAuint32 event
1111);
1112
1113struct XARecordItf_ {
1114    XAresult (*SetRecordState) (
1115        XARecordItf self,
1116        XAuint32 state
1117    );
1118    XAresult (*GetRecordState) (
1119        XARecordItf self,
1120        XAuint32 * pState
1121    );
1122    XAresult (*SetDurationLimit) (
1123        XARecordItf self,
1124        XAmillisecond msec
1125    );
1126    XAresult (*GetPosition) (
1127        XARecordItf self,
1128        XAmillisecond * pMsec
1129    );
1130    XAresult (*RegisterCallback) (
1131        XARecordItf self,
1132        xaRecordCallback callback,
1133        void * pContext
1134    );
1135    XAresult (*SetCallbackEventsMask) (
1136        XARecordItf self,
1137        XAuint32 eventFlags
1138    );
1139    XAresult (*GetCallbackEventsMask) (
1140        XARecordItf self,
1141        XAuint32 * pEventFlags
1142    );
1143    XAresult (*SetMarkerPosition) (
1144        XARecordItf self,
1145        XAmillisecond mSec
1146    );
1147    XAresult (*ClearMarkerPosition) (
1148        XARecordItf self
1149    );
1150    XAresult (*GetMarkerPosition) (
1151        XARecordItf self,
1152        XAmillisecond * pMsec
1153    );
1154    XAresult (*SetPositionUpdatePeriod) (
1155        XARecordItf self,
1156        XAmillisecond mSec
1157    );
1158    XAresult (*GetPositionUpdatePeriod) (
1159        XARecordItf self,
1160        XAmillisecond * pMsec
1161    );
1162};
1163
1164/* SNAPSHOT */
1165
1166XA_API extern const XAInterfaceID XA_IID_SNAPSHOT;
1167
1168struct XASnapshotItf_;
1169typedef const struct XASnapshotItf_ * const * XASnapshotItf;
1170
1171typedef void (XAAPIENTRY * xaSnapshotInitiatedCallback) (
1172    XASnapshotItf caller,
1173    void * context
1174);
1175
1176typedef void (XAAPIENTRY * xaSnapshotTakenCallback) (
1177    XASnapshotItf caller,
1178    void * context,
1179    XAuint32 numberOfPicsTaken,
1180    const XADataSink * image
1181);
1182
1183struct XASnapshotItf_ {
1184    XAresult (*InitiateSnapshot) (
1185        XASnapshotItf self,
1186        XAuint32 numberOfPictures,
1187        XAuint32 fps,
1188        XAboolean freezeViewFinder,
1189        XADataSink sink,
1190        xaSnapshotInitiatedCallback initiatedCallback,
1191        xaSnapshotTakenCallback takenCallback,
1192        void * pContext
1193    );
1194    XAresult (*TakeSnapshot) (
1195        XASnapshotItf self
1196    );
1197    XAresult (*CancelSnapshot) (
1198        XASnapshotItf self
1199    );
1200    XAresult (*ReleaseBuffers) (
1201        XASnapshotItf self,
1202        XADataSink * image
1203    );
1204    XAresult (*GetMaxPicsPerBurst) (
1205        XASnapshotItf self,
1206        XAuint32 * maxNumberOfPictures
1207    );
1208    XAresult (*GetBurstFPSRange) (
1209        XASnapshotItf self,
1210        XAuint32 * minFPS,
1211        XAuint32 * maxFPS
1212    );
1213    XAresult (*SetShutterFeedback) (
1214        XASnapshotItf self,
1215        XAboolean enabled
1216    );
1217    XAresult (*GetShutterFeedback) (
1218        XASnapshotItf self,
1219        XAboolean * enabled
1220    );
1221};
1222
1223
1224
1225  /*****************************************************************/
1226  /* METADATA RELATED INTERFACES, STRUCTS AND DEFINES              */
1227  /*****************************************************************/
1228
1229/* METADATA (EXTRACTION, INSERTION, TRAVERSAL) */
1230
1231#define XA_NODE_PARENT                  ((XAuint32) 0xFFFFFFFF)
1232
1233#define XA_ROOT_NODE_ID                 ((XAint32) 0x7FFFFFFF)
1234
1235#define XA_NODETYPE_UNSPECIFIED         ((XAuint32) 0x00000001)
1236#define XA_NODETYPE_AUDIO               ((XAuint32) 0x00000002)
1237#define XA_NODETYPE_VIDEO               ((XAuint32) 0x00000003)
1238#define XA_NODETYPE_IMAGE               ((XAuint32) 0x00000004)
1239
1240#define XA_CHARACTERENCODING_UNKNOWN            ((XAuint32) 0x00000000)
1241#define XA_CHARACTERENCODING_BINARY             ((XAuint32) 0x00000001)
1242#define XA_CHARACTERENCODING_ASCII              ((XAuint32) 0x00000002)
1243#define XA_CHARACTERENCODING_BIG5               ((XAuint32) 0x00000003)
1244#define XA_CHARACTERENCODING_CODEPAGE1252       ((XAuint32) 0x00000004)
1245#define XA_CHARACTERENCODING_GB2312             ((XAuint32) 0x00000005)
1246#define XA_CHARACTERENCODING_HZGB2312           ((XAuint32) 0x00000006)
1247#define XA_CHARACTERENCODING_GB12345            ((XAuint32) 0x00000007)
1248#define XA_CHARACTERENCODING_GB18030            ((XAuint32) 0x00000008)
1249#define XA_CHARACTERENCODING_GBK                ((XAuint32) 0x00000009)
1250#define XA_CHARACTERENCODING_IMAPUTF7           ((XAuint32) 0x0000000A)
1251#define XA_CHARACTERENCODING_ISO2022JP          ((XAuint32) 0x0000000B)
1252#define XA_CHARACTERENCODING_ISO2022JP1         ((XAuint32) 0x0000000B)
1253#define XA_CHARACTERENCODING_ISO88591           ((XAuint32) 0x0000000C)
1254#define XA_CHARACTERENCODING_ISO885910          ((XAuint32) 0x0000000D)
1255#define XA_CHARACTERENCODING_ISO885913          ((XAuint32) 0x0000000E)
1256#define XA_CHARACTERENCODING_ISO885914          ((XAuint32) 0x0000000F)
1257#define XA_CHARACTERENCODING_ISO885915          ((XAuint32) 0x00000010)
1258#define XA_CHARACTERENCODING_ISO88592           ((XAuint32) 0x00000011)
1259#define XA_CHARACTERENCODING_ISO88593           ((XAuint32) 0x00000012)
1260#define XA_CHARACTERENCODING_ISO88594           ((XAuint32) 0x00000013)
1261#define XA_CHARACTERENCODING_ISO88595           ((XAuint32) 0x00000014)
1262#define XA_CHARACTERENCODING_ISO88596           ((XAuint32) 0x00000015)
1263#define XA_CHARACTERENCODING_ISO88597           ((XAuint32) 0x00000016)
1264#define XA_CHARACTERENCODING_ISO88598           ((XAuint32) 0x00000017)
1265#define XA_CHARACTERENCODING_ISO88599           ((XAuint32) 0x00000018)
1266#define XA_CHARACTERENCODING_ISOEUCJP           ((XAuint32) 0x00000019)
1267#define XA_CHARACTERENCODING_SHIFTJIS           ((XAuint32) 0x0000001A)
1268#define XA_CHARACTERENCODING_SMS7BIT            ((XAuint32) 0x0000001B)
1269#define XA_CHARACTERENCODING_UTF7               ((XAuint32) 0x0000001C)
1270#define XA_CHARACTERENCODING_UTF8               ((XAuint32) 0x0000001D)
1271#define XA_CHARACTERENCODING_JAVACONFORMANTUTF8 ((XAuint32) 0x0000001E)
1272#define XA_CHARACTERENCODING_UTF16BE            ((XAuint32) 0x0000001F)
1273#define XA_CHARACTERENCODING_UTF16LE            ((XAuint32) 0x00000020)
1274
1275#define XA_METADATA_FILTER_KEY          ((XAuint8) 0x01)
1276#define XA_METADATA_FILTER_LANG         ((XAuint8) 0x02)
1277#define XA_METADATA_FILTER_ENCODING     ((XAuint8) 0x04)
1278
1279#define XA_METADATATRAVERSALMODE_ALL    ((XAuint32) 0x00000001)
1280#define XA_METADATATRAVERSALMODE_NODE   ((XAuint32) 0x00000002)
1281
1282#ifndef _KHRONOS_KEYS_
1283#define _KHRONOS_KEYS_
1284#define KHRONOS_TITLE                   "KhronosTitle"
1285#define KHRONOS_ALBUM                   "KhronosAlbum"
1286#define KHRONOS_TRACK_NUMBER            "KhronosTrackNumber"
1287#define KHRONOS_ARTIST                  "KhronosArtist"
1288#define KHRONOS_GENRE                   "KhronosGenre"
1289#define KHRONOS_YEAR                    "KhronosYear"
1290#define KHRONOS_COMMENT                 "KhronosComment"
1291#define KHRONOS_ARTIST_URL              "KhronosArtistURL"
1292#define KHRONOS_CONTENT_URL             "KhronosContentURL"
1293#define KHRONOS_RATING                  "KhronosRating"
1294#define KHRONOS_ALBUM_ART               "KhronosAlbumArt"
1295#define KHRONOS_COPYRIGHT               "KhronosCopyright"
1296#endif /* _KHRONOS_KEYS_ */
1297
1298
1299typedef struct XAMetadataInfo_ {
1300    XAuint32 size;
1301    XAuint32 encoding;
1302    const XAchar langCountry[16];
1303    XAuint8 data[1];
1304} XAMetadataInfo;
1305
1306XA_API extern const XAInterfaceID XA_IID_METADATAEXTRACTION;
1307
1308struct XAMetadataExtractionItf_;
1309typedef const struct XAMetadataExtractionItf_
1310    * const * XAMetadataExtractionItf;
1311
1312struct XAMetadataExtractionItf_ {
1313    XAresult (*GetItemCount) (
1314        XAMetadataExtractionItf self,
1315        XAuint32 * pItemCount
1316    );
1317    XAresult (*GetKeySize) (
1318        XAMetadataExtractionItf self,
1319        XAuint32 index,
1320        XAuint32 * pKeySize
1321    );
1322    XAresult (*GetKey) (
1323        XAMetadataExtractionItf self,
1324        XAuint32 index,
1325        XAuint32 keySize,
1326        XAMetadataInfo * pKey
1327    );
1328    XAresult (*GetValueSize) (
1329        XAMetadataExtractionItf self,
1330        XAuint32 index,
1331        XAuint32 * pValueSize
1332    );
1333    XAresult (*GetValue) (
1334        XAMetadataExtractionItf self,
1335        XAuint32 index,
1336        XAuint32 valueSize,
1337        XAMetadataInfo * pValue
1338    );
1339    XAresult (*AddKeyFilter) (
1340        XAMetadataExtractionItf self,
1341        XAuint32 keySize,
1342        const void * pKey,
1343        XAuint32 keyEncoding,
1344        const XAchar * pValueLangCountry,
1345        XAuint32 valueEncoding,
1346        XAuint8 filterMask
1347    );
1348    XAresult (*ClearKeyFilter) (
1349        XAMetadataExtractionItf self
1350    );
1351};
1352
1353
1354XA_API extern const XAInterfaceID XA_IID_METADATAINSERTION;
1355
1356struct XAMetadataInsertionItf_;
1357typedef const struct XAMetadataInsertionItf_
1358    * const * XAMetadataInsertionItf;
1359
1360typedef void (XAAPIENTRY * xaMetadataInsertionCallback) (
1361    XAMetadataInsertionItf caller,
1362    void * pContext,
1363    XAMetadataInfo * pKey,
1364    XAMetadataInfo * pValue,
1365    XAint32 nodeID,
1366    XAboolean result
1367);
1368
1369struct XAMetadataInsertionItf_ {
1370    XAresult (*CreateChildNode) (
1371        XAMetadataInsertionItf self,
1372        XAint32 parentNodeID,
1373        XAuint32 type,
1374        XAchar * mimeType,
1375        XAint32 * pChildNodeID
1376    );
1377    XAresult (*GetSupportedKeysCount) (
1378        XAMetadataInsertionItf self,
1379        XAint32 nodeID,
1380        XAboolean * pFreeKeys,
1381        XAuint32 * pKeyCount,
1382        XAuint32 * pEncodingCount
1383    );
1384    XAresult (*GetKeySize) (
1385        XAMetadataInsertionItf self,
1386        XAint32 nodeID,
1387        XAuint32 keyIndex,
1388        XAuint32 * pKeySize
1389    );
1390    XAresult (*GetKey) (
1391        XAMetadataInsertionItf self,
1392        XAint32 nodeID,
1393        XAuint32 keyIndex,
1394        XAuint32 keySize,
1395        XAMetadataInfo * pKey
1396    );
1397    XAresult (*GetFreeKeysEncoding) (
1398        XAMetadataInsertionItf self,
1399        XAint32 nodeID,
1400        XAuint32 encodingIndex,
1401        XAuint32 * pEncoding
1402    );
1403    XAresult (*InsertMetadataItem) (
1404        XAMetadataInsertionItf self,
1405        XAint32 nodeID,
1406        XAMetadataInfo * pKey,
1407        XAMetadataInfo * pValue,
1408        XAboolean overwrite
1409    );
1410    XAresult (*RegisterCallback) (
1411        XAMetadataInsertionItf self,
1412        xaMetadataInsertionCallback callback,
1413        void * pContext
1414    );
1415};
1416
1417
1418XA_API extern const XAInterfaceID XA_IID_METADATATRAVERSAL;
1419
1420struct XAMetadataTraversalItf_;
1421typedef const struct XAMetadataTraversalItf_
1422    *  const *  XAMetadataTraversalItf;
1423
1424struct XAMetadataTraversalItf_ {
1425    XAresult (*SetMode) (
1426        XAMetadataTraversalItf self,
1427        XAuint32 mode
1428    );
1429    XAresult (*GetChildCount) (
1430        XAMetadataTraversalItf self,
1431        XAuint32 * pCount
1432    );
1433    XAresult (*GetChildMIMETypeSize) (
1434        XAMetadataTraversalItf self,
1435        XAuint32 index,
1436        XAuint32 * pSize
1437    );
1438    XAresult (*GetChildInfo) (
1439        XAMetadataTraversalItf self,
1440        XAuint32 index,
1441        XAint32 * pNodeID,
1442        XAuint32 * pType,
1443        XAuint32 size,
1444        XAchar * pMimeType
1445    );
1446    XAresult (*SetActiveNode) (
1447        XAMetadataTraversalItf self,
1448        XAuint32 index
1449    );
1450};
1451
1452/* DYNAMIC SOURCE */
1453
1454XA_API extern const XAInterfaceID XA_IID_DYNAMICSOURCE;
1455
1456struct XADynamicSourceItf_;
1457typedef const struct XADynamicSourceItf_ * const * XADynamicSourceItf;
1458
1459struct XADynamicSourceItf_ {
1460    XAresult (*SetSource) (
1461        XADynamicSourceItf self,
1462        XADataSource * pDataSource
1463    );
1464};
1465
1466
1467
1468  /*****************************************************************/
1469  /*  I/O DEVICES RELATED INTERFACES, STRUCTS AND DEFINES          */
1470  /*****************************************************************/
1471
1472/* CAMERA AND CAMERA CAPABILITIES */
1473
1474#define XA_CAMERA_APERTUREMODE_MANUAL               ((XAuint32) 0x00000001)
1475#define XA_CAMERA_APERTUREMODE_AUTO                 ((XAuint32) 0x00000002)
1476
1477#define XA_CAMERA_AUTOEXPOSURESTATUS_SUCCESS        ((XAuint32) 0x00000001)
1478#define XA_CAMERA_AUTOEXPOSURESTATUS_UNDEREXPOSURE  ((XAuint32) 0x00000002)
1479#define XA_CAMERA_AUTOEXPOSURESTATUS_OVEREXPOSURE   ((XAuint32) 0x00000003)
1480
1481#define XA_CAMERACBEVENT_ROTATION                   ((XAuint32) 0x00000001)
1482#define XA_CAMERACBEVENT_FLASHREADY                 ((XAuint32) 0x00000002)
1483#define XA_CAMERACBEVENT_FOCUSSTATUS                ((XAuint32) 0x00000003)
1484#define XA_CAMERACBEVENT_EXPOSURESTATUS             ((XAuint32) 0x00000004)
1485#define XA_CAMERACBEVENT_WHITEBALANCELOCKED         ((XAuint32) 0x00000005)
1486#define XA_CAMERACBEVENT_ZOOMSTATUS                 ((XAuint32) 0x00000006)
1487
1488#define XA_CAMERACAP_FLASH                          ((XAuint32) 0x00000001)
1489#define XA_CAMERACAP_AUTOFOCUS                      ((XAuint32) 0x00000002)
1490#define XA_CAMERACAP_CONTINUOUSAUTOFOCUS            ((XAuint32) 0x00000004)
1491#define XA_CAMERACAP_MANUALFOCUS                    ((XAuint32) 0x00000008)
1492#define XA_CAMERACAP_AUTOEXPOSURE                   ((XAuint32) 0x00000010)
1493#define XA_CAMERACAP_MANUALEXPOSURE                 ((XAuint32) 0x00000020)
1494#define XA_CAMERACAP_AUTOISOSENSITIVITY             ((XAuint32) 0x00000040)
1495#define XA_CAMERACAP_MANUALISOSENSITIVITY           ((XAuint32) 0x00000080)
1496#define XA_CAMERACAP_AUTOAPERTURE                   ((XAuint32) 0x00000100)
1497#define XA_CAMERACAP_MANUALAPERTURE                 ((XAuint32) 0x00000200)
1498#define XA_CAMERACAP_AUTOSHUTTERSPEED               ((XAuint32) 0x00000400)
1499#define XA_CAMERACAP_MANUALSHUTTERSPEED             ((XAuint32) 0x00000800)
1500#define XA_CAMERACAP_AUTOWHITEBALANCE               ((XAuint32) 0x00001000)
1501#define XA_CAMERACAP_MANUALWHITEBALANCE             ((XAuint32) 0x00002000)
1502#define XA_CAMERACAP_OPTICALZOOM                    ((XAuint32) 0x00004000)
1503#define XA_CAMERACAP_DIGITALZOOM                    ((XAuint32) 0x00008000)
1504#define XA_CAMERACAP_METERING                       ((XAuint32) 0x00010000)
1505#define XA_CAMERACAP_BRIGHTNESS                     ((XAuint32) 0x00020000)
1506#define XA_CAMERACAP_CONTRAST                       ((XAuint32) 0x00040000)
1507#define XA_CAMERACAP_GAMMA                          ((XAuint32) 0x00080000)
1508
1509
1510#define XA_CAMERA_EXPOSUREMODE_MANUAL               ((XAuint32) 0x00000001)
1511#define XA_CAMERA_EXPOSUREMODE_AUTO                 ((XAuint32) 0x00000002)
1512#define XA_CAMERA_EXPOSUREMODE_NIGHT                ((XAuint32) 0x00000004)
1513#define XA_CAMERA_EXPOSUREMODE_BACKLIGHT            ((XAuint32) 0x00000008)
1514#define XA_CAMERA_EXPOSUREMODE_SPOTLIGHT            ((XAuint32) 0x00000010)
1515#define XA_CAMERA_EXPOSUREMODE_SPORTS               ((XAuint32) 0x00000020)
1516#define XA_CAMERA_EXPOSUREMODE_SNOW                 ((XAuint32) 0x00000040)
1517#define XA_CAMERA_EXPOSUREMODE_BEACH                ((XAuint32) 0x00000080)
1518#define XA_CAMERA_EXPOSUREMODE_LARGEAPERTURE        ((XAuint32) 0x00000100)
1519#define XA_CAMERA_EXPOSUREMODE_SMALLAPERTURE        ((XAuint32) 0x00000200)
1520#define XA_CAMERA_EXPOSUREMODE_PORTRAIT             ((XAuint32) 0x0000400)
1521#define XA_CAMERA_EXPOSUREMODE_NIGHTPORTRAIT        ((XAuint32) 0x00000800)
1522
1523#define XA_CAMERA_FLASHMODE_OFF                     ((XAuint32) 0x00000001)
1524#define XA_CAMERA_FLASHMODE_ON                      ((XAuint32) 0x00000002)
1525#define XA_CAMERA_FLASHMODE_AUTO                    ((XAuint32) 0x00000004)
1526#define XA_CAMERA_FLASHMODE_REDEYEREDUCTION         ((XAuint32) 0x00000008)
1527#define XA_CAMERA_FLASHMODE_REDEYEREDUCTION_AUTO    ((XAuint32) 0x00000010)
1528#define XA_CAMERA_FLASHMODE_FILLIN                  ((XAuint32) 0x00000020)
1529#define XA_CAMERA_FLASHMODE_TORCH                   ((XAuint32) 0x00000040)
1530
1531#define XA_CAMERA_FOCUSMODE_MANUAL                  ((XAuint32) 0x00000001)
1532#define XA_CAMERA_FOCUSMODE_AUTO                    ((XAuint32) 0x00000002)
1533#define XA_CAMERA_FOCUSMODE_CENTROID                ((XAuint32) 0x00000004)
1534#define XA_CAMERA_FOCUSMODE_CONTINUOUS_AUTO         ((XAuint32) 0x00000008)
1535#define XA_CAMERA_FOCUSMODE_CONTINUOUS_CENTROID     ((XAuint32) 0x00000010)
1536
1537#define XA_CAMERA_FOCUSMODESTATUS_OFF               ((XAuint32) 0x00000001)
1538#define XA_CAMERA_FOCUSMODESTATUS_REQUEST           ((XAuint32) 0x00000002)
1539#define XA_CAMERA_FOCUSMODESTATUS_REACHED           ((XAuint32) 0x00000003)
1540#define XA_CAMERA_FOCUSMODESTATUS_UNABLETOREACH     ((XAuint32) 0x00000004)
1541#define XA_CAMERA_FOCUSMODESTATUS_LOST              ((XAuint32) 0x00000005)
1542
1543#define XA_CAMERA_ISOSENSITIVITYMODE_MANUAL         ((XAuint32) 0x00000001)
1544#define XA_CAMERA_ISOSENSITIVITYMODE_AUTO           ((XAuint32) 0x00000002)
1545
1546#define XA_CAMERA_LOCK_AUTOFOCUS                    ((XAuint32) 0x00000001)
1547#define XA_CAMERA_LOCK_AUTOEXPOSURE                 ((XAuint32) 0x00000002)
1548#define XA_CAMERA_LOCK_AUTOWHITEBALANCE             ((XAuint32) 0x00000004)
1549
1550#define XA_CAMERA_METERINGMODE_AVERAGE              ((XAuint32) 0x00000001)
1551#define XA_CAMERA_METERINGMODE_SPOT                 ((XAuint32) 0x00000002)
1552#define XA_CAMERA_METERINGMODE_MATRIX               ((XAuint32) 0x00000004)
1553
1554#define XA_CAMERA_SHUTTERSPEEDMODE_MANUAL           ((XAuint32) 0x00000001)
1555#define XA_CAMERA_SHUTTERSPEEDMODE_AUTO             ((XAuint32) 0x00000002)
1556
1557#define XA_CAMERA_WHITEBALANCEMODE_MANUAL           ((XAuint32) 0x00000001)
1558#define XA_CAMERA_WHITEBALANCEMODE_AUTO             ((XAuint32) 0x00000002)
1559#define XA_CAMERA_WHITEBALANCEMODE_SUNLIGHT         ((XAuint32) 0x00000004)
1560#define XA_CAMERA_WHITEBALANCEMODE_CLOUDY           ((XAuint32) 0x00000008)
1561#define XA_CAMERA_WHITEBALANCEMODE_SHADE            ((XAuint32) 0x00000010)
1562#define XA_CAMERA_WHITEBALANCEMODE_TUNGSTEN         ((XAuint32) 0x00000020)
1563#define XA_CAMERA_WHITEBALANCEMODE_FLUORESCENT      ((XAuint32) 0x00000040)
1564#define XA_CAMERA_WHITEBALANCEMODE_INCANDESCENT     ((XAuint32) 0x00000080)
1565#define XA_CAMERA_WHITEBALANCEMODE_FLASH            ((XAuint32) 0x00000100)
1566#define XA_CAMERA_WHITEBALANCEMODE_SUNSET           ((XAuint32) 0x00000200)
1567
1568#define XA_CAMERA_ZOOM_SLOW                         ((XAuint32) 50)
1569#define XA_CAMERA_ZOOM_NORMAL                       ((XAuint32) 100)
1570#define XA_CAMERA_ZOOM_FAST                         ((XAuint32) 200)
1571#define XA_CAMERA_ZOOM_FASTEST                      ((XAuint32) 0xFFFFFFFF)
1572
1573#define XA_FOCUSPOINTS_ONE                          ((XAuint32) 0x00000001)
1574#define XA_FOCUSPOINTS_THREE_3X1                    ((XAuint32) 0x00000002)
1575#define XA_FOCUSPOINTS_FIVE_CROSS                   ((XAuint32) 0x00000003)
1576#define XA_FOCUSPOINTS_SEVEN_CROSS                  ((XAuint32) 0x00000004)
1577#define XA_FOCUSPOINTS_NINE_SQUARE                  ((XAuint32) 0x00000005)
1578#define XA_FOCUSPOINTS_ELEVEN_CROSS                 ((XAuint32) 0x00000006)
1579#define XA_FOCUSPOINTS_TWELVE_3X4                   ((XAuint32) 0x00000007)
1580#define XA_FOCUSPOINTS_TWELVE_4X3                   ((XAuint32) 0x00000008)
1581#define XA_FOCUSPOINTS_SIXTEEN_SQUARE               ((XAuint32) 0x00000009)
1582#define XA_FOCUSPOINTS_CUSTOM                       ((XAuint32) 0x0000000A)
1583
1584typedef struct XAFocusPointPosition_ {
1585    XAuint32 left;
1586    XAuint32 top;
1587    XAuint32 width;
1588    XAuint32 height;
1589} XAFocusPointPosition;
1590
1591#define XA_ORIENTATION_UNKNOWN                      ((XAuint32) 0x00000001)
1592#define XA_ORIENTATION_OUTWARDS                     ((XAuint32) 0x00000002)
1593#define XA_ORIENTATION_INWARDS                      ((XAuint32) 0x00000003)
1594
1595typedef struct XACameraDescriptor_ {
1596    XAchar * name;
1597    XAuint32 maxWidth;
1598    XAuint32 maxHeight;
1599    XAuint32 orientation;
1600    XAuint32 featuresSupported;
1601    XAuint32 exposureModesSupported;
1602    XAuint32 flashModesSupported;
1603    XAuint32 focusModesSupported;
1604    XAuint32 meteringModesSupported;
1605    XAuint32 whiteBalanceModesSupported;
1606} XACameraDescriptor;
1607
1608XA_API extern const XAInterfaceID XA_IID_CAMERACAPABILITIES;
1609
1610struct XACameraCapabilitiesItf_;
1611typedef const struct XACameraCapabilitiesItf_
1612    * const * XACameraCapabilitiesItf;
1613
1614struct XACameraCapabilitiesItf_ {
1615    XAresult (*GetCameraCapabilities) (
1616        XACameraCapabilitiesItf self,
1617        XAuint32 *pIndex,
1618        XAuint32 * pCameraDeviceID,
1619        XACameraDescriptor * pDescriptor
1620    );
1621    XAresult (*QueryFocusRegionPatterns) (
1622        XACameraCapabilitiesItf self,
1623        XAuint32 cameraDeviceID,
1624        XAuint32 * pPatternID,
1625        XAuint32 * pFocusPattern,
1626        XAuint32 * pCustomPoints1,
1627        XAuint32 * pCustomPoints2
1628    );
1629    XAresult (*GetSupportedAutoLocks) (
1630        XACameraCapabilitiesItf self,
1631        XAuint32 cameraDeviceID,
1632        XAuint32 * pNumCombinations,
1633        XAuint32 ** ppLocks
1634    );
1635    XAresult (*GetSupportedFocusManualSettings) (
1636        XACameraCapabilitiesItf self,
1637        XAuint32 cameraDeviceID,
1638        XAboolean macroEnabled,
1639        XAmillimeter * pMinValue,
1640        XAmillimeter * pMaxValue,
1641        XAuint32 * pNumSettings,
1642        XAmillimeter ** ppSettings
1643    );
1644    XAresult (*GetSupportedISOSensitivitySettings) (
1645        XACameraCapabilitiesItf self,
1646        XAuint32 cameraDeviceID,
1647        XAuint32 * pMinValue,
1648        XAuint32 * pMaxValue,
1649        XAuint32 * pNumSettings,
1650        XAuint32 ** ppSettings
1651    );
1652    XAresult (*GetSupportedApertureManualSettings) (
1653        XACameraCapabilitiesItf self,
1654        XAuint32 cameraDeviceID,
1655        XAuint32 * pMinValue,
1656        XAuint32 * pMaxValue,
1657        XAuint32 * pNumSettings,
1658        XAuint32 ** ppSettings
1659    );
1660    XAresult (*GetSupportedShutterSpeedManualSettings) (
1661        XACameraCapabilitiesItf self,
1662        XAuint32 cameraDeviceID,
1663        XAmicrosecond * pMinValue,
1664        XAmicrosecond * pMaxValue,
1665        XAuint32 * pNumSettings,
1666        XAmicrosecond ** ppSettings
1667    );
1668    XAresult (*GetSupportedWhiteBalanceManualSettings) (
1669        XACameraCapabilitiesItf self,
1670        XAuint32 cameraDeviceID,
1671        XAuint32 * pMinValue,
1672        XAuint32 * pMaxValue,
1673        XAuint32 * pNumSettings,
1674        XAuint32 ** ppSettings
1675    );
1676    XAresult (*GetSupportedZoomSettings) (
1677        XACameraCapabilitiesItf self,
1678        XAuint32 cameraDeviceID,
1679        XAboolean digitalEnabled,
1680        XAboolean macroEnabled,
1681        XApermille * pMaxValue,
1682        XAuint32 * pNumSettings,
1683        XApermille ** ppSettings,
1684        XAboolean * pSpeedSupported
1685
1686    );
1687};
1688
1689XA_API extern const XAInterfaceID XA_IID_CAMERA;
1690
1691struct XACameraItf_;
1692typedef const struct XACameraItf_ * const * XACameraItf;
1693
1694typedef void (XAAPIENTRY * xaCameraCallback) (
1695    XACameraItf caller,
1696    void * pContext,
1697    XAuint32 eventId,
1698    XAuint32 eventData
1699);
1700
1701struct XACameraItf_ {
1702    XAresult (*RegisterCallback) (
1703        XACameraItf self,
1704        xaCameraCallback callback,
1705        void * pContext
1706    );
1707    XAresult (*SetFlashMode) (
1708        XACameraItf self,
1709        XAuint32 flashMode
1710    );
1711    XAresult (*GetFlashMode) (
1712        XACameraItf self,
1713        XAuint32 * pFlashMode
1714    );
1715    XAresult (*IsFlashReady) (
1716        XACameraItf self,
1717        XAboolean * pReady
1718    );
1719    XAresult (*SetFocusMode) (
1720        XACameraItf self,
1721        XAuint32 focusMode,
1722        XAmillimeter manualSetting,
1723        XAboolean macroEnabled
1724    );
1725    XAresult (*GetFocusMode) (
1726        XACameraItf self,
1727        XAuint32 * pFocusMode,
1728        XAmillimeter * pManualSetting,
1729        XAboolean * pMacroEnabled
1730    );
1731    XAresult (*SetFocusRegionPattern) (
1732        XACameraItf self,
1733        XAuint32 focusPattern,
1734        XAuint32 activePoints1,
1735        XAuint32 activePoints2
1736    );
1737    XAresult (*GetFocusRegionPattern) (
1738        XACameraItf self,
1739        XAuint32 * pFocusPattern,
1740        XAuint32 * pActivePoints1,
1741        XAuint32 * pActivePoints2
1742    );
1743    XAresult (*GetFocusRegionPositions) (
1744        XACameraItf self,
1745        XAuint32 * pNumPositionEntries,
1746        XAFocusPointPosition * pFocusPosition
1747    );
1748    XAresult (*GetFocusModeStatus) (
1749        XACameraItf self,
1750        XAuint32 * pFocusStatus,
1751        XAuint32 * pRegionStatus1,
1752        XAuint32 * pRegionStatus2
1753    );
1754    XAresult (*SetMeteringMode) (
1755        XACameraItf self,
1756        XAuint32 meteringMode
1757    );
1758    XAresult (*GetMeteringMode) (
1759        XACameraItf self,
1760        XAuint32 * pMeteringMode
1761    );
1762    XAresult (*SetExposureMode) (
1763        XACameraItf self,
1764        XAuint32 exposure,
1765        XAuint32 compensation
1766    );
1767    XAresult (*GetExposureMode) (
1768        XACameraItf self,
1769        XAuint32 * pExposure,
1770        XAuint32 * pCompensation
1771    );
1772    XAresult (*SetISOSensitivity) (
1773        XACameraItf self,
1774        XAuint32 isoSensitivity,
1775        XAuint32 manualSetting
1776    );
1777    XAresult (*GetISOSensitivity) (
1778        XACameraItf self,
1779        XAuint32 * pIsoSensitivity,
1780        XAuint32 * pManualSetting
1781    );
1782    XAresult (*SetAperture) (
1783        XACameraItf self,
1784        XAuint32 aperture,
1785        XAuint32 manualSetting
1786    );
1787    XAresult (*GetAperture) (
1788        XACameraItf self,
1789        XAuint32 * pAperture,
1790        XAuint32 * pManualSetting
1791    );
1792    XAresult (*SetShutterSpeed) (
1793        XACameraItf self,
1794        XAuint32 shutterSpeed,
1795        XAmicrosecond manualSetting
1796    );
1797    XAresult (*GetShutterSpeed) (
1798        XACameraItf self,
1799        XAuint32 * pShutterSpeed,
1800        XAmicrosecond * pManualSetting
1801    );
1802    XAresult (*SetWhiteBalance) (
1803        XACameraItf self,
1804        XAuint32 whiteBalance,
1805        XAuint32 manualSetting
1806    );
1807    XAresult (*GetWhiteBalance) (
1808        XACameraItf self,
1809        XAuint32 * pWhiteBalance,
1810        XAuint32 * pManualSetting
1811    );
1812    XAresult (*SetAutoLocks) (
1813        XACameraItf self,
1814        XAuint32 locks
1815    );
1816    XAresult (*GetAutoLocks) (
1817        XACameraItf self,
1818        XAuint32 * locks
1819    );
1820    XAresult (*SetZoom) (
1821        XACameraItf self,
1822        XApermille zoom,
1823        XAboolean digitalEnabled,
1824        XAuint32 speed,
1825        XAboolean async
1826    );
1827    XAresult (*GetZoom) (
1828        XACameraItf self,
1829        XApermille * pZoom,
1830        XAboolean * pDigital
1831    );
1832};
1833
1834/* AUDIO I/O DEVICE CAPABILITIES */
1835
1836#define XA_DEVCONNECTION_INTEGRATED                 ((XAint16) 0x0001)
1837#define XA_DEVCONNECTION_ATTACHED_WIRED             ((XAint16) 0x0100)
1838#define XA_DEVCONNECTION_ATTACHED_WIRELESS          ((XAint16) 0x0200)
1839#define XA_DEVCONNECTION_NETWORK                    ((XAint16) 0x0400)
1840
1841#define XA_DEVLOCATION_HANDSET                      ((XAint16) 0x0001)
1842#define XA_DEVLOCATION_HEADSET                      ((XAint16) 0x0002)
1843#define XA_DEVLOCATION_CARKIT                       ((XAint16) 0x0003)
1844#define XA_DEVLOCATION_DOCK                         ((XAint16) 0x0004)
1845#define XA_DEVLOCATION_REMOTE                       ((XAint16) 0x0005)
1846
1847#define XA_DEVSCOPE_UNKNOWN                         ((XAint16) 0x0001)
1848#define XA_DEVSCOPE_ENVIRONMENT                     ((XAint16) 0x0002)
1849#define XA_DEVSCOPE_USER                            ((XAint16) 0x0003)
1850
1851typedef struct XAAudioInputDescriptor_ {
1852    XAchar * deviceName;
1853    XAint16 deviceConnection;
1854    XAint16 deviceScope;
1855    XAint16 deviceLocation;
1856    XAboolean isForTelephony;
1857    XAmilliHertz minSampleRate;
1858    XAmilliHertz maxSampleRate;
1859    XAboolean isFreqRangeContinuous;
1860    XAmilliHertz * samplingRatesSupported;
1861    XAint16 numOfSamplingRatesSupported;
1862    XAint16 maxChannels;
1863} XAAudioInputDescriptor;
1864
1865typedef struct XAAudioOutputDescriptor_ {
1866    XAchar *pDeviceName;
1867    XAint16 deviceConnection;
1868    XAint16 deviceScope;
1869    XAint16 deviceLocation;
1870    XAboolean isForTelephony;
1871    XAmilliHertz minSampleRate;
1872    XAmilliHertz maxSampleRate;
1873    XAboolean isFreqRangeContinuous;
1874    XAmilliHertz *samplingRatesSupported;
1875    XAint16 numOfSamplingRatesSupported;
1876    XAint16 maxChannels;
1877} XAAudioOutputDescriptor;
1878
1879XA_API extern const XAInterfaceID XA_IID_AUDIOIODEVICECAPABILITIES;
1880
1881struct XAAudioIODeviceCapabilitiesItf_;
1882typedef const struct XAAudioIODeviceCapabilitiesItf_
1883    * const * XAAudioIODeviceCapabilitiesItf;
1884
1885typedef void (XAAPIENTRY * xaAvailableAudioInputsChangedCallback) (
1886    XAAudioIODeviceCapabilitiesItf caller,
1887    void * pContext,
1888    XAuint32 deviceID,
1889    XAint32 numInputs,
1890    XAboolean isNew
1891);
1892
1893typedef void (XAAPIENTRY * xaAvailableAudioOutputsChangedCallback) (
1894    XAAudioIODeviceCapabilitiesItf caller,
1895    void * pContext,
1896    XAuint32 deviceID,
1897    XAint32 numOutputs,
1898    XAboolean isNew
1899);
1900
1901typedef void (XAAPIENTRY * xaDefaultDeviceIDMapChangedCallback) (
1902    XAAudioIODeviceCapabilitiesItf caller,
1903    void * pContext,
1904	XAboolean isOutput,
1905    XAint32 numDevices
1906);
1907
1908struct XAAudioIODeviceCapabilitiesItf_ {
1909    XAresult (*GetAvailableAudioInputs) (
1910        XAAudioIODeviceCapabilitiesItf self,
1911        XAint32 * pNumInputs,
1912        XAuint32 * pInputDeviceIDs
1913    );
1914    XAresult (*QueryAudioInputCapabilities) (
1915        XAAudioIODeviceCapabilitiesItf self,
1916        XAuint32 deviceID,
1917        XAAudioInputDescriptor * pDescriptor
1918    );
1919    XAresult (*RegisterAvailableAudioInputsChangedCallback) (
1920        XAAudioIODeviceCapabilitiesItf self,
1921        xaAvailableAudioInputsChangedCallback callback,
1922        void * pContext
1923    );
1924    XAresult (*GetAvailableAudioOutputs) (
1925        XAAudioIODeviceCapabilitiesItf self,
1926        XAint32 * pNumOutputs,
1927        XAuint32 * pOutputDeviceIDs
1928    );
1929    XAresult (*QueryAudioOutputCapabilities) (
1930        XAAudioIODeviceCapabilitiesItf self,
1931        XAuint32 deviceID,
1932        XAAudioOutputDescriptor * pDescriptor
1933    );
1934    XAresult (*RegisterAvailableAudioOutputsChangedCallback) (
1935        XAAudioIODeviceCapabilitiesItf self,
1936        xaAvailableAudioOutputsChangedCallback callback,
1937        void * pContext
1938    );
1939    XAresult (*RegisterDefaultDeviceIDMapChangedCallback) (
1940        XAAudioIODeviceCapabilitiesItf self,
1941        xaDefaultDeviceIDMapChangedCallback callback,
1942        void * pContext
1943    );
1944    XAresult (*GetAssociatedAudioInputs) (
1945        XAAudioIODeviceCapabilitiesItf self,
1946        XAuint32 deviceID,
1947        XAint32 * pNumAudioInputs,
1948        XAuint32 * pAudioInputDeviceIDs
1949    );
1950    XAresult (*GetAssociatedAudioOutputs) (
1951        XAAudioIODeviceCapabilitiesItf self,
1952        XAuint32 deviceID,
1953        XAint32 * pNumAudioOutputs,
1954        XAuint32 * pAudioOutputDeviceIDs
1955    );
1956    XAresult (*GetDefaultAudioDevices) (
1957        XAAudioIODeviceCapabilitiesItf self,
1958        XAuint32 defaultDeviceID,
1959        XAint32 *pNumAudioDevices,
1960        XAuint32 *pAudioDeviceIDs
1961    );
1962    XAresult (*QuerySampleFormatsSupported) (
1963        XAAudioIODeviceCapabilitiesItf self,
1964        XAuint32 deviceID,
1965        XAmilliHertz samplingRate,
1966        XAint32 *pSampleFormats,
1967        XAint32 *pNumOfSampleFormats
1968    );
1969};
1970
1971/* DEVICE VOLUME */
1972
1973XA_API extern const XAInterfaceID XA_IID_DEVICEVOLUME;
1974
1975struct XADeviceVolumeItf_;
1976typedef const struct XADeviceVolumeItf_ * const * XADeviceVolumeItf;
1977
1978struct XADeviceVolumeItf_ {
1979    XAresult (*GetVolumeScale) (
1980        XADeviceVolumeItf self,
1981        XAuint32 deviceID,
1982        XAint32 * pMinValue,
1983        XAint32 * pMaxValue,
1984        XAboolean * pIsMillibelScale
1985    );
1986    XAresult (*SetVolume) (
1987        XADeviceVolumeItf self,
1988        XAuint32 deviceID,
1989        XAint32 volume
1990    );
1991    XAresult (*GetVolume) (
1992        XADeviceVolumeItf self,
1993        XAuint32 deviceID,
1994        XAint32 * pVolume
1995    );
1996};
1997
1998/* EQUALIZER */
1999
2000#define XA_EQUALIZER_UNDEFINED    ((XAuint16) 0xFFFF)
2001
2002XA_API extern const XAInterfaceID XA_IID_EQUALIZER;
2003
2004struct XAEqualizerItf_;
2005typedef const struct XAEqualizerItf_ * const * XAEqualizerItf;
2006
2007struct XAEqualizerItf_ {
2008    XAresult (*SetEnabled) (
2009        XAEqualizerItf self,
2010        XAboolean enabled
2011    );
2012    XAresult (*IsEnabled) (
2013        XAEqualizerItf self,
2014        XAboolean * pEnabled
2015    );
2016    XAresult (*GetNumberOfBands) (
2017        XAEqualizerItf self,
2018        XAuint16 * pNumBands
2019    );
2020    XAresult (*GetBandLevelRange) (
2021        XAEqualizerItf self,
2022        XAmillibel * pMin,
2023        XAmillibel * pMax
2024    );
2025    XAresult (*SetBandLevel) (
2026        XAEqualizerItf self,
2027        XAuint16 band,
2028        XAmillibel level
2029    );
2030    XAresult (*GetBandLevel) (
2031        XAEqualizerItf self,
2032        XAuint16 band,
2033        XAmillibel * pLevel
2034    );
2035    XAresult (*GetCenterFreq) (
2036        XAEqualizerItf self,
2037        XAuint16 band,
2038        XAmilliHertz * pCenter
2039    );
2040    XAresult (*GetBandFreqRange) (
2041        XAEqualizerItf self,
2042        XAuint16 band,
2043        XAmilliHertz * pMin,
2044        XAmilliHertz * pMax
2045    );
2046    XAresult (*GetBand) (
2047        XAEqualizerItf self,
2048        XAmilliHertz frequency,
2049        XAuint16 * pBand
2050    );
2051    XAresult (*GetCurrentPreset) (
2052        XAEqualizerItf self,
2053        XAuint16 * pPreset
2054    );
2055    XAresult (*UsePreset) (
2056        XAEqualizerItf self,
2057        XAuint16 index
2058    );
2059    XAresult (*GetNumberOfPresets) (
2060        XAEqualizerItf self,
2061        XAuint16 * pNumPresets
2062    );
2063    XAresult (*GetPresetName) (
2064        XAEqualizerItf self,
2065        XAuint16 index,
2066        const XAchar ** ppName
2067    );
2068};
2069
2070/* OUTPUT MIX */
2071
2072XA_API extern const XAInterfaceID XA_IID_OUTPUTMIX;
2073
2074struct XAOutputMixItf_;
2075typedef const struct XAOutputMixItf_ * const * XAOutputMixItf;
2076
2077typedef void (XAAPIENTRY * xaMixDeviceChangeCallback) (
2078    XAOutputMixItf caller,
2079    void * pContext
2080);
2081
2082struct XAOutputMixItf_ {
2083    XAresult (*GetDestinationOutputDeviceIDs) (
2084        XAOutputMixItf self,
2085        XAint32 * pNumDevices,
2086        XAuint32 * pDeviceIDs
2087    );
2088    XAresult (*RegisterDeviceChangeCallback) (
2089        XAOutputMixItf self,
2090        xaMixDeviceChangeCallback callback,
2091        void * pContext
2092    );
2093    XAresult (*ReRoute) (
2094        XAOutputMixItf self,
2095        XAint32 numOutputDevices,
2096        XAuint32 * pOutputDeviceIDs
2097    );
2098};
2099
2100/* RADIO */
2101
2102#define XA_FREQRANGE_FMEUROAMERICA                  ((XAuint8) 0x01)
2103#define XA_FREQRANGE_FMJAPAN                        ((XAuint8) 0x02)
2104#define XA_FREQRANGE_AMLW                           ((XAuint8) 0x03)
2105#define XA_FREQRANGE_AMMW                           ((XAuint8) 0x04)
2106#define XA_FREQRANGE_AMSW                           ((XAuint8) 0x05)
2107
2108#define XA_RADIO_EVENT_ANTENNA_STATUS_CHANGED       ((XAuint32) 0x00000001)
2109#define XA_RADIO_EVENT_FREQUENCY_CHANGED            ((XAuint32) 0x00000002)
2110#define XA_RADIO_EVENT_FREQUENCY_RANGE_CHANGED      ((XAuint32) 0x00000003)
2111#define XA_RADIO_EVENT_PRESET_CHANGED               ((XAuint32) 0x00000004)
2112#define XA_RADIO_EVENT_SEEK_COMPLETED               ((XAuint32) 0x00000005)
2113
2114#define XA_STEREOMODE_MONO                          ((XAuint32) 0x00000000)
2115#define XA_STEREOMODE_STEREO                        ((XAuint32) 0x00000001)
2116#define XA_STEREOMODE_AUTO                          ((XAuint32) 0x00000002)
2117
2118XA_API extern const XAInterfaceID XA_IID_RADIO;
2119
2120struct XARadioItf_;
2121typedef const struct XARadioItf_ * const * XARadioItf;
2122
2123typedef void (XAAPIENTRY * xaRadioCallback) (
2124    XARadioItf caller,
2125    void * pContext,
2126    XAuint32 event,
2127    XAuint32 eventIntData,
2128    XAboolean eventBooleanData
2129);
2130
2131struct XARadioItf_ {
2132    XAresult (*SetFreqRange) (
2133        XARadioItf self,
2134        XAuint8 range
2135    );
2136    XAresult (*GetFreqRange) (
2137        XARadioItf self,
2138        XAuint8 * pRange
2139    );
2140    XAresult (*IsFreqRangeSupported) (
2141        XARadioItf self,
2142        XAuint8 range,
2143        XAboolean * pSupported
2144    );
2145    XAresult (*GetFreqRangeProperties) (
2146        XARadioItf self,
2147        XAuint8 range,
2148        XAuint32 * pMinFreq,
2149        XAuint32 * pMaxFreq,
2150        XAuint32 * pFreqInterval
2151    );
2152    XAresult (*SetFrequency) (
2153        XARadioItf self,
2154        XAuint32 freq
2155    );
2156    XAresult (*CancelSetFrequency) (
2157        XARadioItf self
2158    );
2159    XAresult (*GetFrequency) (
2160        XARadioItf self,
2161        XAuint32 * pFreq
2162    );
2163    XAresult (*SetSquelch) (
2164        XARadioItf self,
2165        XAboolean squelch
2166    );
2167    XAresult (*GetSquelch) (
2168        XARadioItf self,
2169        XAboolean * pSquelch
2170    );
2171    XAresult (*SetStereoMode) (
2172        XARadioItf self,
2173        XAuint32 mode
2174    );
2175    XAresult (*GetStereoMode) (
2176        XARadioItf self,
2177        XAuint32 * pMode
2178    );
2179    XAresult (*GetSignalStrength) (
2180        XARadioItf self,
2181        XAuint32 * pStrength
2182    );
2183    XAresult (*Seek) (
2184        XARadioItf self,
2185        XAboolean upwards
2186    );
2187    XAresult (*StopSeeking) (
2188        XARadioItf self
2189    );
2190    XAresult (*GetNumberOfPresets) (
2191        XARadioItf self,
2192        XAuint32 * pNumPresets
2193    );
2194    XAresult (*SetPreset) (
2195        XARadioItf self,
2196        XAuint32 preset,
2197        XAuint32 freq,
2198        XAuint8 range,
2199        XAuint32 mode,
2200        const XAchar * pName
2201    );
2202    XAresult (*GetPreset) (
2203        XARadioItf self,
2204        XAuint32 preset,
2205        XAuint32 * pFreq,
2206        XAuint8 * pRange,
2207        XAuint32 * pMode,
2208        XAchar * pName,
2209        XAuint16 * pNameLength
2210    );
2211    XAresult (*RegisterRadioCallback) (
2212        XARadioItf self,
2213        xaRadioCallback callback,
2214        void * pContext
2215    );
2216};
2217
2218/* RDS */
2219
2220#define XA_RDS_EVENT_NEW_PI                         ((XAuint16) 0x0001)
2221#define XA_RDS_EVENT_NEW_PTY                        ((XAuint16) 0x0002)
2222#define XA_RDS_EVENT_NEW_PS                         ((XAuint16) 0x0004)
2223#define XA_RDS_EVENT_NEW_RT                         ((XAuint16) 0x0008)
2224#define XA_RDS_EVENT_NEW_RT_PLUS                    ((XAuint16) 0x0010)
2225#define XA_RDS_EVENT_NEW_CT                         ((XAuint16) 0x0020)
2226#define XA_RDS_EVENT_NEW_TA                         ((XAuint16) 0x0040)
2227#define XA_RDS_EVENT_NEW_TP                         ((XAuint16) 0x0080)
2228#define XA_RDS_EVENT_NEW_ALARM                      ((XAuint16) 0x0100)
2229
2230#define XA_RDSPROGRAMMETYPE_RDSPTY_NONE \
2231    ((XAuint32) 0x00000000)
2232#define XA_RDSPROGRAMMETYPE_RDSPTY_NEWS \
2233    ((XAuint32) 0x00000001)
2234#define XA_RDSPROGRAMMETYPE_RDSPTY_CURRENTAFFAIRS \
2235    ((XAuint32) 0x00000002)
2236#define XA_RDSPROGRAMMETYPE_RDSPTY_INFORMATION \
2237    ((XAuint32) 0x00000003)
2238#define XA_RDSPROGRAMMETYPE_RDSPTY_SPORT \
2239    ((XAuint32) 0x00000004)
2240#define XA_RDSPROGRAMMETYPE_RDSPTY_EDUCATION \
2241    ((XAuint32) 0x00000005)
2242#define XA_RDSPROGRAMMETYPE_RDSPTY_DRAMA \
2243    ((XAuint32) 0x00000006)
2244#define XA_RDSPROGRAMMETYPE_RDSPTY_CULTURE \
2245    ((XAuint32) 0x00000007)
2246#define XA_RDSPROGRAMMETYPE_RDSPTY_SCIENCE \
2247    ((XAuint32) 0x00000008)
2248#define XA_RDSPROGRAMMETYPE_RDSPTY_VARIEDSPEECH \
2249    ((XAuint32) 0x00000009)
2250#define XA_RDSPROGRAMMETYPE_RDSPTY_POPMUSIC \
2251    ((XAuint32) 0x0000000A)
2252#define XA_RDSPROGRAMMETYPE_RDSPTY_ROCKMUSIC \
2253    ((XAuint32) 0x0000000B)
2254#define XA_RDSPROGRAMMETYPE_RDSPTY_EASYLISTENING \
2255    ((XAuint32) 0x0000000C)
2256#define XA_RDSPROGRAMMETYPE_RDSPTY_LIGHTCLASSICAL \
2257    ((XAuint32) 0x0000000D)
2258#define XA_RDSPROGRAMMETYPE_RDSPTY_SERIOUSCLASSICAL \
2259    ((XAuint32) 0x0000000E)
2260#define XA_RDSPROGRAMMETYPE_RDSPTY_OTHERMUSIC \
2261    ((XAuint32) 0x0000000F)
2262#define XA_RDSPROGRAMMETYPE_RDSPTY_WEATHER \
2263    ((XAuint32) 0x00000010)
2264#define XA_RDSPROGRAMMETYPE_RDSPTY_FINANCE \
2265    ((XAuint32) 0x00000011)
2266#define XA_RDSPROGRAMMETYPE_RDSPTY_CHILDRENSPROGRAMMES \
2267    ((XAuint32) 0x00000012)
2268#define XA_RDSPROGRAMMETYPE_RDSPTY_SOCIALAFFAIRS \
2269    ((XAuint32) 0x00000013)
2270#define XA_RDSPROGRAMMETYPE_RDSPTY_RELIGION \
2271    ((XAuint32) 0x00000014)
2272#define XA_RDSPROGRAMMETYPE_RDSPTY_PHONEIN \
2273    ((XAuint32) 0x00000015)
2274#define XA_RDSPROGRAMMETYPE_RDSPTY_TRAVEL \
2275    ((XAuint32) 0x00000016)
2276#define XA_RDSPROGRAMMETYPE_RDSPTY_LEISURE \
2277    ((XAuint32) 0x00000017)
2278#define XA_RDSPROGRAMMETYPE_RDSPTY_JAZZMUSIC \
2279    ((XAuint32) 0x00000018)
2280#define XA_RDSPROGRAMMETYPE_RDSPTY_COUNTRYMUSIC \
2281    ((XAuint32) 0x00000019)
2282#define XA_RDSPROGRAMMETYPE_RDSPTY_NATIONALMUSIC \
2283    ((XAuint32) 0x0000001A)
2284#define XA_RDSPROGRAMMETYPE_RDSPTY_OLDIESMUSIC \
2285    ((XAuint32) 0x0000001B)
2286#define XA_RDSPROGRAMMETYPE_RDSPTY_FOLKMUSIC \
2287    ((XAuint32) 0x0000001C)
2288#define XA_RDSPROGRAMMETYPE_RDSPTY_DOCUMENTARY \
2289    ((XAuint32) 0x0000001D)
2290#define XA_RDSPROGRAMMETYPE_RDSPTY_ALARMTEST \
2291    ((XAuint32) 0x0000001E)
2292#define XA_RDSPROGRAMMETYPE_RDSPTY_ALARM \
2293    ((XAuint32) 0x0000001F)
2294
2295#define XA_RDSPROGRAMMETYPE_RBDSPTY_NONE \
2296    ((XAuint32) 0x00000000)
2297#define XA_RDSPROGRAMMETYPE_RBDSPTY_NEWS \
2298    ((XAuint32) 0x00000001)
2299#define XA_RDSPROGRAMMETYPE_RBDSPTY_INFORMATION \
2300    ((XAuint32) 0x00000002)
2301#define XA_RDSPROGRAMMETYPE_RBDSPTY_SPORTS \
2302    ((XAuint32) 0x00000003)
2303#define XA_RDSPROGRAMMETYPE_RBDSPTY_TALK \
2304    ((XAuint32) 0x00000004)
2305#define XA_RDSPROGRAMMETYPE_RBDSPTY_ROCK \
2306    ((XAuint32) 0x00000005)
2307#define XA_RDSPROGRAMMETYPE_RBDSPTY_CLASSICROCK \
2308    ((XAuint32) 0x00000006)
2309#define XA_RDSPROGRAMMETYPE_RBDSPTY_ADULTHITS \
2310    ((XAuint32) 0x00000007)
2311#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFTROCK \
2312    ((XAuint32) 0x00000008)
2313#define XA_RDSPROGRAMMETYPE_RBDSPTY_TOP40 \
2314    ((XAuint32) 0x00000009)
2315#define XA_RDSPROGRAMMETYPE_RBDSPTY_COUNTRY \
2316    ((XAuint32) 0x0000000A)
2317#define XA_RDSPROGRAMMETYPE_RBDSPTY_OLDIES \
2318    ((XAuint32) 0x0000000B)
2319#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFT \
2320    ((XAuint32) 0x0000000C)
2321#define XA_RDSPROGRAMMETYPE_RBDSPTY_NOSTALGIA \
2322    ((XAuint32) 0x0000000D)
2323#define XA_RDSPROGRAMMETYPE_RBDSPTY_JAZZ \
2324    ((XAuint32) 0x0000000E)
2325#define XA_RDSPROGRAMMETYPE_RBDSPTY_CLASSICAL \
2326    ((XAuint32) 0x0000000F)
2327#define XA_RDSPROGRAMMETYPE_RBDSPTY_RHYTHMANDBLUES \
2328    ((XAuint32) 0x00000010)
2329#define XA_RDSPROGRAMMETYPE_RBDSPTY_SOFTRHYTHMANDBLUES \
2330    ((XAuint32) 0x00000011)
2331#define XA_RDSPROGRAMMETYPE_RBDSPTY_LANGUAGE \
2332    ((XAuint32) 0x00000012)
2333#define XA_RDSPROGRAMMETYPE_RBDSPTY_RELIGIOUSMUSIC \
2334    ((XAuint32) 0x00000013)
2335#define XA_RDSPROGRAMMETYPE_RBDSPTY_RELIGIOUSTALK \
2336    ((XAuint32) 0x00000014)
2337#define XA_RDSPROGRAMMETYPE_RBDSPTY_PERSONALITY \
2338    ((XAuint32) 0x00000015)
2339#define XA_RDSPROGRAMMETYPE_RBDSPTY_PUBLIC \
2340    ((XAuint32) 0x00000016)
2341#define XA_RDSPROGRAMMETYPE_RBDSPTY_COLLEGE \
2342    ((XAuint32) 0x00000017)
2343#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED1 \
2344    ((XAuint32) 0x00000018)
2345#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED2 \
2346    ((XAuint32) 0x00000019)
2347#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED3 \
2348    ((XAuint32) 0x0000001A)
2349#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED4 \
2350    ((XAuint32) 0x0000001B)
2351#define XA_RDSPROGRAMMETYPE_RBDSPTY_UNASSIGNED5 \
2352    ((XAuint32) 0x0000001C)
2353#define XA_RDSPROGRAMMETYPE_RBDSPTY_WEATHER \
2354    ((XAuint32) 0x0000001D)
2355#define XA_RDSPROGRAMMETYPE_RBDSPTY_EMERGENCYTEST \
2356    ((XAuint32) 0x0000001E)
2357#define XA_RDSPROGRAMMETYPE_RBDSPTY_EMERGENCY \
2358    ((XAuint32) 0x0000001F)
2359
2360#define XA_RDSRTPLUS_ITEMTITLE              ((XAuint8) 0x01)
2361#define XA_RDSRTPLUS_ITEMALBUM              ((XAuint8) 0x02)
2362#define XA_RDSRTPLUS_ITEMTRACKNUMBER        ((XAuint8) 0x03)
2363#define XA_RDSRTPLUS_ITEMARTIST             ((XAuint8) 0x04)
2364#define XA_RDSRTPLUS_ITEMCOMPOSITION        ((XAuint8) 0x05)
2365#define XA_RDSRTPLUS_ITEMMOVEMENT           ((XAuint8) 0x06)
2366#define XA_RDSRTPLUS_ITEMCONDUCTOR          ((XAuint8) 0x07)
2367#define XA_RDSRTPLUS_ITEMCOMPOSER           ((XAuint8) 0x08)
2368#define XA_RDSRTPLUS_ITEMBAND               ((XAuint8) 0x09)
2369#define XA_RDSRTPLUS_ITEMCOMMENT            ((XAuint8) 0x0A)
2370#define XA_RDSRTPLUS_ITEMGENRE              ((XAuint8) 0x0B)
2371#define XA_RDSRTPLUS_INFONEWS               ((XAuint8) 0x0C)
2372#define XA_RDSRTPLUS_INFONEWSLOCAL          ((XAuint8) 0x0D)
2373#define XA_RDSRTPLUS_INFOSTOCKMARKET        ((XAuint8) 0x0E)
2374#define XA_RDSRTPLUS_INFOSPORT              ((XAuint8) 0x0F)
2375#define XA_RDSRTPLUS_INFOLOTTERY            ((XAuint8) 0x10)
2376#define XA_RDSRTPLUS_INFOHOROSCOPE          ((XAuint8) 0x11)
2377#define XA_RDSRTPLUS_INFODAILYDIVERSION     ((XAuint8) 0x12)
2378#define XA_RDSRTPLUS_INFOHEALTH             ((XAuint8) 0x13)
2379#define XA_RDSRTPLUS_INFOEVENT              ((XAuint8) 0x14)
2380#define XA_RDSRTPLUS_INFOSZENE              ((XAuint8) 0x15)
2381#define XA_RDSRTPLUS_INFOCINEMA             ((XAuint8) 0x16)
2382#define XA_RDSRTPLUS_INFOTV                 ((XAuint8) 0x17)
2383#define XA_RDSRTPLUS_INFODATETIME           ((XAuint8) 0x18)
2384#define XA_RDSRTPLUS_INFOWEATHER            ((XAuint8) 0x19)
2385#define XA_RDSRTPLUS_INFOTRAFFIC            ((XAuint8) 0x1A)
2386#define XA_RDSRTPLUS_INFOALARM              ((XAuint8) 0x1B)
2387#define XA_RDSRTPLUS_INFOADVISERTISEMENT    ((XAuint8) 0x1C)
2388#define XA_RDSRTPLUS_INFOURL                ((XAuint8) 0x1D)
2389#define XA_RDSRTPLUS_INFOOTHER              ((XAuint8) 0x1E)
2390#define XA_RDSRTPLUS_STATIONNAMESHORT       ((XAuint8) 0x1F)
2391#define XA_RDSRTPLUS_STATIONNAMELONG        ((XAuint8) 0x20)
2392#define XA_RDSRTPLUS_PROGRAMNOW             ((XAuint8) 0x21)
2393#define XA_RDSRTPLUS_PROGRAMNEXT            ((XAuint8) 0x22)
2394#define XA_RDSRTPLUS_PROGRAMPART            ((XAuint8) 0x23)
2395#define XA_RDSRTPLUS_PROGRAMHOST            ((XAuint8) 0x24)
2396#define XA_RDSRTPLUS_PROFRAMEDITORIALSTAFF  ((XAuint8) 0x25)
2397#define XA_RDSRTPLUS_PROGRAMFREQUENCY       ((XAuint8) 0x26)
2398#define XA_RDSRTPLUS_PROGRAMHOMEPAGE        ((XAuint8) 0x27)
2399#define XA_RDSRTPLUS_PROGRAMSUBCHANNEL      ((XAuint8) 0x28)
2400#define XA_RDSRTPLUS_PHONEHOTLINE           ((XAuint8) 0x29)
2401#define XA_RDSRTPLUS_PHONESTUDIO            ((XAuint8) 0x2A)
2402#define XA_RDSRTPLUS_PHONEOTHER             ((XAuint8) 0x2B)
2403#define XA_RDSRTPLUS_SMSSTUDIO              ((XAuint8) 0x2C)
2404#define XA_RDSRTPLUS_SMSOTHER               ((XAuint8) 0x2D)
2405#define XA_RDSRTPLUS_EMAILHOTLINE           ((XAuint8) 0x2E)
2406#define XA_RDSRTPLUS_EMAILSTUDIO            ((XAuint8) 0x2F)
2407#define XA_RDSRTPLUS_EMAILOTHER             ((XAuint8) 0x30)
2408#define XA_RDSRTPLUS_MMSOTHER               ((XAuint8) 0x31)
2409#define XA_RDSRTPLUS_CHAT                   ((XAuint8) 0x32)
2410#define XA_RDSRTPLUS_CHATCENTER             ((XAuint8) 0x33)
2411#define XA_RDSRTPLUS_VOTEQUESTION           ((XAuint8) 0x34)
2412#define XA_RDSRTPLUS_VOTECENTER             ((XAuint8) 0x35)
2413#define XA_RDSRTPLUS_OPENCLASS45            ((XAuint8) 0x36)
2414#define XA_RDSRTPLUS_OPENCLASS55            ((XAuint8) 0x37)
2415#define XA_RDSRTPLUS_OPENCLASS56            ((XAuint8) 0x38)
2416#define XA_RDSRTPLUS_OPENCLASS57            ((XAuint8) 0x39)
2417#define XA_RDSRTPLUS_OPENCLASS58            ((XAuint8) 0x3A)
2418#define XA_RDSRTPLUS_PLACE                  ((XAuint8) 0x3B)
2419#define XA_RDSRTPLUS_APPOINTMENT            ((XAuint8) 0x3C)
2420#define XA_RDSRTPLUS_IDENTIFIER             ((XAuint8) 0x3D)
2421#define XA_RDSRTPLUS_PURCHASE               ((XAuint8) 0x3E)
2422#define XA_RDSRTPLUS_GETDATA                ((XAuint8) 0x3F)
2423
2424XA_API extern const XAInterfaceID XA_IID_RDS;
2425
2426struct XARDSItf_;
2427typedef const struct XARDSItf_ * const * XARDSItf;
2428
2429typedef void (XAAPIENTRY * xaGetODAGroupCallback) (
2430    XARadioItf caller,
2431    void * pContext,
2432    XAboolean success,
2433    XAint16 group,
2434    XAuint16 message
2435);
2436
2437typedef void (XAAPIENTRY * xaNewODADataCallback) (
2438    XARDSItf caller,
2439    void * pContext,
2440    XAint16 group,
2441    XAuint64 data
2442);
2443
2444typedef void (XAAPIENTRY * xaRDSCallback) (
2445    XARDSItf caller,
2446    void * pContext,
2447    XAuint16 event,
2448    XAuint8 eventData
2449);
2450
2451struct XARDSItf_ {
2452    XAresult (*QueryRDSSignal) (
2453        XARDSItf self,
2454        XAboolean * isSignal
2455    );
2456    XAresult (*GetProgrammeServiceName) (
2457        XARDSItf self,
2458        XAchar * ps
2459    );
2460    XAresult (*GetRadioText) (
2461        XARDSItf self,
2462        XAchar * rt
2463    );
2464    XAresult (*GetRadioTextPlus) (
2465        XARDSItf self,
2466        XAuint8 contentType,
2467        XAchar * informationElement,
2468        XAchar * descriptor,
2469        XAuint8 * descriptorContentType
2470    );
2471    XAresult (*GetProgrammeType) (
2472        XARDSItf self,
2473        XAuint32 * pty
2474    );
2475    XAresult (*GetProgrammeTypeString) (
2476        XARDSItf self,
2477        XAboolean isLengthMax16,
2478        XAchar * pty
2479    );
2480    XAresult (*GetProgrammeIdentificationCode) (
2481        XARDSItf self,
2482        XAint16 * pi
2483    );
2484    XAresult (*GetClockTime) (
2485        XARDSItf self,
2486        XAtime * dateAndTime
2487    );
2488    XAresult (*GetTrafficAnnouncement) (
2489        XARDSItf self,
2490        XAboolean * ta
2491    );
2492    XAresult (*GetTrafficProgramme) (
2493        XARDSItf self,
2494        XAboolean * tp
2495    );
2496    XAresult (*SeekByProgrammeType) (
2497        XARDSItf self,
2498        XAuint32 pty,
2499        XAboolean upwards
2500    );
2501    XAresult (*SeekTrafficAnnouncement) (
2502        XARDSItf self,
2503        XAboolean upwards
2504    );
2505    XAresult (*SeekTrafficProgramme) (
2506        XARDSItf self,
2507        XAboolean upwards
2508    );
2509    XAresult (*SetAutomaticSwitching) (
2510        XARDSItf self,
2511        XAboolean automatic
2512    );
2513    XAresult (*GetAutomaticSwitching) (
2514        XARDSItf self,
2515        XAboolean * automatic
2516    );
2517    XAresult (*SetAutomaticTrafficAnnouncement) (
2518        XARDSItf self,
2519        XAboolean automatic
2520    );
2521    XAresult (*GetAutomaticTrafficAnnouncement) (
2522        XARDSItf self,
2523        XAboolean * automatic
2524    );
2525    XAresult (*GetODAGroup) (
2526        XARDSItf self,
2527        XAuint16 AID,
2528        xaGetODAGroupCallback callback,
2529        void * pContext
2530    );
2531    XAresult (*SubscribeODAGroup) (
2532        XARDSItf self,
2533        XAint16 group,
2534        XAboolean useErrorCorrection
2535    );
2536    XAresult (*UnsubscribeODAGroup) (
2537        XARDSItf self,
2538        XAint16 group
2539    );
2540    XAresult (*ListODAGroupSubscriptions) (
2541        XARDSItf self,
2542        XAint16* pGroups,
2543        XAuint32* pLength
2544    );
2545    XAresult (*RegisterRDSCallback) (
2546        XARDSItf self,
2547        xaRDSCallback callback,
2548        void * pContext
2549    );
2550    XAresult (*RegisterODADataCallback) (
2551        XARDSItf self,
2552        xaNewODADataCallback callback,
2553        void * pContext
2554    );
2555};
2556
2557/* VIBRA */
2558
2559XA_API extern const XAInterfaceID XA_IID_VIBRA;
2560
2561struct XAVibraItf_;
2562typedef const struct XAVibraItf_ * const * XAVibraItf;
2563
2564struct XAVibraItf_ {
2565    XAresult (*Vibrate) (
2566        XAVibraItf self,
2567        XAboolean vibrate
2568    );
2569    XAresult (*IsVibrating) (
2570        XAVibraItf self,
2571        XAboolean * pVibrating
2572    );
2573    XAresult (*SetFrequency) (
2574        XAVibraItf self,
2575        XAmilliHertz frequency
2576    );
2577    XAresult (*GetFrequency) (
2578        XAVibraItf self,
2579        XAmilliHertz * pFrequency
2580    );
2581    XAresult (*SetIntensity) (
2582        XAVibraItf self,
2583        XApermille intensity
2584    );
2585    XAresult (*GetIntensity) (
2586        XAVibraItf self,
2587        XApermille * pIntensity
2588    );
2589};
2590
2591/* LED ARRAY */
2592
2593typedef struct XAHSL_ {
2594    XAmillidegree hue;
2595    XApermille saturation;
2596    XApermille lightness;
2597} XAHSL;
2598
2599XA_API extern const XAInterfaceID XA_IID_LED;
2600
2601struct XALEDArrayItf_;
2602typedef const struct XALEDArrayItf_ * const * XALEDArrayItf;
2603
2604struct XALEDArrayItf_ {
2605    XAresult (*ActivateLEDArray) (
2606        XALEDArrayItf self,
2607        XAuint32 lightMask
2608    );
2609    XAresult (*IsLEDArrayActivated) (
2610        XALEDArrayItf self,
2611        XAuint32 * pLightMask
2612    );
2613    XAresult (*SetColor) (
2614        XALEDArrayItf self,
2615        XAuint8 index,
2616        const XAHSL * pColor
2617    );
2618    XAresult (*GetColor) (
2619        XALEDArrayItf self,
2620        XAuint8 index,
2621        XAHSL * pColor
2622    );
2623};
2624
2625
2626
2627  /*****************************************************************/
2628  /* CODEC RELATED INTERFACES, STRUCTS AND DEFINES                 */
2629  /*****************************************************************/
2630
2631/* AUDIO ENCODER AND AUDIO ENCODER/DECODER CAPABILITIES */
2632
2633#define XA_RATECONTROLMODE_CONSTANTBITRATE  ((XAuint32) 0x00000001)
2634#define XA_RATECONTROLMODE_VARIABLEBITRATE  ((XAuint32) 0x00000002)
2635
2636#define XA_AUDIOCODEC_PCM                   ((XAuint32) 0x00000001)
2637#define XA_AUDIOCODEC_MP3                   ((XAuint32) 0x00000002)
2638#define XA_AUDIOCODEC_AMR                   ((XAuint32) 0x00000003)
2639#define XA_AUDIOCODEC_AMRWB                 ((XAuint32) 0x00000004)
2640#define XA_AUDIOCODEC_AMRWBPLUS             ((XAuint32) 0x00000005)
2641#define XA_AUDIOCODEC_AAC                   ((XAuint32) 0x00000006)
2642#define XA_AUDIOCODEC_WMA                   ((XAuint32) 0x00000007)
2643#define XA_AUDIOCODEC_REAL                  ((XAuint32) 0x00000008)
2644#define XA_AUDIOCODEC_VORBIS                ((XAuint32) 0x00000009)
2645
2646#define XA_AUDIOPROFILE_PCM                 ((XAuint32) 0x00000001)
2647
2648#define XA_AUDIOPROFILE_MPEG1_L3            ((XAuint32) 0x00000001)
2649#define XA_AUDIOPROFILE_MPEG2_L3            ((XAuint32) 0x00000002)
2650#define XA_AUDIOPROFILE_MPEG25_L3           ((XAuint32) 0x00000003)
2651
2652#define XA_AUDIOCHANMODE_MP3_MONO           ((XAuint32) 0x00000001)
2653#define XA_AUDIOCHANMODE_MP3_STEREO         ((XAuint32) 0x00000002)
2654#define XA_AUDIOCHANMODE_MP3_JOINTSTEREO    ((XAuint32) 0x00000003)
2655#define XA_AUDIOCHANMODE_MP3_DUAL           ((XAuint32) 0x00000004)
2656
2657#define XA_AUDIOPROFILE_AMR                 ((XAuint32) 0x00000001)
2658
2659#define XA_AUDIOSTREAMFORMAT_CONFORMANCE    ((XAuint32) 0x00000001)
2660#define XA_AUDIOSTREAMFORMAT_IF1            ((XAuint32) 0x00000002)
2661#define XA_AUDIOSTREAMFORMAT_IF2            ((XAuint32) 0x00000003)
2662#define XA_AUDIOSTREAMFORMAT_FSF            ((XAuint32) 0x00000004)
2663#define XA_AUDIOSTREAMFORMAT_RTPPAYLOAD     ((XAuint32) 0x00000005)
2664#define XA_AUDIOSTREAMFORMAT_ITU            ((XAuint32) 0x00000006)
2665
2666#define XA_AUDIOPROFILE_AMRWB               ((XAuint32) 0x00000001)
2667
2668#define XA_AUDIOPROFILE_AMRWBPLUS           ((XAuint32) 0x00000001)
2669
2670#define XA_AUDIOPROFILE_AAC_AAC             ((XAuint32) 0x00000001)
2671
2672#define XA_AUDIOMODE_AAC_MAIN               ((XAuint32) 0x00000001)
2673#define XA_AUDIOMODE_AAC_LC                 ((XAuint32) 0x00000002)
2674#define XA_AUDIOMODE_AAC_SSR                ((XAuint32) 0x00000003)
2675#define XA_AUDIOMODE_AAC_LTP                ((XAuint32) 0x00000004)
2676#define XA_AUDIOMODE_AAC_HE                 ((XAuint32) 0x00000005)
2677#define XA_AUDIOMODE_AAC_SCALABLE           ((XAuint32) 0x00000006)
2678#define XA_AUDIOMODE_AAC_ERLC               ((XAuint32) 0x00000007)
2679#define XA_AUDIOMODE_AAC_LD                 ((XAuint32) 0x00000008)
2680#define XA_AUDIOMODE_AAC_HE_PS              ((XAuint32) 0x00000009)
2681#define XA_AUDIOMODE_AAC_HE_MPS             ((XAuint32) 0x0000000A)
2682
2683#define XA_AUDIOSTREAMFORMAT_MP2ADTS        ((XAuint32) 0x00000001)
2684#define XA_AUDIOSTREAMFORMAT_MP4ADTS        ((XAuint32) 0x00000002)
2685#define XA_AUDIOSTREAMFORMAT_MP4LOAS        ((XAuint32) 0x00000003)
2686#define XA_AUDIOSTREAMFORMAT_MP4LATM        ((XAuint32) 0x00000004)
2687#define XA_AUDIOSTREAMFORMAT_ADIF           ((XAuint32) 0x00000005)
2688#define XA_AUDIOSTREAMFORMAT_MP4FF          ((XAuint32) 0x00000006)
2689#define XA_AUDIOSTREAMFORMAT_RAW            ((XAuint32) 0x00000007)
2690
2691#define XA_AUDIOPROFILE_WMA7                ((XAuint32) 0x00000001)
2692#define XA_AUDIOPROFILE_WMA8                ((XAuint32) 0x00000002)
2693#define XA_AUDIOPROFILE_WMA9                ((XAuint32) 0x00000003)
2694#define XA_AUDIOPROFILE_WMA10               ((XAuint32) 0x00000004)
2695
2696#define XA_AUDIOMODE_WMA_LEVEL1             ((XAuint32) 0x00000001)
2697#define XA_AUDIOMODE_WMA_LEVEL2             ((XAuint32) 0x00000002)
2698#define XA_AUDIOMODE_WMA_LEVEL3             ((XAuint32) 0x00000003)
2699#define XA_AUDIOMODE_WMA_LEVEL4             ((XAuint32) 0x00000004)
2700#define XA_AUDIOMODE_WMAPRO_LEVELM0         ((XAuint32) 0x00000005)
2701#define XA_AUDIOMODE_WMAPRO_LEVELM1         ((XAuint32) 0x00000006)
2702#define XA_AUDIOMODE_WMAPRO_LEVELM2         ((XAuint32) 0x00000007)
2703#define XA_AUDIOMODE_WMAPRO_LEVELM3         ((XAuint32) 0x00000008)
2704
2705#define XA_AUDIOPROFILE_REALAUDIO           ((XAuint32) 0x00000001)
2706
2707#define XA_AUDIOMODE_REALAUDIO_G2           ((XAuint32) 0x00000001)
2708#define XA_AUDIOMODE_REALAUDIO_8            ((XAuint32) 0x00000002)
2709#define XA_AUDIOMODE_REALAUDIO_10           ((XAuint32) 0x00000003)
2710#define XA_AUDIOMODE_REALAUDIO_SURROUND     ((XAuint32) 0x00000004)
2711
2712#define XA_AUDIOPROFILE_VORBIS              ((XAuint32) 0x00000001)
2713
2714#define XA_AUDIOMODE_VORBIS                 ((XAuint32) 0x00000001)
2715
2716
2717typedef struct XAAudioCodecDescriptor_ {
2718    XAuint32 maxChannels;
2719    XAuint32 minBitsPerSample;
2720    XAuint32 maxBitsPerSample;
2721    XAmilliHertz minSampleRate;
2722    XAmilliHertz maxSampleRate;
2723    XAboolean isFreqRangeContinuous;
2724    XAmilliHertz * pSampleRatesSupported;
2725    XAuint32 numSampleRatesSupported;
2726    XAuint32 minBitRate;
2727    XAuint32 maxBitRate;
2728    XAboolean isBitrateRangeContinuous;
2729    XAuint32 * pBitratesSupported;
2730    XAuint32 numBitratesSupported;
2731    XAuint32 profileSetting;
2732    XAuint32 modeSetting;
2733} XAAudioCodecDescriptor;
2734
2735typedef struct XAAudioEncoderSettings_ {
2736    XAuint32 encoderId;
2737    XAuint32 channelsIn;
2738    XAuint32 channelsOut;
2739    XAmilliHertz sampleRate;
2740    XAuint32 bitRate;
2741    XAuint32 bitsPerSample;
2742    XAuint32 rateControl;
2743    XAuint32 profileSetting;
2744    XAuint32 levelSetting;
2745    XAuint32 channelMode;
2746    XAuint32 streamFormat;
2747    XAuint32 encodeOptions;
2748    XAuint32 blockAlignment;
2749} XAAudioEncoderSettings;
2750
2751XA_API extern const XAInterfaceID XA_IID_AUDIODECODERCAPABILITIES;
2752
2753struct XAAudioDecoderCapabilitiesItf_;
2754typedef const struct XAAudioDecoderCapabilitiesItf_
2755    * const * XAAudioDecoderCapabilitiesItf;
2756
2757struct XAAudioDecoderCapabilitiesItf_ {
2758    XAresult (*GetAudioDecoders) (
2759        XAAudioDecoderCapabilitiesItf self,
2760        XAuint32 * pNumDecoders,
2761        XAuint32 * pDecoderIds
2762    );
2763    XAresult (*GetAudioDecoderCapabilities) (
2764        XAAudioDecoderCapabilitiesItf self,
2765        XAuint32 decoderId,
2766        XAuint32 * pIndex,
2767        XAAudioCodecDescriptor * pDescriptor
2768    );
2769};
2770
2771XA_API extern const XAInterfaceID XA_IID_AUDIOENCODER;
2772
2773struct XAAudioEncoderItf_;
2774typedef const struct XAAudioEncoderItf_ * const * XAAudioEncoderItf;
2775
2776struct XAAudioEncoderItf_ {
2777    XAresult (*SetEncoderSettings) (
2778        XAAudioEncoderItf self,
2779        XAAudioEncoderSettings * pSettings
2780    );
2781    XAresult (*GetEncoderSettings) (
2782        XAAudioEncoderItf self,
2783        XAAudioEncoderSettings * pSettings
2784    );
2785};
2786
2787XA_API extern const XAInterfaceID XA_IID_AUDIOENCODERCAPABILITIES;
2788
2789struct XAAudioEncoderCapabilitiesItf_;
2790typedef const struct XAAudioEncoderCapabilitiesItf_
2791    * const * XAAudioEncoderCapabilitiesItf;
2792
2793struct XAAudioEncoderCapabilitiesItf_ {
2794    XAresult (*GetAudioEncoders) (
2795        XAAudioEncoderCapabilitiesItf self,
2796        XAuint32 * pNumEncoders,
2797        XAuint32 * pEncoderIds
2798    );
2799    XAresult (*GetAudioEncoderCapabilities) (
2800        XAAudioEncoderCapabilitiesItf self,
2801        XAuint32 encoderId,
2802        XAuint32 * pIndex,
2803        XAAudioCodecDescriptor * pDescriptor
2804    );
2805};
2806
2807/* IMAGE ENCODER AND IMAGE ENCODER/DECODER CAPABILITIES */
2808
2809#define XA_IMAGECODEC_JPEG              ((XAuint32) 0x00000001)
2810#define XA_IMAGECODEC_GIF               ((XAuint32) 0x00000002)
2811#define XA_IMAGECODEC_BMP               ((XAuint32) 0x00000003)
2812#define XA_IMAGECODEC_PNG               ((XAuint32) 0x00000004)
2813#define XA_IMAGECODEC_TIFF              ((XAuint32) 0x00000005)
2814#define XA_IMAGECODEC_RAW               ((XAuint32) 0x00000006)
2815
2816typedef struct XAImageCodecDescriptor_ {
2817    XAuint32 codecId;
2818    XAuint32 maxWidth;
2819    XAuint32 maxHeight;
2820} XAImageCodecDescriptor;
2821
2822typedef struct XAImageSettings_ {
2823    XAuint32 encoderId;
2824    XAuint32 width;
2825    XAuint32 height;
2826    XApermille compressionLevel;
2827    XAuint32 colorFormat;
2828} XAImageSettings;
2829
2830XA_API extern const XAInterfaceID XA_IID_IMAGEENCODERCAPABILITIES;
2831
2832struct XAImageEncoderCapabilitiesItf_;
2833typedef const struct XAImageEncoderCapabilitiesItf_
2834    * const * XAImageEncoderCapabilitiesItf;
2835
2836struct XAImageEncoderCapabilitiesItf_ {
2837    XAresult (*GetImageEncoderCapabilities) (
2838        XAImageEncoderCapabilitiesItf self,
2839        XAuint32 * pEncoderId,
2840        XAImageCodecDescriptor * pDescriptor
2841    );
2842    XAresult (*QueryColorFormats) (
2843        const XAImageEncoderCapabilitiesItf self,
2844        XAuint32 * pIndex,
2845        XAuint32 * pColorFormat
2846    );
2847};
2848
2849XA_API extern const XAInterfaceID XA_IID_IMAGEDECODERCAPABILITIES;
2850
2851struct XAImageDecoderCapabilitiesItf_;
2852typedef const struct XAImageDecoderCapabilitiesItf_
2853    * const * XAImageDecoderCapabilitiesItf;
2854
2855struct XAImageDecoderCapabilitiesItf_ {
2856    XAresult (*GetImageDecoderCapabilities) (
2857        XAImageDecoderCapabilitiesItf self,
2858        XAuint32 * pDecoderId,
2859        XAImageCodecDescriptor * pDescriptor
2860    );
2861    XAresult (*QueryColorFormats) (
2862        const XAImageDecoderCapabilitiesItf self,
2863        XAuint32 * pIndex,
2864        XAuint32 * pColorFormat
2865    );
2866};
2867
2868XA_API extern const XAInterfaceID XA_IID_IMAGEENCODER;
2869
2870struct XAImageEncoderItf_;
2871typedef const struct XAImageEncoderItf_ * const * XAImageEncoderItf;
2872
2873struct XAImageEncoderItf_ {
2874    XAresult (*SetImageSettings) (
2875        XAImageEncoderItf self,
2876        const XAImageSettings * pSettings
2877    );
2878    XAresult (*GetImageSettings) (
2879        XAImageEncoderItf self,
2880        XAImageSettings * pSettings
2881    );
2882    XAresult (*GetSizeEstimate) (
2883        XAImageEncoderItf self,
2884        XAuint32 * pSize
2885    );
2886};
2887
2888/* VIDEO ENCODER AND VIDEO ENCODER/DECODER CAPABILITIES */
2889
2890#define XA_VIDEOCODEC_MPEG2                     ((XAuint32) 0x00000001)
2891#define XA_VIDEOCODEC_H263                      ((XAuint32) 0x00000002)
2892#define XA_VIDEOCODEC_MPEG4                     ((XAuint32) 0x00000003)
2893#define XA_VIDEOCODEC_AVC                       ((XAuint32) 0x00000004)
2894#define XA_VIDEOCODEC_VC1                       ((XAuint32) 0x00000005)
2895
2896#define XA_VIDEOPROFILE_MPEG2_SIMPLE            ((XAuint32) 0x00000001)
2897#define XA_VIDEOPROFILE_MPEG2_MAIN              ((XAuint32) 0x00000002)
2898#define XA_VIDEOPROFILE_MPEG2_422               ((XAuint32) 0x00000003)
2899#define XA_VIDEOPROFILE_MPEG2_SNR               ((XAuint32) 0x00000004)
2900#define XA_VIDEOPROFILE_MPEG2_SPATIAL           ((XAuint32) 0x00000005)
2901#define XA_VIDEOPROFILE_MPEG2_HIGH              ((XAuint32) 0x00000006)
2902
2903#define XA_VIDEOLEVEL_MPEG2_LL                  ((XAuint32) 0x00000001)
2904#define XA_VIDEOLEVEL_MPEG2_ML                  ((XAuint32) 0x00000002)
2905#define XA_VIDEOLEVEL_MPEG2_H14                 ((XAuint32) 0x00000003)
2906#define XA_VIDEOLEVEL_MPEG2_HL                  ((XAuint32) 0x00000004)
2907
2908#define XA_VIDEOPROFILE_H263_BASELINE           ((XAuint32) 0x00000001)
2909#define XA_VIDEOPROFILE_H263_H320CODING         ((XAuint32) 0x00000002)
2910#define XA_VIDEOPROFILE_H263_BACKWARDCOMPATIBLE ((XAuint32) 0x00000003)
2911#define XA_VIDEOPROFILE_H263_ISWV2              ((XAuint32) 0x00000004)
2912#define XA_VIDEOPROFILE_H263_ISWV3              ((XAuint32) 0x00000005)
2913#define XA_VIDEOPROFILE_H263_HIGHCOMPRESSION    ((XAuint32) 0x00000006)
2914#define XA_VIDEOPROFILE_H263_INTERNET           ((XAuint32) 0x00000007)
2915#define XA_VIDEOPROFILE_H263_INTERLACE          ((XAuint32) 0x00000008)
2916#define XA_VIDEOPROFILE_H263_HIGHLATENCY        ((XAuint32) 0x00000009)
2917
2918#define XA_VIDEOLEVEL_H263_10                   ((XAuint32) 0x00000001)
2919#define XA_VIDEOLEVEL_H263_20                   ((XAuint32) 0x00000002)
2920#define XA_VIDEOLEVEL_H263_30                   ((XAuint32) 0x00000003)
2921#define XA_VIDEOLEVEL_H263_40                   ((XAuint32) 0x00000004)
2922#define XA_VIDEOLEVEL_H263_45                   ((XAuint32) 0x00000005)
2923#define XA_VIDEOLEVEL_H263_50                   ((XAuint32) 0x00000006)
2924#define XA_VIDEOLEVEL_H263_60                   ((XAuint32) 0x00000007)
2925#define XA_VIDEOLEVEL_H263_70                   ((XAuint32) 0x00000008)
2926
2927#define XA_VIDEOPROFILE_MPEG4_SIMPLE            ((XAuint32) 0x00000001)
2928#define XA_VIDEOPROFILE_MPEG4_SIMPLESCALABLE    ((XAuint32) 0x00000002)
2929#define XA_VIDEOPROFILE_MPEG4_CORE              ((XAuint32) 0x00000003)
2930#define XA_VIDEOPROFILE_MPEG4_MAIN              ((XAuint32) 0x00000004)
2931#define XA_VIDEOPROFILE_MPEG4_NBIT              ((XAuint32) 0x00000005)
2932#define XA_VIDEOPROFILE_MPEG4_SCALABLETEXTURE   ((XAuint32) 0x00000006)
2933#define XA_VIDEOPROFILE_MPEG4_SIMPLEFACE        ((XAuint32) 0x00000007)
2934#define XA_VIDEOPROFILE_MPEG4_SIMPLEFBA         ((XAuint32) 0x00000008)
2935#define XA_VIDEOPROFILE_MPEG4_BASICANIMATED     ((XAuint32) 0x00000009)
2936#define XA_VIDEOPROFILE_MPEG4_HYBRID            ((XAuint32) 0x0000000A)
2937#define XA_VIDEOPROFILE_MPEG4_ADVANCEDREALTIME  ((XAuint32) 0x0000000B)
2938#define XA_VIDEOPROFILE_MPEG4_CORESCALABLE      ((XAuint32) 0x0000000C)
2939#define XA_VIDEOPROFILE_MPEG4_ADVANCEDCODING    ((XAuint32) 0x0000000D)
2940#define XA_VIDEOPROFILE_MPEG4_ADVANCEDCORE      ((XAuint32) 0x0000000E)
2941#define XA_VIDEOPROFILE_MPEG4_ADVANCEDSCALABLE  ((XAuint32) 0x0000000F)
2942
2943#define XA_VIDEOLEVEL_MPEG4_0                   ((XAuint32) 0x00000001)
2944#define XA_VIDEOLEVEL_MPEG4_0b                  ((XAuint32) 0x00000002)
2945#define XA_VIDEOLEVEL_MPEG4_1                   ((XAuint32) 0x00000003)
2946#define XA_VIDEOLEVEL_MPEG4_2                   ((XAuint32) 0x00000004)
2947#define XA_VIDEOLEVEL_MPEG4_3                   ((XAuint32) 0x00000005)
2948#define XA_VIDEOLEVEL_MPEG4_4                   ((XAuint32) 0x00000006)
2949#define XA_VIDEOLEVEL_MPEG4_4a                  ((XAuint32) 0x00000007)
2950#define XA_VIDEOLEVEL_MPEG4_5                   ((XAuint32) 0x00000008)
2951
2952#define XA_VIDEOPROFILE_AVC_BASELINE            ((XAuint32) 0x00000001)
2953#define XA_VIDEOPROFILE_AVC_MAIN                ((XAuint32) 0x00000002)
2954#define XA_VIDEOPROFILE_AVC_EXTENDED            ((XAuint32) 0x00000003)
2955#define XA_VIDEOPROFILE_AVC_HIGH                ((XAuint32) 0x00000004)
2956#define XA_VIDEOPROFILE_AVC_HIGH10              ((XAuint32) 0x00000005)
2957#define XA_VIDEOPROFILE_AVC_HIGH422             ((XAuint32) 0x00000006)
2958#define XA_VIDEOPROFILE_AVC_HIGH444             ((XAuint32) 0x00000007)
2959
2960#define XA_VIDEOLEVEL_AVC_1                     ((XAuint32) 0x00000001)
2961#define XA_VIDEOLEVEL_AVC_1B                    ((XAuint32) 0x00000002)
2962#define XA_VIDEOLEVEL_AVC_11                    ((XAuint32) 0x00000003)
2963#define XA_VIDEOLEVEL_AVC_12                    ((XAuint32) 0x00000004)
2964#define XA_VIDEOLEVEL_AVC_13                    ((XAuint32) 0x00000005)
2965#define XA_VIDEOLEVEL_AVC_2                     ((XAuint32) 0x00000006)
2966#define XA_VIDEOLEVEL_AVC_21                    ((XAuint32) 0x00000007)
2967#define XA_VIDEOLEVEL_AVC_22                    ((XAuint32) 0x00000008)
2968#define XA_VIDEOLEVEL_AVC_3                     ((XAuint32) 0x00000009)
2969#define XA_VIDEOLEVEL_AVC_31                    ((XAuint32) 0x0000000A)
2970#define XA_VIDEOLEVEL_AVC_32                    ((XAuint32) 0x0000000B)
2971#define XA_VIDEOLEVEL_AVC_4                     ((XAuint32) 0x0000000C)
2972#define XA_VIDEOLEVEL_AVC_41                    ((XAuint32) 0x0000000D)
2973#define XA_VIDEOLEVEL_AVC_42                    ((XAuint32) 0x0000000E)
2974#define XA_VIDEOLEVEL_AVC_5                     ((XAuint32) 0x0000000F)
2975#define XA_VIDEOLEVEL_AVC_51                    ((XAuint32) 0x00000010)
2976
2977#define XA_VIDEOLEVEL_VC1_SIMPLE                ((XAuint32) 0x00000001)
2978#define XA_VIDEOLEVEL_VC1_MAIN                  ((XAuint32) 0x00000002)
2979#define XA_VIDEOLEVEL_VC1_ADVANCED              ((XAuint32) 0x00000003)
2980
2981#define XA_VIDEOLEVEL_VC1_LOW                   ((XAuint32) 0x00000001)
2982#define XA_VIDEOLEVEL_VC1_MEDIUM                ((XAuint32) 0x00000002)
2983#define XA_VIDEOLEVEL_VC1_HIGH                  ((XAuint32) 0x00000003)
2984#define XA_VIDEOLEVEL_VC1_L0                    ((XAuint32) 0x00000004)
2985#define XA_VIDEOLEVEL_VC1_L1                    ((XAuint32) 0x00000005)
2986#define XA_VIDEOLEVEL_VC1_L2                    ((XAuint32) 0x00000006)
2987#define XA_VIDEOLEVEL_VC1_L3                    ((XAuint32) 0x00000007)
2988#define XA_VIDEOLEVEL_VC1_L4                    ((XAuint32) 0x00000008)
2989
2990typedef struct XAVideoCodecDescriptor_ {
2991    XAuint32 codecId;
2992    XAuint32 maxWidth;
2993    XAuint32 maxHeight;
2994    XAuint32 maxFrameRate;
2995    XAuint32 maxBitRate;
2996    XAuint32 rateControlSupported;
2997    XAuint32 profileSetting;
2998    XAuint32 levelSetting;
2999} XAVideoCodecDescriptor;
3000
3001typedef struct XAVideoSettings_ {
3002    XAuint32 encoderId;
3003    XAuint32 width;
3004    XAuint32 height;
3005    XAuint32 frameRate;
3006    XAuint32 bitRate;
3007    XAuint32 rateControl;
3008    XAuint32 profileSetting;
3009    XAuint32 levelSetting;
3010    XAuint32 keyFrameInterval;
3011} XAVideoSettings;
3012
3013XA_API extern const XAInterfaceID XA_IID_VIDEODECODERCAPABILITIES;
3014
3015struct XAVideoDecoderCapabilitiesItf_;
3016typedef const struct XAVideoDecoderCapabilitiesItf_
3017    * const * XAVideoDecoderCapabilitiesItf;
3018
3019struct XAVideoDecoderCapabilitiesItf_ {
3020    XAresult (*GetVideoDecoders) (
3021        XAVideoDecoderCapabilitiesItf self,
3022        XAuint32 * pNumDecoders,
3023        XAuint32 * pDecoderIds
3024    );
3025    XAresult (*GetVideoDecoderCapabilities) (
3026        XAVideoDecoderCapabilitiesItf self,
3027        XAuint32 decoderId,
3028        XAuint32 * pIndex,
3029        XAVideoCodecDescriptor * pDescriptor
3030    );
3031};
3032
3033XA_API extern const XAInterfaceID XA_IID_VIDEOENCODER;
3034
3035XA_API extern const XAInterfaceID XA_IID_VIDEOENCODERCAPABILITIES;
3036
3037struct XAVideoEncoderCapabilitiesItf_;
3038typedef const struct XAVideoEncoderCapabilitiesItf_
3039    * const * XAVideoEncoderCapabilitiesItf;
3040
3041struct XAVideoEncoderCapabilitiesItf_ {
3042    XAresult (*GetVideoEncoders) (
3043        XAVideoEncoderCapabilitiesItf self,
3044        XAuint32 * pNumEncoders,
3045        XAuint32 * pEncoderIds
3046    );
3047    XAresult (*GetVideoEncoderCapabilities) (
3048        XAVideoEncoderCapabilitiesItf self,
3049        XAuint32 encoderId,
3050        XAuint32 * pIndex,
3051        XAVideoCodecDescriptor * pDescriptor
3052    );
3053};
3054
3055struct XAVideoEncoderItf_;
3056typedef const struct XAVideoEncoderItf_ * const * XAVideoEncoderItf;
3057
3058struct XAVideoEncoderItf_ {
3059    XAresult (*SetVideoSettings) (
3060        XAVideoEncoderItf self,
3061        XAVideoSettings * pSettings
3062    );
3063    XAresult (*GetVideoSettings) (
3064        XAVideoEncoderItf self,
3065        XAVideoSettings * pSettings
3066    );
3067};
3068
3069/* STREAM INFORMATION */
3070
3071#define XA_DOMAINTYPE_AUDIO     0x00000001
3072#define XA_DOMAINTYPE_VIDEO     0x00000002
3073#define XA_DOMAINTYPE_IMAGE     0x00000003
3074#define XA_DOMAINTYPE_TIMEDTEXT 0x00000004
3075#define XA_DOMAINTYPE_MIDI      0x00000005
3076#define XA_DOMAINTYPE_VENDOR    0xFFFFFFFE
3077#define XA_DOMAINTYPE_UNKNOWN   0xFFFFFFFF
3078
3079#define XA_MIDIBANK_DEVICE      0x00000001
3080#define XA_MIDIBANK_CUSTOM      0x00000002
3081
3082#define XA_MIDI_UNKNOWN         0xFFFFFFFF
3083
3084#define XA_STREAMCBEVENT_PROPERTYCHANGE     ((XAuint32) 0x00000001)
3085
3086typedef struct XAMediaContainerInformation_ {
3087    XAuint32 containerType;
3088    XAmillisecond mediaDuration;
3089    XAuint32 numStreams;
3090} XAMediaContainerInformation;
3091
3092typedef struct XAVideoStreamInformation_ {
3093    XAuint32 codecId;
3094    XAuint32 width;
3095    XAuint32 height;
3096    XAuint32 frameRate;
3097    XAuint32 bitRate;
3098    XAmillisecond duration;
3099} XAVideoStreamInformation;
3100
3101typedef struct XAAudioStreamInformation_ {
3102    XAuint32 codecId;
3103    XAuint32 channels;
3104    XAmilliHertz sampleRate;
3105    XAuint32 bitRate;
3106    XAchar langCountry[16];
3107    XAmillisecond duration;
3108} XAAudioStreamInformation;
3109
3110typedef struct XAImageStreamInformation_ {
3111    XAuint32 codecId;
3112    XAuint32 width;
3113    XAuint32 height;
3114    XAmillisecond presentationDuration;
3115} XAImageStreamInformation;
3116
3117typedef struct XATimedTextStreamInformation_ {
3118    XAuint16 layer;
3119    XAuint32 width;
3120    XAuint32 height;
3121    XAuint16 tx;
3122    XAuint16 ty;
3123    XAuint32 bitrate;
3124    XAchar langCountry[16];
3125    XAmillisecond duration;
3126} XATimedTextStreamInformation;
3127
3128typedef struct XAMIDIStreamInformation_ {
3129    XAuint32 channels;
3130    XAuint32 tracks;
3131    XAuint32 bankType;
3132    XAchar langCountry[16];
3133    XAmillisecond duration;
3134} XAMIDIStreamInformation;
3135
3136typedef struct XAVendorStreamInformation_ {
3137    void *VendorStreamInfo;
3138} XAVendorStreamInformation;
3139
3140XA_API extern const XAInterfaceID XA_IID_STREAMINFORMATION;
3141
3142struct XAStreamInformationItf_;
3143typedef const struct XAStreamInformationItf_ * const * XAStreamInformationItf;
3144
3145typedef void (XAAPIENTRY * xaStreamEventChangeCallback) (
3146    XAStreamInformationItf caller,
3147    XAuint32 eventId,
3148    XAuint32 streamIndex,
3149    void * pEventData,
3150    void * pContext
3151);
3152
3153struct XAStreamInformationItf_ {
3154    XAresult (*QueryMediaContainerInformation) (
3155        XAStreamInformationItf self,
3156        XAMediaContainerInformation * info
3157    );
3158    XAresult (*QueryStreamType) (
3159        XAStreamInformationItf self,
3160        XAuint32 streamIndex,
3161        XAuint32 *domain
3162    );
3163    XAresult (*QueryStreamInformation) (
3164        XAStreamInformationItf self,
3165        XAuint32 streamIndex,
3166        void * info
3167    );
3168    XAresult (*QueryStreamName) (
3169        XAStreamInformationItf self,
3170        XAuint32 streamIndex,
3171        XAuint16 * pNameSize,
3172        XAchar * pName
3173    );
3174    XAresult (*RegisterStreamChangeCallback) (
3175        XAStreamInformationItf self,
3176        xaStreamEventChangeCallback callback,
3177        void * pContext
3178    );
3179    XAresult (*QueryActiveStreams) (
3180        XAStreamInformationItf self,
3181        XAuint32 *numStreams,
3182        XAboolean *activeStreams
3183    );
3184    XAresult (*SetActiveStream) (
3185        XAStreamInformationItf self,
3186        XAuint32   streamNum,
3187        XAboolean  active,
3188        XAboolean  commitNow
3189    );
3190};
3191
3192#ifdef __cplusplus
3193} /* extern "C" */
3194#endif
3195
3196#endif /* _OPENMAXAL_H_ */
3197