OpenMAXAL.h revision 8db0b106cdce5f5216b1535492de7930ad738aed
1/*
2 * Copyright (c) 2007-2010 The Khronos Group Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and/or associated documentation files (the
6 * "Materials "), to deal in the Materials without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sublicense, and/or sell copies of the Materials, and to
9 * permit persons to whom the Materials are furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be included
13 * in all copies or substantial portions of the Materials.
14 *
15 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
22 *
23 * OpenMAXAL.h - OpenMAX AL version 1.0.1
24 *
25 */
26
27/****************************************************************************/
28/* NOTE: This file is a standard OpenMAX AL header file and should not be   */
29/* modified in any way.                                                     */
30/****************************************************************************/
31
32#ifndef _OPENMAXAL_H_
33#define _OPENMAXAL_H_
34
35#include "OpenMAXAL_Platform.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41
42
43  /*****************************************************************/
44  /* TYPES                                                         */
45  /*****************************************************************/
46
47/* remap common types to XA types for clarity */
48typedef xa_int8_t   XAint8;   /* 8 bit signed integer    */
49typedef xa_uint8_t  XAuint8;  /* 8 bit unsigned integer  */
50typedef xa_int16_t  XAint16;  /* 16 bit signed integer   */
51typedef xa_uint16_t XAuint16; /* 16 bit unsigned integer */
52typedef xa_int32_t  XAint32;  /* 32 bit signed integer   */
53typedef xa_uint32_t XAuint32; /* 32 bit unsigned integer */
54typedef xa_uint64_t XAuint64; /* 64 bit unsigned integer */
55
56typedef XAuint32    XAboolean;
57typedef XAuint8     XAchar;
58typedef XAint16     XAmillibel;
59typedef XAuint32    XAmillisecond;
60typedef XAuint32    XAmilliHertz;
61typedef XAint32     XAmillimeter;
62typedef XAint32     XAmillidegree;
63typedef XAint16     XApermille;
64typedef XAuint32    XAmicrosecond;
65typedef XAuint64    XAtime;
66typedef XAuint32    XAresult;
67
68#define XA_BOOLEAN_FALSE                    ((XAuint32) 0x00000000)
69#define XA_BOOLEAN_TRUE                     ((XAuint32) 0x00000001)
70
71#define XA_MILLIBEL_MAX                     ((XAmillibel) 0x7FFF)
72#define XA_MILLIBEL_MIN                     ((XAmillibel) (-XA_MILLIBEL_MAX-1))
73
74#define XA_MILLIHERTZ_MAX                   ((XAmilliHertz) 0xFFFFFFFF)
75
76#define XA_MILLIMETER_MAX                   ((XAmillimeter) 0x7FFFFFFF)
77
78
79
80  /*****************************************************************/
81  /* RESULT CODES                                                  */
82  /*****************************************************************/
83
84#define XA_RESULT_SUCCESS                   ((XAuint32) 0x00000000)
85#define XA_RESULT_PRECONDITIONS_VIOLATED    ((XAuint32) 0x00000001)
86#define XA_RESULT_PARAMETER_INVALID         ((XAuint32) 0x00000002)
87#define XA_RESULT_MEMORY_FAILURE            ((XAuint32) 0x00000003)
88#define XA_RESULT_RESOURCE_ERROR            ((XAuint32) 0x00000004)
89#define XA_RESULT_RESOURCE_LOST             ((XAuint32) 0x00000005)
90#define XA_RESULT_IO_ERROR                  ((XAuint32) 0x00000006)
91#define XA_RESULT_BUFFER_INSUFFICIENT       ((XAuint32) 0x00000007)
92#define XA_RESULT_CONTENT_CORRUPTED         ((XAuint32) 0x00000008)
93#define XA_RESULT_CONTENT_UNSUPPORTED       ((XAuint32) 0x00000009)
94#define XA_RESULT_CONTENT_NOT_FOUND         ((XAuint32) 0x0000000A)
95#define XA_RESULT_PERMISSION_DENIED         ((XAuint32) 0x0000000B)
96#define XA_RESULT_FEATURE_UNSUPPORTED       ((XAuint32) 0x0000000C)
97#define XA_RESULT_INTERNAL_ERROR            ((XAuint32) 0x0000000D)
98#define XA_RESULT_UNKNOWN_ERROR             ((XAuint32) 0x0000000E)
99#define XA_RESULT_OPERATION_ABORTED         ((XAuint32) 0x0000000F)
100#define XA_RESULT_CONTROL_LOST              ((XAuint32) 0x00000010)
101
102
103
104  /*****************************************************************/
105  /* INTERFACE ID DEFINITION                                       */
106  /*****************************************************************/
107
108/* Interface ID defined as a UUID */
109typedef const struct XAInterfaceID_ {
110    XAuint32 time_low;
111    XAuint16 time_mid;
112    XAuint16 time_hi_and_version;
113    XAuint16 clock_seq;
114    XAuint8  node[6];
115} * XAInterfaceID;
116
117/* NULL Interface */
118XA_API extern const XAInterfaceID XA_IID_NULL;
119
120
121
122  /*****************************************************************/
123  /* GENERAL INTERFACES, STRUCTS AND DEFINES                       */
124  /*****************************************************************/
125
126/* OBJECT */
127
128#define XA_PRIORITY_LOWEST                      ((XAint32) (-0x7FFFFFFF-1))
129#define XA_PRIORITY_VERYLOW                     ((XAint32) -0x60000000)
130#define XA_PRIORITY_LOW                         ((XAint32) -0x40000000)
131#define XA_PRIORITY_BELOWNORMAL                 ((XAint32) -0x20000000)
132#define XA_PRIORITY_NORMAL                      ((XAint32) 0x00000000)
133#define XA_PRIORITY_ABOVENORMAL                 ((XAint32) 0x20000000)
134#define XA_PRIORITY_HIGH                        ((XAint32) 0x40000000)
135#define XA_PRIORITY_VERYHIGH                    ((XAint32) 0x60000000)
136#define XA_PRIORITY_HIGHEST                     ((XAint32) 0x7FFFFFFF)
137
138#define XA_OBJECT_EVENT_RUNTIME_ERROR           ((XAuint32) 0x00000001)
139#define XA_OBJECT_EVENT_ASYNC_TERMINATION       ((XAuint32) 0x00000002)
140#define XA_OBJECT_EVENT_RESOURCES_LOST          ((XAuint32) 0x00000003)
141#define XA_OBJECT_EVENT_RESOURCES_AVAILABLE     ((XAuint32) 0x00000004)
142#define XA_OBJECT_EVENT_ITF_CONTROL_TAKEN       ((XAuint32) 0x00000005)
143#define XA_OBJECT_EVENT_ITF_CONTROL_RETURNED    ((XAuint32) 0x00000006)
144#define XA_OBJECT_EVENT_ITF_PARAMETERS_CHANGED  ((XAuint32) 0x00000007)
145
146#define XA_OBJECT_STATE_UNREALIZED              ((XAuint32) 0x00000001)
147#define XA_OBJECT_STATE_REALIZED                ((XAuint32) 0x00000002)
148#define XA_OBJECT_STATE_SUSPENDED               ((XAuint32) 0x00000003)
149
150
151XA_API extern const XAInterfaceID XA_IID_OBJECT;
152
153struct XAObjectItf_;
154typedef const struct XAObjectItf_ * const * XAObjectItf;
155
156typedef void (XAAPIENTRY * xaObjectCallback) (
157    XAObjectItf caller,
158    const void * pContext,
159    XAuint32 event,
160    XAresult result,
161    XAuint32 param,
162    void * pInterface
163);
164
165struct XAObjectItf_ {
166    XAresult (*Realize) (
167        XAObjectItf self,
168        XAboolean async
169    );
170    XAresult (*Resume) (
171        XAObjectItf self,
172        XAboolean async
173    );
174    XAresult (*GetState) (
175        XAObjectItf self,
176        XAuint32 * pState
177    );
178    XAresult (*GetInterface) (
179        XAObjectItf self,
180        const XAInterfaceID iid,
181        void * pInterface
182    );
183    XAresult (*RegisterCallback) (
184        XAObjectItf self,
185        xaObjectCallback callback,
186        void * pContext
187    );
188    void (*AbortAsyncOperation) (
189        XAObjectItf self
190    );
191    void (*Destroy) (
192        XAObjectItf self
193    );
194    XAresult (*SetPriority) (
195        XAObjectItf self,
196        XAint32 priority,
197        XAboolean preemptable
198    );
199    XAresult (*GetPriority) (
200        XAObjectItf self,
201        XAint32 * pPriority,
202        XAboolean * pPreemptable
203    );
204    XAresult (*SetLossOfControlInterfaces) (
205        XAObjectItf self,
206        XAint16 numInterfaces,
207        XAInterfaceID * pInterfaceIDs,
208        XAboolean enabled
209    );
210};
211
212/* CONFIG EXTENSION */
213
214XA_API extern const XAInterfaceID XA_IID_CONFIGEXTENSION;
215
216struct XAConfigExtensionsItf_;
217typedef const struct XAConfigExtensionsItf_
218    * const * XAConfigExtensionsItf;
219
220struct XAConfigExtensionsItf_ {
221    XAresult (*SetConfiguration) (
222        XAConfigExtensionsItf self,
223        const XAchar * configKey,
224        XAuint32 valueSize,
225        const void * pConfigValue
226    );
227    XAresult (*GetConfiguration) (
228        XAConfigExtensionsItf self,
229        const XAchar * configKey,
230        XAuint32 * pValueSize,
231        void * pConfigValue
232    );
233};
234
235/* DYNAMIC INTERFACE MANAGEMENT */
236
237#define XA_DYNAMIC_ITF_EVENT_RUNTIME_ERROR              ((XAuint32) 0x00000001)
238#define XA_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION          ((XAuint32) 0x00000002)
239#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST             ((XAuint32) 0x00000003)
240#define XA_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY ((XAuint32) 0x00000004)
241#define XA_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE        ((XAuint32) 0x00000005)
242
243XA_API extern const XAInterfaceID XA_IID_DYNAMICINTERFACEMANAGEMENT;
244
245struct XADynamicInterfaceManagementItf_;
246typedef const struct XADynamicInterfaceManagementItf_
247    * const * XADynamicInterfaceManagementItf;
248
249typedef void (XAAPIENTRY * xaDynamicInterfaceManagementCallback) (
250    XADynamicInterfaceManagementItf caller,
251    void * pContext,
252    XAuint32 event,
253    XAresult result,
254    const XAInterfaceID iid
255);
256
257struct XADynamicInterfaceManagementItf_ {
258    XAresult (*AddInterface) (
259        XADynamicInterfaceManagementItf self,
260        const XAInterfaceID iid,
261        XAboolean aysnc
262    );
263    XAresult (*RemoveInterface) (
264        XADynamicInterfaceManagementItf self,
265        const XAInterfaceID iid
266    );
267    XAresult (*ResumeInterface) (
268        XADynamicInterfaceManagementItf self,
269        const XAInterfaceID iid,
270        XAboolean aysnc
271    );
272    XAresult (*RegisterCallback) (
273        XADynamicInterfaceManagementItf self,
274        xaDynamicInterfaceManagementCallback callback,
275        void * pContext
276    );
277};
278
279/* DATA SOURCES/SINKS */
280
281#define XA_DATAFORMAT_MIME              ((XAuint32) 0x00000001)
282#define XA_DATAFORMAT_PCM               ((XAuint32) 0x00000002)
283#define XA_DATAFORMAT_RAWIMAGE          ((XAuint32) 0x00000003)
284
285#define XA_DATALOCATOR_URI              ((XAuint32) 0x00000001)
286#define XA_DATALOCATOR_ADDRESS          ((XAuint32) 0x00000002)
287#define XA_DATALOCATOR_IODEVICE         ((XAuint32) 0x00000003)
288#define XA_DATALOCATOR_OUTPUTMIX        ((XAuint32) 0x00000004)
289#define XA_DATALOCATOR_NATIVEDISPLAY    ((XAuint32) 0x00000005)
290#define XA_DATALOCATOR_RESERVED6        ((XAuint32) 0x00000006)
291#define XA_DATALOCATOR_RESERVED7        ((XAuint32) 0x00000007)
292
293typedef struct XADataSink_ {
294    void * pLocator;
295    void * pFormat;
296} XADataSink;
297
298typedef struct XADataSource_ {
299    void * pLocator;
300    void * pFormat;
301} XADataSource;
302
303#define XA_CONTAINERTYPE_UNSPECIFIED    ((XAuint32) 0x00000001)
304#define XA_CONTAINERTYPE_RAW            ((XAuint32) 0x00000002)
305#define XA_CONTAINERTYPE_ASF            ((XAuint32) 0x00000003)
306#define XA_CONTAINERTYPE_AVI            ((XAuint32) 0x00000004)
307#define XA_CONTAINERTYPE_BMP            ((XAuint32) 0x00000005)
308#define XA_CONTAINERTYPE_JPG            ((XAuint32) 0x00000006)
309#define XA_CONTAINERTYPE_JPG2000        ((XAuint32) 0x00000007)
310#define XA_CONTAINERTYPE_M4A            ((XAuint32) 0x00000008)
311#define XA_CONTAINERTYPE_MP3            ((XAuint32) 0x00000009)
312#define XA_CONTAINERTYPE_MP4            ((XAuint32) 0x0000000A)
313#define XA_CONTAINERTYPE_MPEG_ES        ((XAuint32) 0x0000000B)
314#define XA_CONTAINERTYPE_MPEG_PS        ((XAuint32) 0x0000000C)
315#define XA_CONTAINERTYPE_MPEG_TS        ((XAuint32) 0x0000000D)
316#define XA_CONTAINERTYPE_QT             ((XAuint32) 0x0000000E)
317#define XA_CONTAINERTYPE_WAV            ((XAuint32) 0x0000000F)
318#define XA_CONTAINERTYPE_XMF_0          ((XAuint32) 0x00000010)
319#define XA_CONTAINERTYPE_XMF_1          ((XAuint32) 0x00000011)
320#define XA_CONTAINERTYPE_XMF_2          ((XAuint32) 0x00000012)
321#define XA_CONTAINERTYPE_XMF_3          ((XAuint32) 0x00000013)
322#define XA_CONTAINERTYPE_XMF_GENERIC    ((XAuint32) 0x00000014)
323#define XA_CONTAINERTYPE_AMR            ((XAuint32) 0x00000015)
324#define XA_CONTAINERTYPE_AAC            ((XAuint32) 0x00000016)
325#define XA_CONTAINERTYPE_3GPP           ((XAuint32) 0x00000017)
326#define XA_CONTAINERTYPE_3GA            ((XAuint32) 0x00000018)
327#define XA_CONTAINERTYPE_RM             ((XAuint32) 0x00000019)
328#define XA_CONTAINERTYPE_DMF            ((XAuint32) 0x0000001A)
329#define XA_CONTAINERTYPE_SMF            ((XAuint32) 0x0000001B)
330#define XA_CONTAINERTYPE_MOBILE_DLS     ((XAuint32) 0x0000001C)
331#define XA_CONTAINERTYPE_OGG            ((XAuint32) 0x0000001D)
332
333typedef struct XADataFormat_MIME_ {
334    XAuint32 formatType;
335    XAchar * mimeType;
336    XAuint32 containerType;
337} XADataFormat_MIME;
338
339#define XA_BYTEORDER_BIGENDIAN          ((XAuint32) 0x00000001)
340#define XA_BYTEORDER_LITTLEENDIAN       ((XAuint32) 0x00000002)
341
342#define XA_SAMPLINGRATE_8               ((XAuint32)   8000000)
343#define XA_SAMPLINGRATE_11_025          ((XAuint32)  11025000)
344#define XA_SAMPLINGRATE_12              ((XAuint32)  12000000)
345#define XA_SAMPLINGRATE_16              ((XAuint32)  16000000)
346#define XA_SAMPLINGRATE_22_05           ((XAuint32)  22050000)
347#define XA_SAMPLINGRATE_24              ((XAuint32)  24000000)
348#define XA_SAMPLINGRATE_32              ((XAuint32)  32000000)
349#define XA_SAMPLINGRATE_44_1            ((XAuint32)  44100000)
350#define XA_SAMPLINGRATE_48              ((XAuint32)  48000000)
351#define XA_SAMPLINGRATE_64              ((XAuint32)  64000000)
352#define XA_SAMPLINGRATE_88_2            ((XAuint32)  88200000)
353#define XA_SAMPLINGRATE_96              ((XAuint32)  96000000)
354#define XA_SAMPLINGRATE_192             ((XAuint32) 192000000)
355
356#define XA_SPEAKER_FRONT_LEFT               ((XAuint32) 0x00000001)
357#define XA_SPEAKER_FRONT_RIGHT              ((XAuint32) 0x00000002)
358#define XA_SPEAKER_FRONT_CENTER             ((XAuint32) 0x00000004)
359#define XA_SPEAKER_LOW_FREQUENCY            ((XAuint32) 0x00000008)
360#define XA_SPEAKER_BACK_LEFT                ((XAuint32) 0x00000010)
361#define XA_SPEAKER_BACK_RIGHT               ((XAuint32) 0x00000020)
362#define XA_SPEAKER_FRONT_LEFT_OF_CENTER     ((XAuint32) 0x00000040)
363#define XA_SPEAKER_FRONT_RIGHT_OF_CENTER    ((XAuint32) 0x00000080)
364#define XA_SPEAKER_BACK_CENTER              ((XAuint32) 0x00000100)
365#define XA_SPEAKER_SIDE_LEFT                ((XAuint32) 0x00000200)
366#define XA_SPEAKER_SIDE_RIGHT               ((XAuint32) 0x00000400)
367#define XA_SPEAKER_TOP_CENTER               ((XAuint32) 0x00000800)
368#define XA_SPEAKER_TOP_FRONT_LEFT           ((XAuint32) 0x00001000)
369#define XA_SPEAKER_TOP_FRONT_CENTER         ((XAuint32) 0x00002000)
370#define XA_SPEAKER_TOP_FRONT_RIGHT          ((XAuint32) 0x00004000)
371#define XA_SPEAKER_TOP_BACK_LEFT            ((XAuint32) 0x00008000)
372#define XA_SPEAKER_TOP_BACK_CENTER          ((XAuint32) 0x00010000)
373#define XA_SPEAKER_TOP_BACK_RIGHT           ((XAuint32) 0x00020000)
374
375#define XA_PCMSAMPLEFORMAT_FIXED_8          ((XAuint16) 0x0008)
376#define XA_PCMSAMPLEFORMAT_FIXED_16         ((XAuint16) 0x0010)
377#define XA_PCMSAMPLEFORMAT_FIXED_20         ((XAuint16) 0x0014)
378#define XA_PCMSAMPLEFORMAT_FIXED_24         ((XAuint16) 0x0018)
379#define XA_PCMSAMPLEFORMAT_FIXED_28         ((XAuint16) 0x001C)
380#define XA_PCMSAMPLEFORMAT_FIXED_32         ((XAuint16) 0x0020)
381
382typedef struct XADataFormat_PCM_ {
383    XAuint32 formatType;
384    XAuint32 numChannels;
385    XAuint32 samplesPerSec;
386    XAuint32 bitsPerSample;
387    XAuint32 containerSize;
388    XAuint32 channelMask;
389    XAuint32 endianness;
390} XADataFormat_PCM;
391
392#define XA_COLORFORMAT_UNUSED                   ((XAuint32) 0x00000000)
393#define XA_COLORFORMAT_MONOCHROME               ((XAuint32) 0x00000001)
394#define XA_COLORFORMAT_8BITRGB332               ((XAuint32) 0x00000002)
395#define XA_COLORFORMAT_12BITRGB444              ((XAuint32) 0x00000003)
396#define XA_COLORFORMAT_16BITARGB4444            ((XAuint32) 0x00000004)
397#define XA_COLORFORMAT_16BITARGB1555            ((XAuint32) 0x00000005)
398#define XA_COLORFORMAT_16BITRGB565              ((XAuint32) 0x00000006)
399#define XA_COLORFORMAT_16BITBGR565              ((XAuint32) 0x00000007)
400#define XA_COLORFORMAT_18BITRGB666              ((XAuint32) 0x00000008)
401#define XA_COLORFORMAT_18BITARGB1665            ((XAuint32) 0x00000009)
402#define XA_COLORFORMAT_19BITARGB1666            ((XAuint32) 0x0000000A)
403#define XA_COLORFORMAT_24BITRGB888              ((XAuint32) 0x0000000B)
404#define XA_COLORFORMAT_24BITBGR888              ((XAuint32) 0x0000000C)
405#define XA_COLORFORMAT_24BITARGB1887            ((XAuint32) 0x0000000D)
406#define XA_COLORFORMAT_25BITARGB1888            ((XAuint32) 0x0000000E)
407#define XA_COLORFORMAT_32BITBGRA8888            ((XAuint32) 0x0000000F)
408#define XA_COLORFORMAT_32BITARGB8888            ((XAuint32) 0x00000010)
409#define XA_COLORFORMAT_YUV411PLANAR             ((XAuint32) 0x00000011)
410#define XA_COLORFORMAT_YUV420PLANAR             ((XAuint32) 0x00000013)
411#define XA_COLORFORMAT_YUV420SEMIPLANAR         ((XAuint32) 0x00000015)
412#define XA_COLORFORMAT_YUV422PLANAR             ((XAuint32) 0x00000016)
413#define XA_COLORFORMAT_YUV422SEMIPLANAR         ((XAuint32) 0x00000018)
414#define XA_COLORFORMAT_YCBYCR                   ((XAuint32) 0x00000019)
415#define XA_COLORFORMAT_YCRYCB                   ((XAuint32) 0x0000001A)
416#define XA_COLORFORMAT_CBYCRY                   ((XAuint32) 0x0000001B)
417#define XA_COLORFORMAT_CRYCBY                   ((XAuint32) 0x0000001C)
418#define XA_COLORFORMAT_YUV444INTERLEAVED        ((XAuint32) 0x0000001D)
419#define XA_COLORFORMAT_RAWBAYER8BIT             ((XAuint32) 0x0000001E)
420#define XA_COLORFORMAT_RAWBAYER10BIT            ((XAuint32) 0x0000001F)
421#define XA_COLORFORMAT_RAWBAYER8BITCOMPRESSED   ((XAuint32) 0x00000020)
422#define XA_COLORFORMAT_L2                       ((XAuint32) 0x00000021)
423#define XA_COLORFORMAT_L4                       ((XAuint32) 0x00000022)
424#define XA_COLORFORMAT_L8                       ((XAuint32) 0x00000023)
425#define XA_COLORFORMAT_L16                      ((XAuint32) 0x00000024)
426#define XA_COLORFORMAT_L24                      ((XAuint32) 0x00000025)
427#define XA_COLORFORMAT_L32                      ((XAuint32) 0x00000026)
428#define XA_COLORFORMAT_18BITBGR666              ((XAuint32) 0x00000029)
429#define XA_COLORFORMAT_24BITARGB6666            ((XAuint32) 0x0000002A)
430#define XA_COLORFORMAT_24BITABGR6666            ((XAuint32) 0x0000002B)
431
432typedef struct XADataFormat_RawImage_ {
433    XAuint32 formatType;
434    XAuint32 colorFormat;
435    XAuint32 height;
436    XAuint32 width;
437    XAuint32 stride;
438} XADataFormat_RawImage;
439
440typedef struct XADataLocator_Address_ {
441    XAuint32 locatorType;
442    void * pAddress;
443    XAuint32 length;
444} XADataLocator_Address;
445
446#define XA_IODEVICE_AUDIOINPUT          ((XAuint32) 0x00000001)
447#define XA_IODEVICE_LEDARRAY            ((XAuint32) 0x00000002)
448#define XA_IODEVICE_VIBRA               ((XAuint32) 0x00000003)
449#define XA_IODEVICE_CAMERA              ((XAuint32) 0x00000004)
450#define XA_IODEVICE_RADIO               ((XAuint32) 0x00000005)
451
452typedef struct XADataLocator_IODevice_ {
453    XAuint32 locatorType;
454    XAuint32 deviceType;
455    XAuint32 deviceID;
456    XAObjectItf device;
457} XADataLocator_IODevice;
458
459typedef void * XANativeHandle;
460
461typedef struct XADataLocator_NativeDisplay_{
462    XAuint32 locatorType;
463    XANativeHandle hWindow;
464    XANativeHandle hDisplay;
465} XADataLocator_NativeDisplay;
466
467typedef struct XADataLocator_OutputMix {
468    XAuint32 locatorType;
469    XAObjectItf outputMix;
470} XADataLocator_OutputMix;
471
472typedef struct XADataLocator_URI_ {
473    XAuint32 locatorType;
474    XAchar * URI;
475} XADataLocator_URI;
476
477
478/* ENGINE */
479
480#define XA_DEFAULTDEVICEID_AUDIOINPUT   ((XAuint32) 0xFFFFFFFF)
481#define XA_DEFAULTDEVICEID_AUDIOOUTPUT  ((XAuint32) 0xFFFFFFFE)
482#define XA_DEFAULTDEVICEID_LED          ((XAuint32) 0xFFFFFFFD)
483#define XA_DEFAULTDEVICEID_VIBRA        ((XAuint32) 0xFFFFFFFC)
484#define XA_DEFAULTDEVICEID_CAMERA       ((XAuint32) 0xFFFFFFFB)
485
486#define XA_ENGINEOPTION_THREADSAFE      ((XAuint32) 0x00000001)
487#define XA_ENGINEOPTION_LOSSOFCONTROL   ((XAuint32) 0x00000002)
488
489#define XA_OBJECTID_ENGINE              ((XAuint32) 0x00000001)
490#define XA_OBJECTID_LEDDEVICE           ((XAuint32) 0x00000002)
491#define XA_OBJECTID_VIBRADEVICE         ((XAuint32) 0x00000003)
492#define XA_OBJECTID_MEDIAPLAYER         ((XAuint32) 0x00000004)
493#define XA_OBJECTID_MEDIARECORDER       ((XAuint32) 0x00000005)
494#define XA_OBJECTID_RADIODEVICE         ((XAuint32) 0x00000006)
495#define XA_OBJECTID_OUTPUTMIX           ((XAuint32) 0x00000007)
496#define XA_OBJECTID_METADATAEXTRACTOR   ((XAuint32) 0x00000008)
497#define XA_OBJECTID_CAMERADEVICE        ((XAuint32) 0x00000009)
498
499#define XA_PROFILES_MEDIA_PLAYER            ((XAint16) 0x0001)
500#define XA_PROFILES_MEDIA_PLAYER_RECORDER   ((XAint16) 0x0002)
501#define XA_PROFILES_PLUS_MIDI               ((XAint16) 0x0004)
502
503typedef struct XAEngineOption_ {
504    XAuint32 feature;
505    XAuint32 data;
506} XAEngineOption;
507
508XA_API XAresult XAAPIENTRY xaCreateEngine(
509    XAObjectItf * pEngine,
510    XAuint32 numOptions,
511    const XAEngineOption * pEngineOptions,
512    XAuint32 numInterfaces,
513    const XAInterfaceID * pInterfaceIds,
514    const XAboolean * pInterfaceRequired
515);
516
517XA_API XAresult XAAPIENTRY xaQueryNumSupportedEngineInterfaces(
518    XAuint32 * pNumSupportedInterfaces
519);
520
521XA_API XAresult XAAPIENTRY xaQuerySupportedEngineInterfaces(
522    XAuint32 index,
523    XAInterfaceID * pInterfaceId
524);
525
526typedef struct XALEDDescriptor_ {
527    XAuint8 ledCount;
528    XAuint8 primaryLED;
529    XAuint32 colorMask;
530} XALEDDescriptor;
531
532typedef struct XAVibraDescriptor_ {
533    XAboolean supportsFrequency;
534    XAboolean supportsIntensity;
535    XAmilliHertz minFrequency;
536    XAmilliHertz maxFrequency;
537} XAVibraDescriptor;
538
539
540XA_API extern const XAInterfaceID XA_IID_ENGINE;
541
542struct XAEngineItf_;
543typedef const struct XAEngineItf_ * const * XAEngineItf;
544
545struct XAEngineItf_ {
546    XAresult (*CreateCameraDevice) (
547        XAEngineItf self,
548        XAObjectItf * pDevice,
549        XAuint32 deviceID,
550        XAuint32 numInterfaces,
551        const XAInterfaceID * pInterfaceIds,
552        const XAboolean * pInterfaceRequired
553    );
554    XAresult (*CreateRadioDevice) (
555        XAEngineItf self,
556        XAObjectItf * pDevice,
557        XAuint32 numInterfaces,
558        const XAInterfaceID * pInterfaceIds,
559        const XAboolean * pInterfaceRequired
560    );
561    XAresult (*CreateLEDDevice) (
562        XAEngineItf self,
563        XAObjectItf * pDevice,
564        XAuint32 deviceID,
565        XAuint32 numInterfaces,
566        const XAInterfaceID * pInterfaceIds,
567        const XAboolean * pInterfaceRequired
568    );
569       XAresult (*CreateVibraDevice) (
570        XAEngineItf self,
571        XAObjectItf * pDevice,
572        XAuint32 deviceID,
573        XAuint32 numInterfaces,
574        const XAInterfaceID * pInterfaceIds,
575        const XAboolean * pInterfaceRequired
576    );
577    XAresult (*CreateMediaPlayer) (
578        XAEngineItf self,
579        XAObjectItf * pPlayer,
580        XADataSource * pDataSrc,
581        XADataSource * pBankSrc,
582        XADataSink * pAudioSnk,
583        XADataSink * pImageVideoSnk,
584        XADataSink * pVibra,
585        XADataSink * pLEDArray,
586        XAuint32 numInterfaces,
587        const XAInterfaceID * pInterfaceIds,
588        const XAboolean * pInterfaceRequired
589    );
590    XAresult (*CreateMediaRecorder) (
591        XAEngineItf self,
592        XAObjectItf * pRecorder,
593        XADataSource * pAudioSrc,
594        XADataSource * pImageVideoSrc,
595        XADataSink * pDataSnk,
596        XAuint32 numInterfaces,
597        const XAInterfaceID * pInterfaceIds,
598        const XAboolean * pInterfaceRequired
599    );
600    XAresult (*CreateOutputMix) (
601        XAEngineItf self,
602        XAObjectItf * pMix,
603        XAuint32 numInterfaces,
604        const XAInterfaceID * pInterfaceIds,
605        const XAboolean * pInterfaceRequired
606    );
607    XAresult (*CreateMetadataExtractor) (
608        XAEngineItf self,
609        XAObjectItf * pMetadataExtractor,
610        XADataSource * pDataSource,
611        XAuint32 numInterfaces,
612        const XAInterfaceID * pInterfaceIds,
613        const XAboolean * pInterfaceRequired
614    );
615    XAresult (*CreateExtensionObject) (
616        XAEngineItf self,
617        XAObjectItf * pObject,
618        void * pParameters,
619        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