xref: /third_party/openSLES/api/1.1/OpenSLES.h (revision 523f5352)
1/*
2 * Copyright (c) 2007-2011 The Khronos Group Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy of
5 * this software and /or associated documentation files (the "Materials "), to
6 * deal in the Materials without restriction, including without limitation the
7 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8 * sell copies of the Materials, and to permit persons to whom the Materials are
9 * 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 OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE
21 * MATERIALS.
22 *
23 * OpenSLES.h - OpenSL ES version 1.1
24 *
25 */
26
27/****************************************************************************/
28/* NOTE: This file is a standard OpenSL ES header file and should not be    */
29/* modified in any way.                                                     */
30/****************************************************************************/
31
32#ifndef OPENSL_ES_H_
33#define OPENSL_ES_H_
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39#include "OpenSLES_Platform.h"
40
41
42/*****************************************************************************/
43/* Common types, structures, and defines                                */
44/*****************************************************************************/
45
46#ifndef _KHRONOS_KEYS_
47#define _KHRONOS_KEYS_
48
49#define KHRONOS_TITLE "KhronosTitle"
50#define KHRONOS_ALBUM "KhronosAlbum"
51#define KHRONOS_TRACK_NUMBER "KhronosTrackNumber"
52#define KHRONOS_ARTIST "KhronosArtist"
53#define KHRONOS_GENRE "KhronosGenre"
54#define KHRONOS_YEAR "KhronosYear"
55#define KHRONOS_COMMENT "KhronosComment"
56#define KHRONOS_ARTIST_URL "KhronosArtistURL"
57#define KHRONOS_CONTENT_URL "KhronosContentURL"
58#define KHRONOS_RATING "KhronosRating"
59#define KHRONOS_ALBUM_ART "KhronosAlbumArt"
60#define KHRONOS_COPYRIGHT "KhronosCopyright"
61
62#endif
63
64
65/* remap common types to SL types for clarity */
66typedef sl_char_t              SLchar;          /* UTF-8 is to be used     */
67typedef sl_int8_t              SLint8;          /* 8 bit signed integer    */
68typedef sl_uint8_t             SLuint8;         /* 8 bit unsigned integer  */
69typedef sl_int16_t             SLint16;         /* 16 bit signed integer   */
70typedef sl_uint16_t            SLuint16;        /* 16 bit unsigned integer */
71typedef sl_int32_t             SLint32;         /* 32 bit signed integer   */
72typedef sl_uint32_t            SLuint32;        /* 32 bit unsigned integer */
73typedef sl_float32_t           SLfloat32;       /* 32 bit floating point   */
74typedef sl_float64_t           Slfloat64;       /* 64 bit floating point   */
75
76
77typedef SLuint32                    SLboolean;
78#define SL_BOOLEAN_FALSE            ((SLboolean) 0x00000000)
79#define SL_BOOLEAN_TRUE             ((SLboolean) 0x00000001)
80
81typedef SLint16                     SLmillibel;
82typedef SLuint32                    SLmillisecond;
83typedef SLuint32                    SLmilliHertz;
84typedef SLint32                     SLmillimeter;
85typedef SLint32                     SLmillidegree;
86typedef SLint16                     SLpermille;
87typedef SLuint32                    SLmicrosecond;
88typedef SLuint32                    SLresult;
89
90#define SL_MILLIBEL_MAX     ((SLmillibel) 0x7FFF)
91#define SL_MILLIBEL_MIN     ((SLmillibel) (-SL_MILLIBEL_MAX-1))
92
93#define SL_MILLIHERTZ_MAX    ((SLmilliHertz) 0xFFFFFFFF)
94#define SL_MILLIMETER_MAX    ((SLmillimeter) 0x7FFFFFFF)
95
96/** Interface ID defined as a UUID */
97typedef const struct SLInterfaceID_ {
98    SLuint32 time_low;
99    SLuint16 time_mid;
100    SLuint16 time_hi_and_version;
101    SLuint16 clock_seq;
102    SLuint8  node[6];
103} * SLInterfaceID;
104
105/* Forward declaration for the object interface */
106struct SLObjectItf_;
107
108typedef const struct SLObjectItf_ * const * SLObjectItf;
109
110/* Objects ID's */
111
112#define SL_OBJECTID_ENGINE               ((SLuint32) 0x00001001)
113#define SL_OBJECTID_LEDDEVICE            ((SLuint32) 0x00001002)
114#define SL_OBJECTID_VIBRADEVICE          ((SLuint32) 0x00001003)
115#define SL_OBJECTID_AUDIOPLAYER          ((SLuint32) 0x00001004)
116#define SL_OBJECTID_AUDIORECORDER        ((SLuint32) 0x00001005)
117#define SL_OBJECTID_MIDIPLAYER           ((SLuint32) 0x00001006)
118#define SL_OBJECTID_LISTENER             ((SLuint32) 0x00001007)
119#define SL_OBJECTID_3DGROUP              ((SLuint32) 0x00001008)
120#define SL_OBJECTID_OUTPUTMIX            ((SLuint32) 0x00001009)
121#define SL_OBJECTID_METADATAEXTRACTOR    ((SLuint32) 0x0000100A)
122
123
124/* SL Profiles */
125
126#define SL_PROFILES_PHONE    ((SLuint16) 0x0001)
127#define SL_PROFILES_MUSIC    ((SLuint16) 0x0002)
128#define SL_PROFILES_GAME    ((SLuint16) 0x0004)
129
130/* Types of voices supported by the system */
131
132#define SL_VOICETYPE_2D_AUDIO          ((SLuint16) 0x0001)
133#define SL_VOICETYPE_MIDI              ((SLuint16) 0x0002)
134#define SL_VOICETYPE_3D_AUDIO          ((SLuint16) 0x0004)
135#define SL_VOICETYPE_3D_MIDIOUTPUT     ((SLuint16) 0x0008)
136
137/* Convenient macros representing various different priority levels, for use with the SetPriority method */
138
139#define SL_PRIORITY_LOWEST         ((SLuint32) 0xFFFFFFFF)
140#define SL_PRIORITY_VERYLOW        ((SLuint32) 0xE0000000)
141#define SL_PRIORITY_LOW            ((SLuint32) 0xC0000000)
142#define SL_PRIORITY_BELOWNORMAL    ((SLuint32) 0xA0000000)
143#define SL_PRIORITY_NORMAL         ((SLuint32) 0x7FFFFFFF)
144#define SL_PRIORITY_ABOVENORMAL    ((SLuint32) 0x60000000)
145#define SL_PRIORITY_HIGH           ((SLuint32) 0x40000000)
146#define SL_PRIORITY_VERYHIGH       ((SLuint32) 0x20000000)
147#define SL_PRIORITY_HIGHEST        ((SLuint32) 0x00000000)
148
149/** These macros list types of PCM data **/
150#define SL_PCM_REPRESENTATION_SIGNED_INT       ((SLuint32) 0x00000001)
151#define SL_PCM_REPRESENTATION_UNSIGNED_INT     ((SLuint32) 0x00000002)
152#define SL_PCM_REPRESENTATION_FLOAT            ((SLuint32) 0x00000003)
153
154/** These macros list the various sample formats that are possible on audio input and output devices. */
155
156#define SL_PCMSAMPLEFORMAT_FIXED_8     ((SLuint16) 0x0008)
157#define SL_PCMSAMPLEFORMAT_FIXED_16    ((SLuint16) 0x0010)
158#define SL_PCMSAMPLEFORMAT_FIXED_20    ((SLuint16) 0x0014)
159#define SL_PCMSAMPLEFORMAT_FIXED_24    ((SLuint16) 0x0018)
160#define SL_PCMSAMPLEFORMAT_FIXED_28    ((SLuint16) 0x001C)
161#define SL_PCMSAMPLEFORMAT_FIXED_32    ((SLuint16) 0x0020)
162#define SL_PCMSAMPLEFORMAT_FIXED_64    ((SLuint16) 0x0040)
163
164/** These macros specify the commonly used sampling rates (in milliHertz) supported by most audio I/O devices. */
165
166#define SL_SAMPLINGRATE_8          ((SLuint32) 8000000)
167#define SL_SAMPLINGRATE_11_025     ((SLuint32) 11025000)
168#define SL_SAMPLINGRATE_12         ((SLuint32) 12000000)
169#define SL_SAMPLINGRATE_16         ((SLuint32) 16000000)
170#define SL_SAMPLINGRATE_22_05      ((SLuint32) 22050000)
171#define SL_SAMPLINGRATE_24         ((SLuint32) 24000000)
172#define SL_SAMPLINGRATE_32         ((SLuint32) 32000000)
173#define SL_SAMPLINGRATE_44_1       ((SLuint32) 44100000)
174#define SL_SAMPLINGRATE_48         ((SLuint32) 48000000)
175#define SL_SAMPLINGRATE_64         ((SLuint32) 64000000)
176#define SL_SAMPLINGRATE_88_2       ((SLuint32) 88200000)
177#define SL_SAMPLINGRATE_96         ((SLuint32) 96000000)
178#define SL_SAMPLINGRATE_192        ((SLuint32) 192000000)
179
180#define SL_SPEAKER_FRONT_LEFT                  ((SLuint32) 0x00000001)
181#define SL_SPEAKER_FRONT_RIGHT                 ((SLuint32) 0x00000002)
182#define SL_SPEAKER_FRONT_CENTER                ((SLuint32) 0x00000004)
183#define SL_SPEAKER_LOW_FREQUENCY               ((SLuint32) 0x00000008)
184#define SL_SPEAKER_BACK_LEFT                   ((SLuint32) 0x00000010)
185#define SL_SPEAKER_BACK_RIGHT                  ((SLuint32) 0x00000020)
186#define SL_SPEAKER_FRONT_LEFT_OF_CENTER        ((SLuint32) 0x00000040)
187#define SL_SPEAKER_FRONT_RIGHT_OF_CENTER       ((SLuint32) 0x00000080)
188#define SL_SPEAKER_BACK_CENTER                 ((SLuint32) 0x00000100)
189#define SL_SPEAKER_SIDE_LEFT                   ((SLuint32) 0x00000200)
190#define SL_SPEAKER_SIDE_RIGHT                  ((SLuint32) 0x00000400)
191#define SL_SPEAKER_TOP_CENTER                  ((SLuint32) 0x00000800)
192#define SL_SPEAKER_TOP_FRONT_LEFT              ((SLuint32) 0x00001000)
193#define SL_SPEAKER_TOP_FRONT_CENTER            ((SLuint32) 0x00002000)
194#define SL_SPEAKER_TOP_FRONT_RIGHT             ((SLuint32) 0x00004000)
195#define SL_SPEAKER_TOP_BACK_LEFT               ((SLuint32) 0x00008000)
196#define SL_SPEAKER_TOP_BACK_CENTER             ((SLuint32) 0x00010000)
197#define SL_SPEAKER_TOP_BACK_RIGHT              ((SLuint32) 0x00020000)
198
199
200/*****************************************************************************/
201/* Errors                                                                    */
202/*                                                                           */
203/*****************************************************************************/
204
205#define SL_RESULT_SUCCESS                      ((SLuint32) 0x00000000)
206#define SL_RESULT_PRECONDITIONS_VIOLATED       ((SLuint32) 0x00000001)
207#define SL_RESULT_PARAMETER_INVALID            ((SLuint32) 0x00000002)
208#define SL_RESULT_MEMORY_FAILURE               ((SLuint32) 0x00000003)
209#define SL_RESULT_RESOURCE_ERROR               ((SLuint32) 0x00000004)
210#define SL_RESULT_RESOURCE_LOST                ((SLuint32) 0x00000005)
211#define SL_RESULT_IO_ERROR                     ((SLuint32) 0x00000006)
212#define SL_RESULT_BUFFER_INSUFFICIENT          ((SLuint32) 0x00000007)
213#define SL_RESULT_CONTENT_CORRUPTED            ((SLuint32) 0x00000008)
214#define SL_RESULT_CONTENT_UNSUPPORTED          ((SLuint32) 0x00000009)
215#define SL_RESULT_CONTENT_NOT_FOUND            ((SLuint32) 0x0000000A)
216#define SL_RESULT_PERMISSION_DENIED            ((SLuint32) 0x0000000B)
217#define SL_RESULT_FEATURE_UNSUPPORTED          ((SLuint32) 0x0000000C)
218#define SL_RESULT_INTERNAL_ERROR               ((SLuint32) 0x0000000D)
219#define SL_RESULT_UNKNOWN_ERROR                ((SLuint32) 0x0000000E)
220#define SL_RESULT_OPERATION_ABORTED            ((SLuint32) 0x0000000F)
221#define SL_RESULT_CONTROL_LOST                 ((SLuint32) 0x00000010)
222#define SL_RESULT_READONLY                     ((SLuint32) 0x00000011)
223#define SL_RESULT_ENGINEOPTION_UNSUPPORTED     ((SLuint32) 0x00000012)
224#define SL_RESULT_SOURCE_SINK_INCOMPATIBLE     ((SLuint32) 0x00000013)
225
226/* Object state definitions */
227
228#define SL_OBJECT_STATE_UNREALIZED             ((SLuint32) 0x00000001)
229#define SL_OBJECT_STATE_REALIZED               ((SLuint32) 0x00000002)
230#define SL_OBJECT_STATE_SUSPENDED              ((SLuint32) 0x00000003)
231
232/* Object event definitions */
233
234#define SL_OBJECT_EVENT_RUNTIME_ERROR              ((SLuint32) 0x00000001)
235#define SL_OBJECT_EVENT_ASYNC_TERMINATION          ((SLuint32) 0x00000002)
236#define SL_OBJECT_EVENT_RESOURCES_LOST             ((SLuint32) 0x00000003)
237#define SL_OBJECT_EVENT_RESOURCES_AVAILABLE        ((SLuint32) 0x00000004)
238#define SL_OBJECT_EVENT_ITF_CONTROL_TAKEN          ((SLuint32) 0x00000005)
239#define SL_OBJECT_EVENT_ITF_CONTROL_RETURNED       ((SLuint32) 0x00000006)
240#define SL_OBJECT_EVENT_ITF_PARAMETERS_CHANGED     ((SLuint32) 0x00000007)
241
242
243/*****************************************************************************/
244/* Interface definitions                                                     */
245/*****************************************************************************/
246
247/** NULL Interface */
248
249SL_API extern const SLInterfaceID SL_IID_NULL;
250
251/*---------------------------------------------------------------------------*/
252/* Data Source and Data Sink Structures                                      */
253/*---------------------------------------------------------------------------*/
254
255/** Data locator macros  */
256#define SL_DATALOCATOR_NULL                   ((SLuint32) 0x00000000)
257#define SL_DATALOCATOR_URI                    ((SLuint32) 0x00000001)
258#define SL_DATALOCATOR_ADDRESS                ((SLuint32) 0x00000002)
259#define SL_DATALOCATOR_IODEVICE               ((SLuint32) 0x00000003)
260#define SL_DATALOCATOR_OUTPUTMIX              ((SLuint32) 0x00000004)
261#define SL_DATALOCATOR_RESERVED5              ((SLuint32) 0x00000005)
262#define SL_DATALOCATOR_BUFFERQUEUE            ((SLuint32) 0x00000006)
263#define SL_DATALOCATOR_MIDIBUFFERQUEUE        ((SLuint32) 0x00000007)
264#define SL_DATALOCATOR_MEDIAOBJECT            ((SLuint32) 0x00000008)
265#define SL_DATALOCATOR_CONTENTPIPE            ((SLuint32) 0x00000009)
266
267
268/** URI-based data locator definition where locatorType must be SL_DATALOCATOR_URI*/
269typedef struct SLDataLocator_URI_ {
270    SLuint32         locatorType;
271    const SLchar *    pURI;
272} SLDataLocator_URI;
273
274/** Address-based data locator definition where locatorType must be SL_DATALOCATOR_ADDRESS*/
275typedef struct SLDataLocator_Address_ {
276    SLuint32     locatorType;
277    void         *pAddress;
278    SLuint32    length;
279} SLDataLocator_Address;
280
281/** IODevice-types */
282#define SL_IODEVICE_AUDIOINPUT      ((SLuint32) 0x00000001)
283#define SL_IODEVICE_LEDARRAY        ((SLuint32) 0x00000002)
284#define SL_IODEVICE_VIBRA           ((SLuint32) 0x00000003)
285#define SL_IODEVICE_RESERVED4       ((SLuint32) 0x00000004)
286#define SL_IODEVICE_RESERVED5       ((SLuint32) 0x00000005)
287#define SL_IODEVICE_AUDIOOUTPUT     ((SLuint32) 0x00000006)
288
289/** IODevice-based data locator definition where locatorType must be SL_DATALOCATOR_IODEVICE*/
290typedef struct SLDataLocator_IODevice_ {
291    SLuint32    locatorType;
292    SLuint32    deviceType;
293    SLuint32    deviceID;
294    SLObjectItf    device;
295} SLDataLocator_IODevice;
296
297/** OutputMix-based data locator definition where locatorType must be SL_DATALOCATOR_OUTPUTMIX*/
298typedef struct SLDataLocator_OutputMix_ {
299    SLuint32         locatorType;
300    SLObjectItf        outputMix;
301} SLDataLocator_OutputMix;
302
303
304/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_BUFFERQUEUE*/
305typedef struct SLDataLocator_BufferQueue_ {
306    SLuint32    locatorType;
307    SLuint32    numBuffers;
308} SLDataLocator_BufferQueue;
309
310/** ContentPipe-based data locator definition where locatorType must be SL_DATALOCATOR_CONTENTPIPE */
311typedef struct SLDataLocator_ContentPipe_ {
312    SLuint32 locatorType;
313    void * pContentPipe;
314    const SLchar * pURI;
315} SLDataLocator_ContentPipe;
316
317/** MidiBufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_MIDIBUFFERQUEUE*/
318typedef struct SLDataLocator_MIDIBufferQueue_ {
319    SLuint32    locatorType;
320    SLuint32    tpqn;
321    SLuint32    numBuffers;
322} SLDataLocator_MIDIBufferQueue;
323
324/** Data format defines */
325#define SL_DATAFORMAT_MIME        ((SLuint32) 0x00000001)
326#define SL_DATAFORMAT_PCM        ((SLuint32) 0x00000002)
327#define SL_DATAFORMAT_RESERVED3    ((SLuint32) 0x00000003)
328#define SL_DATAFORMAT_PCM_EX    ((SLuint32) 0x00000004)
329
330
331/** MIME-type-based data format definition where formatType must be SL_DATAFORMAT_MIME*/
332typedef struct SLDataFormat_MIME_ {
333    SLuint32         formatType;
334    const SLchar *    pMimeType;
335    SLuint32        containerType;
336} SLDataFormat_MIME;
337
338/* Byte order of a block of 16- or 32-bit data */
339#define SL_BYTEORDER_BIGENDIAN                ((SLuint32) 0x00000001)
340#define SL_BYTEORDER_LITTLEENDIAN            ((SLuint32) 0x00000002)
341
342#ifdef SL_BYTEORDER_NATIVEBIGENDIAN
343#define SL_BYTEORDER_NATIVE                SL_BYTEORDER_BIGENDIAN
344#else
345#define SL_BYTEORDER_NATIVE                SL_BYTEORDER_LITTLEENDIAN
346#endif
347
348/* Container type */
349#define SL_CONTAINERTYPE_UNSPECIFIED    ((SLuint32) 0x00000001)
350#define SL_CONTAINERTYPE_RAW        ((SLuint32) 0x00000002)
351#define SL_CONTAINERTYPE_ASF        ((SLuint32) 0x00000003)
352#define SL_CONTAINERTYPE_AVI        ((SLuint32) 0x00000004)
353#define SL_CONTAINERTYPE_BMP        ((SLuint32) 0x00000005)
354#define SL_CONTAINERTYPE_JPG        ((SLuint32) 0x00000006)
355#define SL_CONTAINERTYPE_JPG2000        ((SLuint32) 0x00000007)
356#define SL_CONTAINERTYPE_M4A        ((SLuint32) 0x00000008)
357#define SL_CONTAINERTYPE_MP3        ((SLuint32) 0x00000009)
358#define SL_CONTAINERTYPE_MP4        ((SLuint32) 0x0000000A)
359#define SL_CONTAINERTYPE_MPEG_ES        ((SLuint32) 0x0000000B)
360#define SL_CONTAINERTYPE_MPEG_PS        ((SLuint32) 0x0000000C)
361#define SL_CONTAINERTYPE_MPEG_TS        ((SLuint32) 0x0000000D)
362#define SL_CONTAINERTYPE_QT        ((SLuint32) 0x0000000E)
363#define SL_CONTAINERTYPE_WAV        ((SLuint32) 0x0000000F)
364#define SL_CONTAINERTYPE_XMF_0        ((SLuint32) 0x00000010)
365#define SL_CONTAINERTYPE_XMF_1        ((SLuint32) 0x00000011)
366#define SL_CONTAINERTYPE_XMF_2        ((SLuint32) 0x00000012)
367#define SL_CONTAINERTYPE_XMF_3        ((SLuint32) 0x00000013)
368#define SL_CONTAINERTYPE_XMF_GENERIC    ((SLuint32) 0x00000014)
369#define SL_CONTAINERTYPE_AMR          ((SLuint32) 0x00000015)
370#define SL_CONTAINERTYPE_AAC        ((SLuint32) 0x00000016)
371#define SL_CONTAINERTYPE_3GPP        ((SLuint32) 0x00000017)
372#define SL_CONTAINERTYPE_3GA        ((SLuint32) 0x00000018)
373#define SL_CONTAINERTYPE_RM        ((SLuint32) 0x00000019)
374#define SL_CONTAINERTYPE_DMF        ((SLuint32) 0x0000001A)
375#define SL_CONTAINERTYPE_SMF        ((SLuint32) 0x0000001B)
376#define SL_CONTAINERTYPE_MOBILE_DLS    ((SLuint32) 0x0000001C)
377#define SL_CONTAINERTYPE_OGG    ((SLuint32) 0x0000001D)
378
379
380/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM*/
381/* SLDataFormat_PCM IS DEPRECATED. Use SLDataFormat_PCM_EX instead. */
382typedef struct SLDataFormat_PCM_ {
383    SLuint32         formatType;
384    SLuint32         numChannels;
385    SLuint32         samplesPerSec;
386    SLuint32         bitsPerSample;
387    SLuint32         containerSize;
388    SLuint32         channelMask;
389    SLuint32        endianness;
390} SLDataFormat_PCM;
391
392/** PCM-type-based data format definition where formatType must be SL_DATAFORMAT_PCM_EX*/
393typedef struct SLDataFormat_PCM_EX_ {
394    SLuint32         formatType;
395    SLuint32         numChannels;
396    SLuint32         sampleRate;
397    SLuint32         bitsPerSample;
398    SLuint32         containerSize;
399    SLuint32         channelMask;
400    SLuint32        endianness;
401    SLuint32        representation;
402} SLDataFormat_PCM_EX;
403
404/** MediaObject-type-based data format definition where formatType must be SL_DATAFORMAT_MEDIAOBJECT*/
405typedef struct SLDataLocator_MediaObject_ {
406    SLuint32 locatorType;
407    SLObjectItf mediaObject;
408} SLDataLocator_MediaObject;
409
410/** NULL-type-based data format definition where formatType must be SL_DATAFORMAT_NULL*/
411typedef struct SLDataLocator_Null_ {
412    SLuint32 locatorType;
413} SLDataLocator_Null;
414
415
416typedef struct SLDataSource_ {
417    void *pLocator;
418    void *pFormat;
419} SLDataSource;
420
421
422typedef struct SLDataSink_ {
423    void *pLocator;
424    void *pFormat;
425} SLDataSink;
426
427/*---------------------------------------------------------------------------*/
428/* Standard Object Interface                                                 */
429/*---------------------------------------------------------------------------*/
430
431SL_API extern const SLInterfaceID SL_IID_OBJECT;
432
433/** Object callback */
434
435
436typedef void (SLAPIENTRY *slObjectCallback) (
437    SLObjectItf caller,
438    const void * pContext,
439    SLuint32 event,
440    SLresult result,
441    SLuint32 param,
442    void *pInterface
443);
444
445
446struct SLObjectItf_ {
447    SLresult (*Realize) (
448        SLObjectItf self,
449        SLboolean async
450    );
451    SLresult (*Resume) (
452        SLObjectItf self,
453        SLboolean async
454    );
455    SLresult (*GetState) (
456        SLObjectItf self,
457        SLuint32 * pState
458    );
459    SLresult (*GetInterface) (
460        SLObjectItf self,
461        const SLInterfaceID iid,
462        void * pInterface
463    );
464    SLresult (*RegisterCallback) (
465        SLObjectItf self,
466        slObjectCallback callback,
467        void * pContext
468    );
469    void (*AbortAsyncOperation) (
470        SLObjectItf self
471    );
472    void (*Destroy) (
473        SLObjectItf self
474    );
475    SLresult (*SetPriority) (
476        SLObjectItf self,
477        SLuint32 priority
478    );
479    SLresult (*GetPriority) (
480        SLObjectItf self,
481        SLuint32 *pPriority
482    );
483    SLresult (*SetLossOfControlInterfaces) (
484        SLObjectItf self,
485        SLuint16 numInterfaces,
486        const SLInterfaceID * pInterfaceIDs,
487        SLboolean enabled
488    );
489};
490
491
492/*---------------------------------------------------------------------------*/
493/* Audio IO Device capabilities interface                                    */
494/*---------------------------------------------------------------------------*/
495
496#define SL_DEFAULTDEVICEID_AUDIOINPUT     ((SLuint32) 0xFFFFFFFF)
497#define SL_DEFAULTDEVICEID_AUDIOOUTPUT     ((SLuint32) 0xFFFFFFFE)
498#define SL_DEFAULTDEVICEID_LED          ((SLuint32) 0xFFFFFFFD)
499#define SL_DEFAULTDEVICEID_VIBRA        ((SLuint32) 0xFFFFFFFC)
500#define SL_DEFAULTDEVICEID_RESERVED1    ((SLuint32) 0xFFFFFFFB)
501
502
503#define SL_DEVCONNECTION_INTEGRATED         ((SLint16) 0x0001)
504#define SL_DEVCONNECTION_ATTACHED_WIRED     ((SLint16) 0x0100)
505#define SL_DEVCONNECTION_ATTACHED_WIRELESS  ((SLint16) 0x0200)
506#define SL_DEVCONNECTION_NETWORK             ((SLint16) 0x0400)
507
508
509#define SL_DEVLOCATION_HANDSET     ((SLuint16) 0x0001)
510#define SL_DEVLOCATION_HEADSET     ((SLuint16) 0x0002)
511#define SL_DEVLOCATION_CARKIT     ((SLuint16) 0x0003)
512#define SL_DEVLOCATION_DOCK     ((SLuint16) 0x0004)
513#define SL_DEVLOCATION_REMOTE     ((SLuint16) 0x0005)
514/* Note: SL_DEVLOCATION_RESLTE is deprecated, use SL_DEVLOCATION_REMOTE instead. */
515#define SL_DEVLOCATION_RESLTE     ((SLuint16) 0x0005)
516
517
518#define SL_DEVSCOPE_UNKNOWN     ((SLuint16) 0x0001)
519#define SL_DEVSCOPE_ENVIRONMENT ((SLuint16) 0x0002)
520#define SL_DEVSCOPE_USER        ((SLuint16) 0x0003)
521
522
523typedef struct SLAudioInputDescriptor_ {
524    SLchar *pDeviceName;
525    SLint16 deviceNameLength;
526    SLint16 deviceConnection;
527    SLint16 deviceScope;
528    SLint16 deviceLocation;
529    SLboolean isForTelephony;
530    SLmilliHertz minSampleRate;
531    SLmilliHertz maxSampleRate;
532    SLboolean isFreqRangeContinuous;
533    SLmilliHertz *pSamplingRatesSupported;
534    SLint16 numOfSamplingRatesSupported;
535    SLint16 maxChannels;
536} SLAudioInputDescriptor;
537
538
539typedef struct SLAudioOutputDescriptor_ {
540    SLchar *pDeviceName;
541    SLint16 deviceNameLength;
542    SLint16 deviceConnection;
543    SLint16 deviceScope;
544    SLint16 deviceLocation;
545    SLboolean isForTelephony;
546    SLmilliHertz minSampleRate;
547    SLmilliHertz maxSampleRate;
548    SLboolean isFreqRangeContinuous;
549    SLmilliHertz *pSamplingRatesSupported;
550    SLint16 numOfSamplingRatesSupported;
551    SLint16 maxChannels;
552} SLAudioOutputDescriptor;
553
554
555
556SL_API extern const SLInterfaceID SL_IID_AUDIOIODEVICECAPABILITIES;
557
558struct SLAudioIODeviceCapabilitiesItf_;
559typedef const struct SLAudioIODeviceCapabilitiesItf_ * const * SLAudioIODeviceCapabilitiesItf;
560
561
562typedef void (SLAPIENTRY *slAvailableAudioInputsChangedCallback) (
563    SLAudioIODeviceCapabilitiesItf caller,
564    void *pContext,
565    SLuint32 deviceID,
566    SLuint32 numInputs,
567    SLboolean isNew
568);
569
570
571typedef void (SLAPIENTRY *slAvailableAudioOutputsChangedCallback) (
572    SLAudioIODeviceCapabilitiesItf caller,
573    void *pContext,
574    SLuint32 deviceID,
575    SLuint32 numOutputs,
576    SLboolean isNew
577);
578
579typedef void (SLAPIENTRY *slDefaultDeviceIDMapChangedCallback) (
580    SLAudioIODeviceCapabilitiesItf caller,
581    void *pContext,
582    SLboolean isOutput,
583    SLuint32 numDevices
584);
585
586
587struct SLAudioIODeviceCapabilitiesItf_ {
588    SLresult (*GetAvailableAudioInputs)(
589        SLAudioIODeviceCapabilitiesItf self,
590        SLuint32  *pNumInputs,
591        SLuint32 *pInputDeviceIDs
592    );
593    SLresult (*QueryAudioInputCapabilities)(
594        SLAudioIODeviceCapabilitiesItf self,
595        SLuint32 deviceId,
596        SLAudioInputDescriptor *pDescriptor
597    );
598    SLresult (*RegisterAvailableAudioInputsChangedCallback) (
599        SLAudioIODeviceCapabilitiesItf self,
600        slAvailableAudioInputsChangedCallback callback,
601        void *pContext
602    );
603    SLresult (*GetAvailableAudioOutputs)(
604        SLAudioIODeviceCapabilitiesItf self,
605        SLuint32 *pNumOutputs,
606        SLuint32 *pOutputDeviceIDs
607    );
608    SLresult (*QueryAudioOutputCapabilities)(
609        SLAudioIODeviceCapabilitiesItf self,
610        SLuint32 deviceId,
611        SLAudioOutputDescriptor *pDescriptor
612    );
613    SLresult (*RegisterAvailableAudioOutputsChangedCallback) (
614        SLAudioIODeviceCapabilitiesItf self,
615        slAvailableAudioOutputsChangedCallback callback,
616        void *pContext
617    );
618    SLresult (*RegisterDefaultDeviceIDMapChangedCallback) (
619        SLAudioIODeviceCapabilitiesItf self,
620        slDefaultDeviceIDMapChangedCallback callback,
621        void *pContext
622    );
623    SLresult (*GetAssociatedAudioInputs) (
624        SLAudioIODeviceCapabilitiesItf self,
625        SLuint32 deviceId,
626        SLuint32 *pNumAudioInputs,
627        SLuint32 *pAudioInputDeviceIDs
628    );
629    SLresult (*GetAssociatedAudioOutputs) (
630        SLAudioIODeviceCapabilitiesItf self,
631        SLuint32 deviceId,
632        SLuint32 *pNumAudioOutputs,
633        SLuint32 *pAudioOutputDeviceIDs
634    );
635    SLresult (*GetDefaultAudioDevices) (
636        SLAudioIODeviceCapabilitiesItf self,
637        SLuint32 defaultDeviceID,
638        SLuint32 *pNumAudioDevices,
639        SLuint32 *pAudioDeviceIDs
640    );
641    SLresult (*QuerySampleFormatsSupported)(
642        SLAudioIODeviceCapabilitiesItf self,
643        SLuint32 deviceId,
644        SLmilliHertz samplingRate,
645        SLint32 *pSampleFormats,
646        SLuint32 *pNumOfSampleFormats
647    );
648};
649
650
651
652/*---------------------------------------------------------------------------*/
653/* Capabilities of the LED array IODevice                                    */
654/*---------------------------------------------------------------------------*/
655
656typedef struct SLLEDDescriptor_ {
657    SLuint8   ledCount;
658    SLuint8   primaryLED;
659    SLuint32  colorMask;
660} SLLEDDescriptor;
661
662
663/*---------------------------------------------------------------------------*/
664/* LED Array interface                                                       */
665/*---------------------------------------------------------------------------*/
666
667typedef struct SLHSL_ {
668    SLmillidegree  hue;
669    SLpermille     saturation;
670    SLpermille     lightness;
671} SLHSL;
672
673
674SL_API extern const SLInterfaceID SL_IID_LED;
675
676struct SLLEDArrayItf_;
677typedef const struct SLLEDArrayItf_ * const * SLLEDArrayItf;
678
679struct SLLEDArrayItf_ {
680    SLresult (*ActivateLEDArray) (
681        SLLEDArrayItf self,
682        SLuint32 lightMask
683    );
684    SLresult (*IsLEDArrayActivated) (
685        SLLEDArrayItf self,
686        SLuint32 *lightMask
687    );
688    SLresult (*SetColor) (
689        SLLEDArrayItf self,
690        SLuint8 index,
691        const SLHSL *color
692    );
693    SLresult (*GetColor) (
694        SLLEDArrayItf self,
695        SLuint8 index,
696        SLHSL *color
697    );
698};
699
700/*---------------------------------------------------------------------------*/
701/* Capabilities of the Vibra IODevice                                        */
702/*---------------------------------------------------------------------------*/
703
704typedef struct SLVibraDescriptor_ {
705    SLboolean supportsFrequency;
706    SLboolean supportsIntensity;
707    SLmilliHertz  minFrequency;
708    SLmilliHertz  maxFrequency;
709} SLVibraDescriptor;
710
711
712
713/*---------------------------------------------------------------------------*/
714/* Vibra interface                                                           */
715/*---------------------------------------------------------------------------*/
716
717
718SL_API extern const SLInterfaceID SL_IID_VIBRA;
719
720
721struct SLVibraItf_;
722typedef const struct SLVibraItf_ * const * SLVibraItf;
723
724struct SLVibraItf_ {
725    SLresult (*Vibrate) (
726        SLVibraItf self,
727        SLboolean vibrate
728    );
729    SLresult (*IsVibrating) (
730        SLVibraItf self,
731        SLboolean *pVibrating
732    );
733    SLresult (*SetFrequency) (
734        SLVibraItf self,
735        SLmilliHertz frequency
736    );
737    SLresult (*GetFrequency) (
738        SLVibraItf self,
739        SLmilliHertz *pFrequency
740    );
741    SLresult (*SetIntensity) (
742        SLVibraItf self,
743        SLpermille intensity
744    );
745    SLresult (*GetIntensity) (
746        SLVibraItf self,
747        SLpermille *pIntensity
748    );
749};
750
751
752/*---------------------------------------------------------------------------*/
753/* Meta data extraction related types and interface                          */
754/*---------------------------------------------------------------------------*/
755
756#define SL_CHARACTERENCODING_UNKNOWN            ((SLuint32) 0x00000000)
757#define SL_CHARACTERENCODING_BINARY       ((SLuint32) 0x00000001)
758#define SL_CHARACTERENCODING_ASCII        ((SLuint32) 0x00000002)
759#define SL_CHARACTERENCODING_BIG5         ((SLuint32) 0x00000003)
760#define SL_CHARACTERENCODING_CODEPAGE1252        ((SLuint32) 0x00000004)
761#define SL_CHARACTERENCODING_GB2312            ((SLuint32) 0x00000005)
762#define SL_CHARACTERENCODING_HZGB2312            ((SLuint32) 0x00000006)
763#define SL_CHARACTERENCODING_GB12345            ((SLuint32) 0x00000007)
764#define SL_CHARACTERENCODING_GB18030            ((SLuint32) 0x00000008)
765#define SL_CHARACTERENCODING_GBK                ((SLuint32) 0x00000009)
766#define SL_CHARACTERENCODING_IMAPUTF7            ((SLuint32) 0x0000000A)
767#define SL_CHARACTERENCODING_ISO2022JP            ((SLuint32) 0x0000000B)
768#define SL_CHARACTERENCODING_ISO2022JP1        ((SLuint32) 0x0000000B)
769#define SL_CHARACTERENCODING_ISO88591            ((SLuint32) 0x0000000C)
770#define SL_CHARACTERENCODING_ISO885910            ((SLuint32) 0x0000000D)
771#define SL_CHARACTERENCODING_ISO885913            ((SLuint32) 0x0000000E)
772#define SL_CHARACTERENCODING_ISO885914            ((SLuint32) 0x0000000F)
773#define SL_CHARACTERENCODING_ISO885915            ((SLuint32) 0x00000010)
774#define SL_CHARACTERENCODING_ISO88592            ((SLuint32) 0x00000011)
775#define SL_CHARACTERENCODING_ISO88593            ((SLuint32) 0x00000012)
776#define SL_CHARACTERENCODING_ISO88594            ((SLuint32) 0x00000013)
777#define SL_CHARACTERENCODING_ISO88595            ((SLuint32) 0x00000014)
778#define SL_CHARACTERENCODING_ISO88596            ((SLuint32) 0x00000015)
779#define SL_CHARACTERENCODING_ISO88597            ((SLuint32) 0x00000016)
780#define SL_CHARACTERENCODING_ISO88598            ((SLuint32) 0x00000017)
781#define SL_CHARACTERENCODING_ISO88599            ((SLuint32) 0x00000018)
782#define SL_CHARACTERENCODING_ISOEUCJP            ((SLuint32) 0x00000019)
783#define SL_CHARACTERENCODING_SHIFTJIS            ((SLuint32) 0x0000001A)
784#define SL_CHARACTERENCODING_SMS7BIT            ((SLuint32) 0x0000001B)
785#define SL_CHARACTERENCODING_UTF7            ((SLuint32) 0x0000001C)
786#define SL_CHARACTERENCODING_UTF8            ((SLuint32) 0x0000001D)
787#define SL_CHARACTERENCODING_JAVACONFORMANTUTF8    ((SLuint32) 0x0000001E)
788#define SL_CHARACTERENCODING_UTF16BE            ((SLuint32) 0x0000001F)
789#define SL_CHARACTERENCODING_UTF16LE            ((SLuint32) 0x00000020)
790
791
792#define SL_METADATA_FILTER_KEY        ((SLuint8) 0x01)
793#define SL_METADATA_FILTER_LANG        ((SLuint8) 0x02)
794#define SL_METADATA_FILTER_ENCODING    ((SLuint8) 0x04)
795
796
797typedef struct SLMetadataInfo_ {
798    SLuint32     size;
799    SLuint32     encoding;
800    SLchar       langCountry[16];
801    SLuint8      data[1];
802} SLMetadataInfo;
803
804SL_API extern const SLInterfaceID SL_IID_METADATAEXTRACTION;
805
806struct SLMetadataExtractionItf_;
807typedef const struct SLMetadataExtractionItf_ * const * SLMetadataExtractionItf;
808
809
810struct SLMetadataExtractionItf_ {
811    SLresult (*GetItemCount) (
812        SLMetadataExtractionItf self,
813        SLuint32 *pItemCount
814    );
815    SLresult (*GetKeySize) (
816        SLMetadataExtractionItf self,
817        SLuint32 index,
818        SLuint32 *pKeySize
819    );
820    SLresult (*GetKey) (
821        SLMetadataExtractionItf self,
822        SLuint32 index,
823        SLuint32 keySize,
824        SLMetadataInfo *pKey
825    );
826    SLresult (*GetValueSize) (
827        SLMetadataExtractionItf self,
828        SLuint32 index,
829        SLuint32 *pValueSize
830    );
831    SLresult (*GetValue) (
832        SLMetadataExtractionItf self,
833        SLuint32 index,
834        SLuint32 valueSize,
835        SLMetadataInfo *pValue
836    );
837    SLresult (*AddKeyFilter) (
838        SLMetadataExtractionItf self,
839        SLuint32 keySize,
840        const void *pKey,
841        SLuint32 keyEncoding,
842        const SLchar *pValueLangCountry,
843        SLuint32 valueEncoding,
844        SLuint8 filterMask
845    );
846    SLresult (*ClearKeyFilter) (
847        SLMetadataExtractionItf self
848    );
849};
850
851/*---------------------------------------------------------------------------*/
852/* Meta data message related types and interface                          */
853/*---------------------------------------------------------------------------*/
854
855SL_API extern const SLInterfaceID SL_IID_METADATAMESSAGE;
856
857struct SLMetadataMessageItf_;
858typedef const struct SLMetadataMessageItf_ * const * SLMetadataMessageItf;
859
860typedef void (SLAPIENTRY *slMetadataCallback) (
861    SLMetadataMessageItf caller,
862    void *pContext,
863    SLuint32 index
864);
865
866struct SLMetadataMessageItf_ {
867    SLresult (*RegisterMetadataCallback) (
868        SLMetadataMessageItf self,
869        slMetadataCallback callback,
870        void *pContext
871    );
872};
873
874
875/*---------------------------------------------------------------------------*/
876/* Meta data traversal related types and interface                           */
877/*---------------------------------------------------------------------------*/
878
879#define SL_METADATATRAVERSALMODE_ALL    ((SLuint32) 0x00000001)
880#define SL_METADATATRAVERSALMODE_NODE    ((SLuint32) 0x00000002)
881
882
883#define SL_NODETYPE_UNSPECIFIED    ((SLuint32) 0x00000001)
884#define SL_NODETYPE_AUDIO        ((SLuint32) 0x00000002)
885#define SL_NODETYPE_VIDEO        ((SLuint32) 0x00000003)
886#define SL_NODETYPE_IMAGE        ((SLuint32) 0x00000004)
887
888#define SL_NODE_PARENT 0xFFFFFFFF
889
890SL_API extern const SLInterfaceID SL_IID_METADATATRAVERSAL;
891
892struct SLMetadataTraversalItf_;
893typedef const struct SLMetadataTraversalItf_ * const * SLMetadataTraversalItf;
894
895struct SLMetadataTraversalItf_ {
896    SLresult (*SetMode) (
897        SLMetadataTraversalItf self,
898        SLuint32 mode
899    );
900    SLresult (*GetChildCount) (
901        SLMetadataTraversalItf self,
902        SLuint32 *pCount
903    );
904    SLresult (*GetChildMIMETypeSize) (
905        SLMetadataTraversalItf self,
906        SLuint32 index,
907        SLuint32 *pSize
908    );
909    SLresult (*GetChildInfo) (
910        SLMetadataTraversalItf self,
911        SLuint32 index,
912        SLint32 *pNodeID,
913        SLuint32 *pType,
914        SLuint32 size,
915        SLchar *pMimeType
916    );
917    SLresult (*SetActiveNode) (
918        SLMetadataTraversalItf self,
919        SLuint32 index
920    );
921};
922
923/*---------------------------------------------------------------------------*/
924/* Dynamic Source types and interface                                        */
925/*---------------------------------------------------------------------------*/
926
927SL_API extern const SLInterfaceID SL_IID_DYNAMICSOURCE;
928
929struct SLDynamicSourceItf_;
930typedef const struct SLDynamicSourceItf_ * const * SLDynamicSourceItf;
931
932struct SLDynamicSourceItf_ {
933    SLresult (*SetSource) (
934        SLDynamicSourceItf self,
935        const SLDataSource *pDataSource
936    );
937};
938
939/*---------------------------------------------------------------------------*/
940/* Dynamic Source/Sink Change Interface                                      */
941/*---------------------------------------------------------------------------*/
942SL_API extern const SLInterfaceID SL_IID_DYNAMICSOURCESINKCHANGE;
943
944struct SLDynamicSourceSinkChangeItf_;
945typedef const struct SLDynamicSourceSinkChangeItf_ * const * SLDynamicSourceSinkChangeItf;
946
947typedef void (SLAPIENTRY *slSourceChangeCallback)(
948    SLDynamicSourceSinkChangeItf caller,
949    void *pContext,
950    SLuint32 resultCode,
951    const SLDataSource *pExistingDataSource,
952    const SLDataSource *pNewDataSource
953);
954
955typedef void (SLAPIENTRY *slSinkChangeCallback)(
956    SLDynamicSourceSinkChangeItf caller,
957    void *pContext,
958    SLuint32 resultCode,
959    const SLDataSource *pExistingDataSink,
960    const SLDataSource *pNewDataSink
961);
962
963struct SLDynamicSourceSinkChangeItf_ {
964    SLresult (*ChangeSource) (
965        SLDynamicSourceSinkChangeItf self,
966        const SLDataSource * pExistingDataSource,
967        const SLDataSource * pNewDataSource,
968        SLboolean async
969    );
970    SLresult (*ChangeSink) (
971        SLDynamicSourceSinkChangeItf self,
972        const SLDataSink * pExistingDataSink,
973        const SLDataSink * pNewDataSink,
974        SLboolean async
975    );
976    SLresult (*RegisterSourceChangeCallback) (
977        SLDynamicSourceSinkChangeItf self,
978        slSourceChangeCallback callback,
979        void * pContext
980    );
981    SLresult (*RegisterSinkChangeCallback) (
982        SLDynamicSourceSinkChangeItf self,
983        slSinkChangeCallback callback,
984        void * pContext
985    );
986};
987
988
989/*---------------------------------------------------------------------------*/
990/* Output Mix interface                                                      */
991/*---------------------------------------------------------------------------*/
992
993SL_API extern const SLInterfaceID SL_IID_OUTPUTMIX;
994
995struct SLOutputMixItf_;
996typedef const struct SLOutputMixItf_ * const * SLOutputMixItf;
997
998typedef void (SLAPIENTRY *slMixDeviceChangeCallback) (
999    SLOutputMixItf caller,
1000    void *pContext
1001);
1002
1003
1004struct SLOutputMixItf_ {
1005    SLresult (*GetDestinationOutputDeviceIDs) (
1006        SLOutputMixItf self,
1007        SLint32 *pNumDevices,
1008        SLuint32 *pDeviceIDs
1009    );
1010    SLresult (*RegisterDeviceChangeCallback) (
1011        SLOutputMixItf self,
1012        slMixDeviceChangeCallback callback,
1013        void *pContext
1014    );
1015    SLresult (*ReRoute)(
1016        SLOutputMixItf self,
1017        SLint32 numOutputDevices,
1018        SLuint32 *pOutputDeviceIDs
1019    );
1020};
1021
1022
1023/*---------------------------------------------------------------------------*/
1024/* Playback interface                                                        */
1025/*---------------------------------------------------------------------------*/
1026
1027/** Playback states */
1028#define SL_PLAYSTATE_STOPPED    ((SLuint32) 0x00000001)
1029#define SL_PLAYSTATE_PAUSED    ((SLuint32) 0x00000002)
1030#define SL_PLAYSTATE_PLAYING    ((SLuint32) 0x00000003)
1031
1032/** Play events **/
1033#define SL_PLAYEVENT_HEADATEND            ((SLuint32) 0x00000001)
1034#define SL_PLAYEVENT_HEADATMARKER        ((SLuint32) 0x00000002)
1035#define SL_PLAYEVENT_HEADATNEWPOS        ((SLuint32) 0x00000004)
1036#define SL_PLAYEVENT_HEADMOVING            ((SLuint32) 0x00000008)
1037#define SL_PLAYEVENT_HEADSTALLED        ((SLuint32) 0x00000010)
1038#define SL_PLAYEVENT_DURATIONUPDATED    ((SLuint32) 0x00000020)
1039
1040#define SL_TIME_UNKNOWN    ((SLuint32) 0xFFFFFFFF)
1041
1042
1043SL_API extern const SLInterfaceID SL_IID_PLAY;
1044
1045/** Playback interface methods */
1046
1047struct SLPlayItf_;
1048typedef const struct SLPlayItf_ * const * SLPlayItf;
1049
1050typedef void (SLAPIENTRY *slPlayCallback) (
1051    SLPlayItf caller,
1052    void *pContext,
1053    SLuint32 event
1054);
1055
1056struct SLPlayItf_ {
1057    SLresult (*SetPlayState) (
1058        SLPlayItf self,
1059        SLuint32 state
1060    );
1061    SLresult (*GetPlayState) (
1062        SLPlayItf self,
1063        SLuint32 *pState
1064    );
1065    SLresult (*GetDuration) (
1066        SLPlayItf self,
1067        SLmillisecond *pMsec
1068    );
1069    SLresult (*GetPosition) (
1070        SLPlayItf self,
1071        SLmillisecond *pMsec
1072    );
1073    SLresult (*RegisterCallback) (
1074        SLPlayItf self,
1075        slPlayCallback callback,
1076        void *pContext
1077    );
1078    SLresult (*SetCallbackEventsMask) (
1079        SLPlayItf self,
1080        SLuint32 eventFlags
1081    );
1082    SLresult (*GetCallbackEventsMask) (
1083        SLPlayItf self,
1084        SLuint32 *pEventFlags
1085    );
1086    SLresult (*SetMarkerPosition) (
1087        SLPlayItf self,
1088        SLmillisecond mSec
1089    );
1090    SLresult (*ClearMarkerPosition) (
1091        SLPlayItf self
1092    );
1093    SLresult (*GetMarkerPosition) (
1094        SLPlayItf self,
1095        SLmillisecond *pMsec
1096    );
1097    SLresult (*SetPositionUpdatePeriod) (
1098        SLPlayItf self,
1099        SLmillisecond mSec
1100    );
1101    SLresult (*GetPositionUpdatePeriod) (
1102        SLPlayItf self,
1103        SLmillisecond *pMsec
1104    );
1105};
1106
1107/*---------------------------------------------------------------------------*/
1108/* Prefetch status interface                                                 */
1109/*---------------------------------------------------------------------------*/
1110
1111#define SL_PREFETCHEVENT_STATUSCHANGE         ((SLuint32) 0x00000001)
1112#define SL_PREFETCHEVENT_FILLLEVELCHANGE     ((SLuint32) 0x00000002)
1113#define SL_PREFETCHEVENT_ERROR               ((SLuint32) 0x00000003)
1114#define SL_PREFETCHEVENT_ERROR_UNRECOVERABLE ((SLuint32) 0x00000004)
1115
1116
1117#define SL_PREFETCHSTATUS_UNDERFLOW            ((SLuint32) 0x00000001)
1118#define SL_PREFETCHSTATUS_SUFFICIENTDATA    ((SLuint32) 0x00000002)
1119#define SL_PREFETCHSTATUS_OVERFLOW            ((SLuint32) 0x00000003)
1120
1121
1122SL_API extern const SLInterfaceID SL_IID_PREFETCHSTATUS;
1123
1124
1125/** Prefetch status interface methods */
1126
1127struct SLPrefetchStatusItf_;
1128typedef const struct SLPrefetchStatusItf_ * const * SLPrefetchStatusItf;
1129
1130typedef void (SLAPIENTRY *slPrefetchCallback) (
1131    SLPrefetchStatusItf caller,
1132    void *pContext,
1133    SLuint32 event
1134);
1135
1136struct SLPrefetchStatusItf_ {
1137    SLresult (*GetPrefetchStatus) (
1138        SLPrefetchStatusItf self,
1139        SLuint32 *pStatus
1140    );
1141    SLresult (*GetFillLevel) (
1142        SLPrefetchStatusItf self,
1143        SLpermille *pLevel
1144    );
1145    SLresult (*RegisterCallback) (
1146        SLPrefetchStatusItf self,
1147        slPrefetchCallback callback,
1148        void *pContext
1149    );
1150    SLresult (*SetCallbackEventsMask) (
1151        SLPrefetchStatusItf self,
1152        SLuint32 eventFlags
1153    );
1154    SLresult (*GetCallbackEventsMask) (
1155        SLPrefetchStatusItf self,
1156        SLuint32 *pEventFlags
1157    );
1158    SLresult (*SetFillUpdatePeriod) (
1159        SLPrefetchStatusItf self,
1160        SLpermille period
1161    );
1162    SLresult (*GetFillUpdatePeriod) (
1163        SLPrefetchStatusItf self,
1164        SLpermille *pPeriod
1165    );
1166    SLresult (*GetError) (
1167        SLPrefetchStatusItf self,
1168        SLresult *pResult
1169    );
1170};
1171
1172/*---------------------------------------------------------------------------*/
1173/* Playback Rate interface                                                   */
1174/*---------------------------------------------------------------------------*/
1175
1176#define SL_RATEPROP_RESERVED1                  ((SLuint32) 0x00000001)
1177#define SL_RATEPROP_RESERVED2                  ((SLuint32) 0x00000002)
1178#define SL_RATEPROP_SILENTAUDIO                ((SLuint32) 0x00000100)
1179#define SL_RATEPROP_STAGGEREDAUDIO    ((SLuint32) 0x00000200)
1180#define SL_RATEPROP_NOPITCHCORAUDIO    ((SLuint32) 0x00000400)
1181#define SL_RATEPROP_PITCHCORAUDIO    ((SLuint32) 0x00000800)
1182
1183
1184SL_API extern const SLInterfaceID SL_IID_PLAYBACKRATE;
1185
1186struct SLPlaybackRateItf_;
1187typedef const struct SLPlaybackRateItf_ * const * SLPlaybackRateItf;
1188
1189struct SLPlaybackRateItf_ {
1190    SLresult (*SetRate)(
1191        SLPlaybackRateItf self,
1192        SLpermille rate
1193    );
1194    SLresult (*GetRate)(
1195        SLPlaybackRateItf self,
1196        SLpermille *pRate
1197    );
1198    SLresult (*SetPropertyConstraints)(
1199        SLPlaybackRateItf self,
1200        SLuint32 constraints
1201    );
1202    SLresult (*GetProperties)(
1203        SLPlaybackRateItf self,
1204        SLuint32 *pProperties
1205    );
1206    SLresult (*GetCapabilitiesOfRate)(
1207        SLPlaybackRateItf self,
1208        SLpermille rate,
1209        SLuint32 *pCapabilities
1210    );
1211    SLresult (*GetRateRange) (
1212        SLPlaybackRateItf self,
1213        SLuint8 index,
1214        SLpermille *pMinRate,
1215        SLpermille *pMaxRate,
1216        SLpermille *pStepSize,
1217        SLuint32 *pCapabilities
1218    );
1219};
1220
1221/*---------------------------------------------------------------------------*/
1222/* Seek Interface                                                            */
1223/*---------------------------------------------------------------------------*/
1224
1225#define SL_SEEKMODE_FAST        ((SLuint32) 0x0001)
1226#define SL_SEEKMODE_ACCURATE    ((SLuint32) 0x0002)
1227
1228SL_API extern const SLInterfaceID SL_IID_SEEK;
1229
1230struct SLSeekItf_;
1231typedef const struct SLSeekItf_ * const * SLSeekItf;
1232
1233struct SLSeekItf_ {
1234    SLresult (*SetPosition)(
1235        SLSeekItf self,
1236        SLmillisecond pos,
1237        SLuint32 seekMode
1238    );
1239    SLresult (*SetLoop)(
1240        SLSeekItf self,
1241        SLboolean loopEnable,
1242        SLmillisecond startPos,
1243        SLmillisecond endPos
1244    );
1245    SLresult (*GetLoop)(
1246        SLSeekItf self,
1247        SLboolean *pLoopEnabled,
1248        SLmillisecond *pStartPos,
1249        SLmillisecond *pEndPos
1250    );
1251};
1252
1253/*---------------------------------------------------------------------------*/
1254/* Standard Recording Interface                                              */
1255/*---------------------------------------------------------------------------*/
1256
1257/** Recording states */
1258#define SL_RECORDSTATE_STOPPED     ((SLuint32) 0x00000001)
1259#define SL_RECORDSTATE_PAUSED    ((SLuint32) 0x00000002)
1260#define SL_RECORDSTATE_RECORDING    ((SLuint32) 0x00000003)
1261
1262
1263/** Record event **/
1264#define SL_RECORDEVENT_HEADATLIMIT            ((SLuint32) 0x00000001)
1265#define SL_RECORDEVENT_HEADATMARKER            ((SLuint32) 0x00000002)
1266#define SL_RECORDEVENT_HEADATNEWPOS            ((SLuint32) 0x00000004)
1267#define SL_RECORDEVENT_HEADMOVING            ((SLuint32) 0x00000008)
1268#define SL_RECORDEVENT_HEADSTALLED             ((SLuint32) 0x00000010)
1269/* Note: SL_RECORDEVENT_BUFFER_INSUFFICIENT is deprecated, use SL_RECORDEVENT_BUFFER_FULL instead. */
1270#define SL_RECORDEVENT_BUFFER_INSUFFICIENT  ((SLuint32) 0x00000020)
1271#define SL_RECORDEVENT_BUFFER_FULL            ((SLuint32) 0x00000020)
1272#define SL_RECORDEVENT_BUFFERQUEUE_STARVED    ((SLuint32) 0x00000040)
1273
1274
1275SL_API extern const SLInterfaceID SL_IID_RECORD;
1276
1277struct SLRecordItf_;
1278typedef const struct SLRecordItf_ * const * SLRecordItf;
1279
1280typedef void (SLAPIENTRY *slRecordCallback) (
1281    SLRecordItf caller,
1282    void *pContext,
1283    SLuint32 event
1284);
1285
1286/** Recording interface methods */
1287struct SLRecordItf_ {
1288    SLresult (*SetRecordState) (
1289        SLRecordItf self,
1290        SLuint32 state
1291    );
1292    SLresult (*GetRecordState) (
1293        SLRecordItf self,
1294        SLuint32 *pState
1295    );
1296    SLresult (*SetDurationLimit) (
1297        SLRecordItf self,
1298        SLmillisecond msec
1299    );
1300    SLresult (*GetPosition) (
1301        SLRecordItf self,
1302        SLmillisecond *pMsec
1303    );
1304    SLresult (*RegisterCallback) (
1305        SLRecordItf self,
1306        slRecordCallback callback,
1307        void *pContext
1308    );
1309    SLresult (*SetCallbackEventsMask) (
1310        SLRecordItf self,
1311        SLuint32 eventFlags
1312    );
1313    SLresult (*GetCallbackEventsMask) (
1314        SLRecordItf self,
1315        SLuint32 *pEventFlags
1316    );
1317    SLresult (*SetMarkerPosition) (
1318        SLRecordItf self,
1319        SLmillisecond mSec
1320    );
1321    SLresult (*ClearMarkerPosition) (
1322        SLRecordItf self
1323    );
1324    SLresult (*GetMarkerPosition) (
1325        SLRecordItf self,
1326        SLmillisecond *pMsec
1327    );
1328    SLresult (*SetPositionUpdatePeriod) (
1329        SLRecordItf self,
1330        SLmillisecond mSec
1331    );
1332    SLresult (*GetPositionUpdatePeriod) (
1333        SLRecordItf self,
1334        SLmillisecond *pMsec
1335    );
1336};
1337
1338/*---------------------------------------------------------------------------*/
1339/* Equalizer interface                                                       */
1340/*---------------------------------------------------------------------------*/
1341
1342#define SL_EQUALIZER_UNDEFINED                ((SLuint16) 0xFFFF)
1343
1344SL_API extern const SLInterfaceID SL_IID_EQUALIZER;
1345
1346struct SLEqualizerItf_;
1347typedef const struct SLEqualizerItf_ * const * SLEqualizerItf;
1348
1349struct SLEqualizerItf_ {
1350    SLresult (*SetEnabled)(
1351        SLEqualizerItf self,
1352        SLboolean enabled
1353    );
1354    SLresult (*IsEnabled)(
1355        SLEqualizerItf self,
1356        SLboolean *pEnabled
1357    );
1358    SLresult (*GetNumberOfBands)(
1359        SLEqualizerItf self,
1360        SLuint16 *pAmount
1361    );
1362    SLresult (*GetBandLevelRange)(
1363        SLEqualizerItf self,
1364        SLmillibel *pMin,
1365        SLmillibel *pMax
1366    );
1367    SLresult (*SetBandLevel)(
1368        SLEqualizerItf self,
1369        SLuint16 band,
1370        SLmillibel level
1371    );
1372    SLresult (*GetBandLevel)(
1373        SLEqualizerItf self,
1374        SLuint16 band,
1375        SLmillibel *pLevel
1376    );
1377    SLresult (*GetCenterFreq)(
1378        SLEqualizerItf self,
1379        SLuint16 band,
1380        SLmilliHertz *pCenter
1381    );
1382    SLresult (*GetBandFreqRange)(
1383        SLEqualizerItf self,
1384        SLuint16 band,
1385        SLmilliHertz *pMin,
1386        SLmilliHertz *pMax
1387    );
1388    SLresult (*GetBand)(
1389        SLEqualizerItf self,
1390        SLmilliHertz frequency,
1391        SLuint16 *pBand
1392    );
1393    SLresult (*GetCurrentPreset)(
1394        SLEqualizerItf self,
1395        SLuint16 *pPreset
1396    );
1397    SLresult (*UsePreset)(
1398        SLEqualizerItf self,
1399        SLuint16 index
1400    );
1401    SLresult (*GetNumberOfPresets)(
1402        SLEqualizerItf self,
1403        SLuint16 *pNumPresets
1404    );
1405    SLresult (*GetPresetName)(
1406        SLEqualizerItf self,
1407        SLuint16 index,
1408        SLuint16 * pSize,
1409        SLchar * pName
1410    );
1411};
1412
1413/*---------------------------------------------------------------------------*/
1414/* Volume Interface                                                           */
1415/* --------------------------------------------------------------------------*/
1416
1417SL_API extern const SLInterfaceID SL_IID_VOLUME;
1418
1419struct SLVolumeItf_;
1420typedef const struct SLVolumeItf_ * const * SLVolumeItf;
1421
1422struct SLVolumeItf_ {
1423    SLresult (*SetVolumeLevel) (
1424        SLVolumeItf self,
1425        SLmillibel level
1426    );
1427    SLresult (*GetVolumeLevel) (
1428        SLVolumeItf self,
1429        SLmillibel *pLevel
1430    );
1431    SLresult (*GetMaxVolumeLevel) (
1432        SLVolumeItf  self,
1433        SLmillibel *pMaxLevel
1434    );
1435    SLresult (*SetMute) (
1436        SLVolumeItf self,
1437        SLboolean mute
1438    );
1439    SLresult (*GetMute) (
1440        SLVolumeItf self,
1441        SLboolean *pMute
1442    );
1443    SLresult (*EnableStereoPosition) (
1444        SLVolumeItf self,
1445        SLboolean enable
1446    );
1447    SLresult (*IsEnabledStereoPosition) (
1448        SLVolumeItf self,
1449        SLboolean *pEnable
1450    );
1451    SLresult (*SetStereoPosition) (
1452        SLVolumeItf self,
1453        SLpermille stereoPosition
1454    );
1455    SLresult (*GetStereoPosition) (
1456        SLVolumeItf self,
1457        SLpermille *pStereoPosition
1458    );
1459};
1460
1461
1462/*---------------------------------------------------------------------------*/
1463/* Device Volume Interface                                                   */
1464/* --------------------------------------------------------------------------*/
1465
1466SL_API extern const SLInterfaceID SL_IID_DEVICEVOLUME;
1467
1468struct SLDeviceVolumeItf_;
1469typedef const struct SLDeviceVolumeItf_ * const * SLDeviceVolumeItf;
1470
1471struct SLDeviceVolumeItf_ {
1472    SLresult (*GetVolumeScale) (
1473        SLDeviceVolumeItf self,
1474        SLuint32 deviceID,
1475        SLint32 *pMinValue,
1476        SLint32 *pMaxValue,
1477        SLboolean *pIsMillibelScale
1478    );
1479    SLresult (*SetVolume) (
1480        SLDeviceVolumeItf self,
1481        SLuint32 deviceID,
1482        SLint32 volume
1483    );
1484    SLresult (*GetVolume) (
1485        SLDeviceVolumeItf self,
1486        SLuint32 deviceID,
1487        SLint32 *pVolume
1488    );
1489};
1490
1491
1492/*---------------------------------------------------------------------------*/
1493/* Buffer Queue Interface                                                    */
1494/*---------------------------------------------------------------------------*/
1495/** Flags for buffer queue events */
1496#define SL_BUFFERQUEUEEVENT_PROCESSED    ((SLuint32) 0x00000001)
1497#define SL_BUFFERQUEUEEVENT_UNREALIZED    ((SLuint32) 0x00000002)
1498#define SL_BUFFERQUEUEEVENT_CLEARED        ((SLuint32) 0x00000004)
1499#define SL_BUFFERQUEUEEVENT_STOPPED        ((SLuint32) 0x00000008)
1500#define SL_BUFFERQUEUEEVENT_ERROR        ((SLuint32) 0x00000010)
1501#define SL_BUFFERQUEUEEVENT_CONTENT_END    ((SLuint32) 0x00000020)
1502
1503SL_API extern const SLInterfaceID SL_IID_BUFFERQUEUE;
1504
1505struct SLBufferQueueItf_;
1506typedef const struct SLBufferQueueItf_ * const * SLBufferQueueItf;
1507
1508typedef void (SLAPIENTRY *slBufferQueueCallback) (
1509    SLBufferQueueItf caller,
1510    SLuint32 eventFlags,
1511    const void *pBuffer,
1512    SLuint32 bufferSize,
1513    SLuint32 dataUsed,
1514    void *pContext
1515);
1516
1517
1518/** Buffer queue state **/
1519
1520typedef struct SLBufferQueueState_ {
1521    SLuint32    count;
1522    SLuint32    index;
1523} SLBufferQueueState;
1524
1525
1526struct SLBufferQueueItf_ {
1527    SLresult (*Enqueue) (
1528        SLBufferQueueItf self,
1529        const void *pBuffer,
1530        SLuint32 size,
1531        SLboolean isLastBuffer
1532    );
1533    SLresult (*Clear) (
1534        SLBufferQueueItf self
1535    );
1536    SLresult (*GetState) (
1537        SLBufferQueueItf self,
1538        SLBufferQueueState *pState
1539    );
1540    SLresult (*RegisterCallback) (
1541        SLBufferQueueItf self,
1542        slBufferQueueCallback callback,
1543        void* pContext
1544    );
1545    SLresult (*SetCallbackEventsMask) (
1546        SLBufferQueueItf self,
1547        SLuint32 eventFlags
1548    );
1549    SLresult (*GetCallbackEventsMask) (
1550        SLBufferQueueItf self,
1551        SLuint32 *pEventFlags
1552    );
1553
1554};
1555
1556/*---------------------------------------------------------------------------*/
1557/* ConfigExtension                                                           */
1558/*---------------------------------------------------------------------------*/
1559SL_API extern const SLInterfaceID SL_IID_CONFIGEXTENSION;
1560
1561struct SLConfigExtensionsItf_;
1562typedef const struct SLConfigExtensionsItf_
1563    * const * SLConfigExtensionsItf;
1564
1565struct SLConfigExtensionsItf_ {
1566    SLresult (*SetConfiguration) (
1567        SLConfigExtensionsItf self,
1568        const SLchar * pConfigKey,
1569        SLuint32 valueSize,
1570        const void * pConfigValue
1571    );
1572    SLresult (*GetConfiguration) (
1573        SLConfigExtensionsItf self,
1574        const SLchar * pConfigKey,
1575        SLuint32 * pValueSize,
1576        void * pConfigValue
1577    );
1578};
1579
1580
1581/*---------------------------------------------------------------------------*/
1582/* PresetReverb                                                              */
1583/*---------------------------------------------------------------------------*/
1584
1585#define SL_REVERBPRESET_NONE        ((SLuint16) 0x0000)
1586#define SL_REVERBPRESET_SMALLROOM    ((SLuint16) 0x0001)
1587#define SL_REVERBPRESET_MEDIUMROOM    ((SLuint16) 0x0002)
1588#define SL_REVERBPRESET_LARGEROOM    ((SLuint16) 0x0003)
1589#define SL_REVERBPRESET_MEDIUMHALL    ((SLuint16) 0x0004)
1590#define SL_REVERBPRESET_LARGEHALL    ((SLuint16) 0x0005)
1591#define SL_REVERBPRESET_PLATE         ((SLuint16) 0x0006)
1592
1593
1594SL_API extern const SLInterfaceID SL_IID_PRESETREVERB;
1595
1596struct SLPresetReverbItf_;
1597typedef const struct SLPresetReverbItf_ * const * SLPresetReverbItf;
1598
1599struct SLPresetReverbItf_ {
1600    SLresult (*SetPreset) (
1601        SLPresetReverbItf self,
1602        SLuint16 preset
1603    );
1604    SLresult (*GetPreset) (
1605        SLPresetReverbItf self,
1606        SLuint16 *pPreset
1607    );
1608};
1609
1610
1611/*---------------------------------------------------------------------------*/
1612/* EnvironmentalReverb                                                       */
1613/*---------------------------------------------------------------------------*/
1614
1615#define SL_I3DL2_ENVIRONMENT_PRESET_DEFAULT \
1616    { SL_MILLIBEL_MIN,    0,  1000,   500, SL_MILLIBEL_MIN,  20, SL_MILLIBEL_MIN,  40, 1000,1000 }
1617#define SL_I3DL2_ENVIRONMENT_PRESET_GENERIC \
1618    { -1000, -100, 1490,  830, -2602,   7,   200,  11, 1000,1000 }
1619#define SL_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL \
1620    { -1000,-6000,  170,  100, -1204,   1,   207,   2, 1000,1000 }
1621#define SL_I3DL2_ENVIRONMENT_PRESET_ROOM \
1622    { -1000, -454,  400,  830, -1646,   2,    53,   3, 1000,1000 }
1623#define SL_I3DL2_ENVIRONMENT_PRESET_BATHROOM \
1624    { -1000,-1200, 1490,  540,  -370,   7,  1030,  11, 1000, 600 }
1625#define SL_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM \
1626    { -1000,-6000,  500,  100, -1376,   3, -1104,   4, 1000,1000 }
1627#define SL_I3DL2_ENVIRONMENT_PRESET_STONEROOM \
1628    { -1000, -300, 2310,  640,  -711,  12,    83,  17, 1000,1000 }
1629#define SL_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM \
1630    { -1000, -476, 4320,  590,  -789,  20,  -289,  30, 1000,1000 }
1631#define SL_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL \
1632    { -1000, -500, 3920,  700, -1230,  20,    -2,  29, 1000,1000 }
1633#define SL_I3DL2_ENVIRONMENT_PRESET_CAVE \
1634    { -1000,    0, 2910, 1300,  -602,  15,  -302,  22, 1000,1000 }
1635#define SL_I3DL2_ENVIRONMENT_PRESET_ARENA \
1636    { -1000, -698, 7240,  330, -1166,  20,    16,  30, 1000,1000 }
1637#define SL_I3DL2_ENVIRONMENT_PRESET_HANGAR \
1638    { -1000,-1000, 10050,  230,  -602,  20,   198,  30, 1000,1000 }
1639#define SL_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY \
1640    { -1000,-4000,  300,  100, -1831,   2, -1630,  30, 1000,1000 }
1641#define SL_I3DL2_ENVIRONMENT_PRESET_HALLWAY \
1642    { -1000, -300, 1490,  590, -1219,   7,   441,  11, 1000,1000 }
1643#define SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR \
1644    { -1000, -237, 2700,  790, -1214,  13,   395,  20, 1000,1000 }
1645#define SL_I3DL2_ENVIRONMENT_PRESET_ALLEY \
1646    { -1000, -270, 1490,  860, -1204,   7,    -4,  11, 1000,1000 }
1647#define SL_I3DL2_ENVIRONMENT_PRESET_FOREST \
1648    { -1000,-3300, 1490,  540, -2560, 162,  -613,  88,  790,1000 }
1649#define SL_I3DL2_ENVIRONMENT_PRESET_CITY \
1650    { -1000, -800, 1490,  670, -2273,   7, -2217,  11,  500,1000 }
1651#define SL_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS \
1652    { -1000,-2500, 1490,  210, -2780, 300, -2014, 100,  270,1000 }
1653#define SL_I3DL2_ENVIRONMENT_PRESET_QUARRY \
1654    { -1000,-1000, 1490,  830, SL_MILLIBEL_MIN,  61,   500,  25, 1000,1000 }
1655#define SL_I3DL2_ENVIRONMENT_PRESET_PLAIN \
1656    { -1000,-2000, 1490,  500, -2466, 179, -2514, 100,  210,1000 }
1657#define SL_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT \
1658    { -1000,    0, 1650, 1500, -1363,   8, -1153,  12, 1000,1000 }
1659#define SL_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE \
1660    { -1000,-1000, 2810,  140,   429,  14,   648,  21,  800, 600 }
1661#define SL_I3DL2_ENVIRONMENT_PRESET_UNDERWATER \
1662    { -1000,-4000, 1490,  100,  -449,   7,  1700,  11, 1000,1000 }
1663#define SL_I3DL2_ENVIRONMENT_PRESET_SMALLROOM \
1664    { -1000,-600, 1100, 830, -400, 5, 500, 10, 1000, 1000 }
1665#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \
1666    { -1000,-600, 1300, 830, -1000, 20, -200, 20, 1000, 1000 }
1667#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEROOM \
1668    { -1000,-600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000 }
1669#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \
1670    { -1000,-600, 1800, 700, -1300, 15, -800, 30, 1000, 1000 }
1671#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEHALL \
1672    { -1000,-600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000 }
1673#define SL_I3DL2_ENVIRONMENT_PRESET_PLATE \
1674    { -1000,-200, 1300, 900, 0, 2, 0, 10, 1000, 750 }
1675
1676
1677typedef struct SLEnvironmentalReverbSettings_ {
1678    SLmillibel    roomLevel;
1679    SLmillibel    roomHFLevel;
1680    SLmillisecond decayTime;
1681    SLpermille    decayHFRatio;
1682    SLmillibel    reflectionsLevel;
1683    SLmillisecond reflectionsDelay;
1684    SLmillibel    reverbLevel;
1685    SLmillisecond reverbDelay;
1686    SLpermille    diffusion;
1687    SLpermille    density;
1688} SLEnvironmentalReverbSettings;
1689
1690
1691
1692
1693SL_API extern const SLInterfaceID SL_IID_ENVIRONMENTALREVERB;
1694
1695
1696struct SLEnvironmentalReverbItf_;
1697typedef const struct SLEnvironmentalReverbItf_ * const * SLEnvironmentalReverbItf;
1698
1699struct SLEnvironmentalReverbItf_ {
1700    SLresult (*SetRoomLevel) (
1701        SLEnvironmentalReverbItf self,
1702        SLmillibel room
1703    );
1704    SLresult (*GetRoomLevel) (
1705        SLEnvironmentalReverbItf self,
1706        SLmillibel *pRoom
1707    );
1708    SLresult (*SetRoomHFLevel) (
1709        SLEnvironmentalReverbItf self,
1710        SLmillibel roomHF
1711    );
1712    SLresult (*GetRoomHFLevel) (
1713        SLEnvironmentalReverbItf self,
1714        SLmillibel *pRoomHF
1715    );
1716    SLresult (*SetDecayTime) (
1717        SLEnvironmentalReverbItf self,
1718        SLmillisecond decayTime
1719    );
1720    SLresult (*GetDecayTime) (
1721        SLEnvironmentalReverbItf self,
1722        SLmillisecond *pDecayTime
1723    );
1724    SLresult (*SetDecayHFRatio) (
1725        SLEnvironmentalReverbItf self,
1726        SLpermille decayHFRatio
1727    );
1728    SLresult (*GetDecayHFRatio) (
1729        SLEnvironmentalReverbItf self,
1730        SLpermille *pDecayHFRatio
1731    );
1732    SLresult (*SetReflectionsLevel) (
1733        SLEnvironmentalReverbItf self,
1734        SLmillibel reflectionsLevel
1735    );
1736    SLresult (*GetReflectionsLevel) (
1737        SLEnvironmentalReverbItf self,
1738        SLmillibel *pReflectionsLevel
1739    );
1740    SLresult (*SetReflectionsDelay) (
1741        SLEnvironmentalReverbItf self,
1742        SLmillisecond reflectionsDelay
1743    );
1744    SLresult (*GetReflectionsDelay) (
1745        SLEnvironmentalReverbItf self,
1746        SLmillisecond *pReflectionsDelay
1747    );
1748    SLresult (*SetReverbLevel) (
1749        SLEnvironmentalReverbItf self,
1750        SLmillibel reverbLevel
1751    );
1752    SLresult (*GetReverbLevel) (
1753        SLEnvironmentalReverbItf self,
1754        SLmillibel *pReverbLevel
1755    );
1756    SLresult (*SetReverbDelay) (
1757        SLEnvironmentalReverbItf self,
1758        SLmillisecond reverbDelay
1759    );
1760    SLresult (*GetReverbDelay) (
1761        SLEnvironmentalReverbItf self,
1762        SLmillisecond *pReverbDelay
1763    );
1764    SLresult (*SetDiffusion) (
1765        SLEnvironmentalReverbItf self,
1766        SLpermille diffusion
1767    );
1768    SLresult (*GetDiffusion) (
1769        SLEnvironmentalReverbItf self,
1770        SLpermille *pDiffusion
1771    );
1772    SLresult (*SetDensity) (
1773        SLEnvironmentalReverbItf self,
1774        SLpermille density
1775    );
1776    SLresult (*GetDensity) (
1777        SLEnvironmentalReverbItf self,
1778        SLpermille *pDensity
1779    );
1780    SLresult (*SetEnvironmentalReverbProperties) (
1781        SLEnvironmentalReverbItf self,
1782        const SLEnvironmentalReverbSettings *pProperties
1783    );
1784    SLresult (*GetEnvironmentalReverbProperties) (
1785        SLEnvironmentalReverbItf self,
1786        SLEnvironmentalReverbSettings *pProperties
1787    );
1788};
1789
1790/*---------------------------------------------------------------------------*/
1791/* Effects Send Interface                                                    */
1792/*---------------------------------------------------------------------------*/
1793
1794
1795SL_API extern const SLInterfaceID SL_IID_EFFECTSEND;
1796
1797struct SLEffectSendItf_;
1798typedef const struct SLEffectSendItf_ * const * SLEffectSendItf;
1799
1800struct SLEffectSendItf_ {
1801    SLresult (*EnableEffectSend) (
1802        SLEffectSendItf self,
1803        const void *pAuxEffect,
1804        SLboolean enable,
1805        SLmillibel initialLevel
1806    );
1807    SLresult (*IsEnabled) (
1808        SLEffectSendItf self,
1809        const void * pAuxEffect,
1810        SLboolean *pEnable
1811    );
1812    SLresult (*SetDirectLevel) (
1813        SLEffectSendItf self,
1814        SLmillibel directLevel
1815    );
1816    SLresult (*GetDirectLevel) (
1817        SLEffectSendItf self,
1818        SLmillibel *pDirectLevel
1819    );
1820    SLresult (*SetSendLevel) (
1821        SLEffectSendItf self,
1822        const void *pAuxEffect,
1823        SLmillibel sendLevel
1824    );
1825    SLresult (*GetSendLevel)(
1826        SLEffectSendItf self,
1827        const void *pAuxEffect,
1828        SLmillibel *pSendLevel
1829    );
1830};
1831
1832
1833/*---------------------------------------------------------------------------*/
1834/* 3D Grouping Interface                                                     */
1835/*---------------------------------------------------------------------------*/
1836
1837
1838SL_API extern const SLInterfaceID SL_IID_3DGROUPING;
1839
1840
1841struct SL3DGroupingItf_ ;
1842typedef const struct SL3DGroupingItf_ * const * SL3DGroupingItf;
1843
1844struct SL3DGroupingItf_ {
1845    SLresult (*Set3DGroup) (
1846        SL3DGroupingItf self,
1847        SLObjectItf group
1848    );
1849    SLresult (*Get3DGroup) (
1850        SL3DGroupingItf self,
1851        SLObjectItf *pGroup
1852    );
1853};
1854
1855/*---------------------------------------------------------------------------*/
1856/* 3D Hint Interface                                                         */
1857/*---------------------------------------------------------------------------*/
1858#define SL_3DHINT_OFF                    ((SLuint16) 0x0000)
1859#define SL_3DHINT_QUALITY_LOWEST        ((SLuint16) 0x0001)
1860#define SL_3DHINT_QUALITY_LOW            ((SLuint16) 0x4000)
1861#define SL_3DHINT_QUALITY_MEDIUM        ((SLuint16) 0x8000)
1862#define SL_3DHINT_QUALITY_HIGH            ((SLuint16) 0xC000)
1863#define SL_3DHINT_QUALITY_HIGHEST        ((SLuint16) 0xFFFF)
1864
1865SL_API extern const SLInterfaceID SL_IID_3DHINT;
1866
1867struct SL3DHintItf_;
1868typedef const struct SL3DHintItf_ * const * SL3DHintItf;
1869
1870struct SL3DHintItf_ {
1871    SLresult (*SetRenderHint) (
1872        SL3DHintItf self,
1873        SLuint16 qualityHint
1874    );
1875    SLresult (*GetRenderHint) (
1876        SL3DHintItf self,
1877        SLuint16 *pQualityHint
1878    );
1879};
1880
1881
1882/*---------------------------------------------------------------------------*/
1883/* 3D Commit Interface                                                       */
1884/*---------------------------------------------------------------------------*/
1885
1886
1887SL_API extern const SLInterfaceID SL_IID_3DCOMMIT;
1888
1889struct SL3DCommitItf_;
1890typedef const struct SL3DCommitItf_* const * SL3DCommitItf;
1891
1892struct SL3DCommitItf_ {
1893    SLresult (*Commit) (
1894        SL3DCommitItf self
1895    );
1896    SLresult (*SetDeferred) (
1897        SL3DCommitItf self,
1898        SLboolean deferred
1899    );
1900};
1901
1902
1903/*---------------------------------------------------------------------------*/
1904/* 3D Location Interface                                                     */
1905/*---------------------------------------------------------------------------*/
1906
1907typedef struct SLVec3D_ {
1908    SLint32    x;
1909    SLint32    y;
1910    SLint32    z;
1911} SLVec3D;
1912
1913SL_API extern const SLInterfaceID SL_IID_3DLOCATION;
1914
1915struct SL3DLocationItf_;
1916typedef const struct SL3DLocationItf_ * const * SL3DLocationItf;
1917
1918struct SL3DLocationItf_ {
1919    SLresult (*SetLocationCartesian) (
1920        SL3DLocationItf self,
1921        const SLVec3D *pLocation
1922    );
1923    SLresult (*SetLocationSpherical) (
1924        SL3DLocationItf self,
1925        SLmillidegree azimuth,
1926        SLmillidegree elevation,
1927        SLmillimeter distance
1928    );
1929    SLresult (*Move) (
1930        SL3DLocationItf self,
1931        const SLVec3D *pMovement
1932    );
1933    SLresult (*GetLocationCartesian) (
1934        SL3DLocationItf self,
1935        SLVec3D *pLocation
1936    );
1937    SLresult (*SetOrientationVectors) (
1938        SL3DLocationItf self,
1939        const SLVec3D *pFront,
1940        const SLVec3D *pAbove
1941    );
1942    SLresult (*SetOrientationAngles) (
1943        SL3DLocationItf self,
1944        SLmillidegree heading,
1945        SLmillidegree pitch,
1946        SLmillidegree roll
1947    );
1948    SLresult (*Rotate) (
1949        SL3DLocationItf self,
1950        SLmillidegree theta,
1951        const SLVec3D *pAxis
1952    );
1953    SLresult (*GetOrientationVectors) (
1954        SL3DLocationItf self,
1955        SLVec3D *pFront,
1956        SLVec3D *pUp
1957    );
1958};
1959
1960
1961/*---------------------------------------------------------------------------*/
1962/* 3D Doppler Interface                                                      */
1963/*---------------------------------------------------------------------------*/
1964
1965
1966SL_API extern const SLInterfaceID SL_IID_3DDOPPLER;
1967
1968struct SL3DDopplerItf_;
1969typedef const struct SL3DDopplerItf_ * const * SL3DDopplerItf;
1970
1971struct SL3DDopplerItf_ {
1972    SLresult (*SetVelocityCartesian) (
1973        SL3DDopplerItf self,
1974        const SLVec3D *pVelocity
1975    );
1976    SLresult (*SetVelocitySpherical) (
1977        SL3DDopplerItf self,
1978        SLmillidegree azimuth,
1979        SLmillidegree elevation,
1980        SLmillimeter speed
1981    );
1982    SLresult (*GetVelocityCartesian) (
1983        SL3DDopplerItf self,
1984        SLVec3D *pVelocity
1985    );
1986    SLresult (*SetDopplerFactor) (
1987        SL3DDopplerItf self,
1988        SLpermille dopplerFactor
1989    );
1990    SLresult (*GetDopplerFactor) (
1991        SL3DDopplerItf self,
1992        SLpermille *pDopplerFactor
1993    );
1994};
1995
1996/*---------------------------------------------------------------------------*/
1997/* 3D Source Interface and associated defines                                */
1998/* --------------------------------------------------------------------------*/
1999
2000#define SL_ROLLOFFMODEL_EXPONENTIAL    ((SLuint32) 0x00000000)
2001#define SL_ROLLOFFMODEL_LINEAR        ((SLuint32) 0x00000001)
2002
2003
2004SL_API extern const SLInterfaceID SL_IID_3DSOURCE;
2005
2006struct SL3DSourceItf_;
2007typedef const struct SL3DSourceItf_ * const * SL3DSourceItf;
2008
2009struct SL3DSourceItf_ {
2010    SLresult (*SetHeadRelative) (
2011        SL3DSourceItf self,
2012        SLboolean headRelative
2013    );
2014    SLresult (*GetHeadRelative) (
2015        SL3DSourceItf self,
2016        SLboolean *pHeadRelative
2017    );
2018    SLresult (*SetRolloffDistances) (
2019        SL3DSourceItf self,
2020        SLmillimeter minDistance,
2021        SLmillimeter maxDistance
2022    );
2023    SLresult (*GetRolloffDistances) (
2024        SL3DSourceItf self,
2025        SLmillimeter *pMinDistance,
2026        SLmillimeter *pMaxDistance
2027    );
2028    SLresult (*SetRolloffMaxDistanceMute) (
2029        SL3DSourceItf self,
2030        SLboolean mute
2031    );
2032    SLresult (*GetRolloffMaxDistanceMute) (
2033        SL3DSourceItf self,
2034        SLboolean *pMute
2035    );
2036    SLresult (*SetRolloffFactor) (
2037        SL3DSourceItf self,
2038        SLpermille rolloffFactor
2039    );
2040    SLresult (*GetRolloffFactor) (
2041        SL3DSourceItf self,
2042        SLpermille *pRolloffFactor
2043    );
2044    SLresult (*SetRoomRolloffFactor) (
2045        SL3DSourceItf self,
2046        SLpermille roomRolloffFactor
2047    );
2048    SLresult (*GetRoomRolloffFactor) (
2049        SL3DSourceItf self,
2050        SLpermille *pRoomRolloffFactor
2051    );
2052    SLresult (*SetRolloffModel) (
2053        SL3DSourceItf self,
2054        SLuint8 model
2055    );
2056    SLresult (*GetRolloffModel) (
2057        SL3DSourceItf self,
2058        SLuint8 *pModel
2059    );
2060    SLresult (*SetCone) (
2061        SL3DSourceItf self,
2062        SLmillidegree innerAngle,
2063        SLmillidegree outerAngle,
2064        SLmillibel outerLevel
2065    );
2066    SLresult (*GetCone) (
2067        SL3DSourceItf self,
2068        SLmillidegree *pInnerAngle,
2069        SLmillidegree *pOuterAngle,
2070        SLmillibel *pOuterLevel
2071    );
2072};
2073
2074/*---------------------------------------------------------------------------*/
2075/* 3D Macroscopic Interface                                                  */
2076/* --------------------------------------------------------------------------*/
2077
2078SL_API extern const SLInterfaceID SL_IID_3DMACROSCOPIC;
2079
2080struct SL3DMacroscopicItf_;
2081typedef const struct SL3DMacroscopicItf_ * const * SL3DMacroscopicItf;
2082
2083struct SL3DMacroscopicItf_ {
2084    SLresult (*SetSize) (
2085        SL3DMacroscopicItf self,
2086        SLmillimeter width,
2087        SLmillimeter height,
2088        SLmillimeter depth
2089    );
2090    SLresult (*GetSize) (
2091        SL3DMacroscopicItf self,
2092        SLmillimeter *pWidth,
2093        SLmillimeter *pHeight,
2094        SLmillimeter *pDepth
2095    );
2096    SLresult (*SetOrientationAngles) (
2097        SL3DMacroscopicItf self,
2098        SLmillidegree heading,
2099        SLmillidegree pitch,
2100        SLmillidegree roll
2101    );
2102    SLresult (*SetOrientationVectors) (
2103        SL3DMacroscopicItf self,
2104        const SLVec3D *pFront,
2105        const SLVec3D *pAbove
2106    );
2107    SLresult (*Rotate) (
2108        SL3DMacroscopicItf self,
2109        SLmillidegree theta,
2110        const SLVec3D *pAxis
2111    );
2112    SLresult (*GetOrientationVectors) (
2113        SL3DMacroscopicItf self,
2114        SLVec3D *pFront,
2115        SLVec3D *pUp
2116    );
2117};
2118
2119/*---------------------------------------------------------------------------*/
2120/* Mute Solo Interface                                                       */
2121/* --------------------------------------------------------------------------*/
2122
2123
2124SL_API extern const SLInterfaceID SL_IID_MUTESOLO;
2125
2126struct SLMuteSoloItf_;
2127typedef const struct SLMuteSoloItf_ * const * SLMuteSoloItf;
2128
2129struct SLMuteSoloItf_ {
2130    SLresult (*SetChannelMute) (
2131        SLMuteSoloItf self,
2132        SLuint8 chan,
2133        SLboolean mute
2134    );
2135    SLresult (*GetChannelMute) (
2136        SLMuteSoloItf self,
2137        SLuint8 chan,
2138        SLboolean *pMute
2139    );
2140    SLresult (*SetChannelSolo) (
2141        SLMuteSoloItf self,
2142        SLuint8 chan,
2143        SLboolean solo
2144    );
2145    SLresult (*GetChannelSolo) (
2146        SLMuteSoloItf self,
2147        SLuint8 chan,
2148        SLboolean *pSolo
2149    );
2150    SLresult (*GetNumChannels) (
2151        SLMuteSoloItf self,
2152        SLuint8 *pNumChannels
2153    );
2154};
2155
2156
2157/*---------------------------------------------------------------------------*/
2158/* Dynamic Interface Management Interface and associated types and macros    */
2159/* --------------------------------------------------------------------------*/
2160
2161#define SL_DYNAMIC_ITF_EVENT_RUNTIME_ERROR            ((SLuint32) 0x00000001)
2162#define SL_DYNAMIC_ITF_EVENT_ASYNC_TERMINATION        ((SLuint32) 0x00000002)
2163#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST            ((SLuint32) 0x00000003)
2164#define SL_DYNAMIC_ITF_EVENT_RESOURCES_LOST_PERMANENTLY    ((SLuint32) 0x00000004)
2165#define SL_DYNAMIC_ITF_EVENT_RESOURCES_AVAILABLE        ((SLuint32) 0x00000005)
2166
2167
2168
2169
2170SL_API extern const SLInterfaceID SL_IID_DYNAMICINTERFACEMANAGEMENT;
2171
2172struct SLDynamicInterfaceManagementItf_;
2173typedef const struct SLDynamicInterfaceManagementItf_ * const * SLDynamicInterfaceManagementItf;
2174
2175typedef void (SLAPIENTRY *slDynamicInterfaceManagementCallback) (
2176    SLDynamicInterfaceManagementItf caller,
2177    void * pContext,
2178    SLuint32 event,
2179    SLresult result,
2180    const SLInterfaceID iid
2181);
2182
2183
2184struct SLDynamicInterfaceManagementItf_ {
2185    SLresult (*AddInterface) (
2186        SLDynamicInterfaceManagementItf self,
2187        const SLInterfaceID iid,
2188        SLboolean async
2189    );
2190    SLresult (*RemoveInterface) (
2191        SLDynamicInterfaceManagementItf self,
2192        const SLInterfaceID iid
2193    );
2194    SLresult (*ResumeInterface) (
2195        SLDynamicInterfaceManagementItf self,
2196        const SLInterfaceID iid,
2197        SLboolean async
2198    );
2199    SLresult (*RegisterCallback) (
2200        SLDynamicInterfaceManagementItf self,
2201        slDynamicInterfaceManagementCallback callback,
2202        void * pContext
2203    );
2204};
2205
2206/*---------------------------------------------------------------------------*/
2207/* Midi Message Interface and associated types                               */
2208/* --------------------------------------------------------------------------*/
2209
2210#define SL_MIDIMESSAGETYPE_NOTE_ON_OFF        ((SLuint32) 0x00000001)
2211#define SL_MIDIMESSAGETYPE_POLY_PRESSURE    ((SLuint32) 0x00000002)
2212#define SL_MIDIMESSAGETYPE_CONTROL_CHANGE    ((SLuint32) 0x00000003)
2213#define SL_MIDIMESSAGETYPE_PROGRAM_CHANGE    ((SLuint32) 0x00000004)
2214#define SL_MIDIMESSAGETYPE_CHANNEL_PRESSURE    ((SLuint32) 0x00000005)
2215#define SL_MIDIMESSAGETYPE_PITCH_BEND        ((SLuint32) 0x00000006)
2216#define SL_MIDIMESSAGETYPE_SYSTEM_MESSAGE    ((SLuint32) 0x00000007)
2217
2218
2219SL_API extern const SLInterfaceID SL_IID_MIDIMESSAGE;
2220
2221struct SLMIDIMessageItf_;
2222typedef const struct SLMIDIMessageItf_ * const * SLMIDIMessageItf;
2223
2224typedef void (SLAPIENTRY *slMetaEventCallback) (
2225    SLMIDIMessageItf caller,
2226    void *pContext,
2227    SLuint8 type,
2228    SLuint32 length,
2229    const SLuint8 *pData,
2230    SLuint32 tick,
2231    SLuint16 track
2232);
2233
2234typedef void (SLAPIENTRY *slMIDIMessageCallback) (
2235    SLMIDIMessageItf caller,
2236    void *pContext,
2237    SLuint8 statusByte,
2238    SLuint32 length,
2239    const SLuint8 *pData,
2240    SLuint32 tick,
2241    SLuint16 track
2242);
2243
2244struct SLMIDIMessageItf_ {
2245    SLresult (*SendMessage) (
2246        SLMIDIMessageItf self,
2247        const SLuint8 *pData,
2248        SLuint32 length
2249    );
2250    SLresult (*RegisterMetaEventCallback) (
2251        SLMIDIMessageItf self,
2252        slMetaEventCallback callback,
2253        void *pContext
2254    );
2255    SLresult (*RegisterMIDIMessageCallback) (
2256        SLMIDIMessageItf self,
2257        slMIDIMessageCallback callback,
2258        void *pContext
2259    );
2260    SLresult (*AddMIDIMessageCallbackFilter) (
2261        SLMIDIMessageItf self,
2262        SLuint32 messageType
2263    );
2264    SLresult (*ClearMIDIMessageCallbackFilter) (
2265        SLMIDIMessageItf self
2266    );
2267};
2268
2269
2270/*---------------------------------------------------------------------------*/
2271/* Midi Mute Solo interface                                                  */
2272/* --------------------------------------------------------------------------*/
2273
2274
2275SL_API extern const SLInterfaceID SL_IID_MIDIMUTESOLO;
2276
2277struct SLMIDIMuteSoloItf_;
2278typedef const struct SLMIDIMuteSoloItf_ * const * SLMIDIMuteSoloItf;
2279
2280struct SLMIDIMuteSoloItf_ {
2281    SLresult (*SetChannelMute) (
2282        SLMIDIMuteSoloItf self,
2283        SLuint8 channel,
2284        SLboolean mute
2285    );
2286    SLresult (*GetChannelMute) (
2287        SLMIDIMuteSoloItf self,
2288        SLuint8 channel,
2289        SLboolean *pMute
2290    );
2291    SLresult (*SetChannelSolo) (
2292        SLMIDIMuteSoloItf self,
2293        SLuint8 channel,
2294        SLboolean solo
2295    );
2296    SLresult (*GetChannelSolo) (
2297        SLMIDIMuteSoloItf self,
2298        SLuint8 channel,
2299        SLboolean *pSolo
2300    );
2301    SLresult (*GetTrackCount) (
2302        SLMIDIMuteSoloItf self,
2303        SLuint16 *pCount
2304    );
2305    SLresult (*SetTrackMute) (
2306        SLMIDIMuteSoloItf self,
2307        SLuint16 track,
2308        SLboolean mute
2309    );
2310    SLresult (*GetTrackMute) (
2311        SLMIDIMuteSoloItf self,
2312        SLuint16 track,
2313        SLboolean *pMute
2314    );
2315    SLresult (*SetTrackSolo) (
2316        SLMIDIMuteSoloItf self,
2317        SLuint16 track,
2318        SLboolean solo
2319    );
2320    SLresult (*GetTrackSolo) (
2321        SLMIDIMuteSoloItf self,
2322        SLuint16 track,
2323        SLboolean *pSolo
2324    );
2325};
2326
2327
2328/*---------------------------------------------------------------------------*/
2329/* Midi Tempo interface                                                      */
2330/* --------------------------------------------------------------------------*/
2331
2332
2333SL_API extern const SLInterfaceID SL_IID_MIDITEMPO;
2334
2335struct SLMIDITempoItf_;
2336typedef const struct SLMIDITempoItf_ * const * SLMIDITempoItf;
2337
2338struct SLMIDITempoItf_ {
2339    SLresult (*SetTicksPerQuarterNote) (
2340        SLMIDITempoItf self,
2341        SLuint32 tpqn
2342    );
2343    SLresult (*GetTicksPerQuarterNote) (
2344        SLMIDITempoItf self,
2345        SLuint32 *pTpqn
2346    );
2347    SLresult (*SetMicrosecondsPerQuarterNote) (
2348        SLMIDITempoItf self,
2349        SLmicrosecond uspqn
2350    );
2351    SLresult (*GetMicrosecondsPerQuarterNote) (
2352        SLMIDITempoItf self,
2353        SLmicrosecond *uspqn
2354    );
2355};
2356
2357
2358/*---------------------------------------------------------------------------*/
2359/* Midi Time interface                                                       */
2360/* --------------------------------------------------------------------------*/
2361
2362
2363SL_API extern const SLInterfaceID SL_IID_MIDITIME;
2364
2365struct SLMIDITimeItf_;
2366typedef const struct SLMIDITimeItf_ * const * SLMIDITimeItf;
2367
2368struct SLMIDITimeItf_ {
2369    SLresult (*GetDuration) (
2370        SLMIDITimeItf self,
2371        SLuint32 *pDuration
2372    );
2373    SLresult (*SetPosition) (
2374        SLMIDITimeItf self,
2375        SLuint32 position
2376    );
2377    SLresult (*GetPosition) (
2378        SLMIDITimeItf self,
2379        SLuint32 *pPosition
2380    );
2381    SLresult (*SetLoopPoints) (
2382        SLMIDITimeItf self,
2383        SLuint32 startTick,
2384        SLuint32 numTicks
2385    );
2386    SLresult (*GetLoopPoints) (
2387        SLMIDITimeItf self,
2388        SLuint32 *pStartTick,
2389        SLuint32 *pNumTicks
2390    );
2391};
2392
2393
2394/*---------------------------------------------------------------------------*/
2395/* Audio Decoder Capabilities Interface                                      */
2396/* --------------------------------------------------------------------------*/
2397
2398/*Audio Codec related defines*/
2399#define SL_AUDIOSTREAMFORMAT_UNDEFINED        ((SLuint32) 0x00000000)
2400
2401#define SL_RATECONTROLMODE_CONSTANTBITRATE    ((SLuint32) 0x00000001)
2402#define SL_RATECONTROLMODE_VARIABLEBITRATE    ((SLuint32) 0x00000002)
2403
2404#define SL_AUDIOCODEC_PCM         ((SLuint32) 0x00000001)
2405#define SL_AUDIOCODEC_MP3         ((SLuint32) 0x00000002)
2406#define SL_AUDIOCODEC_AMR         ((SLuint32) 0x00000003)
2407#define SL_AUDIOCODEC_AMRWB       ((SLuint32) 0x00000004)
2408#define SL_AUDIOCODEC_AMRWBPLUS   ((SLuint32) 0x00000005)
2409#define SL_AUDIOCODEC_AAC         ((SLuint32) 0x00000006)
2410#define SL_AUDIOCODEC_WMA         ((SLuint32) 0x00000007)
2411#define SL_AUDIOCODEC_REAL        ((SLuint32) 0x00000008)
2412#define SL_AUDIOCODEC_VORBIS      ((SLuint32) 0x00000009)
2413
2414#define SL_AUDIOPROFILE_PCM                   ((SLuint32) 0x00000001)
2415
2416#define SL_AUDIOPROFILE_MPEG1_L3              ((SLuint32) 0x00000001)
2417#define SL_AUDIOPROFILE_MPEG2_L3              ((SLuint32) 0x00000002)
2418#define SL_AUDIOPROFILE_MPEG25_L3             ((SLuint32) 0x00000003)
2419
2420#define SL_AUDIOCHANMODE_MP3_MONO             ((SLuint32) 0x00000001)
2421#define SL_AUDIOCHANMODE_MP3_STEREO           ((SLuint32) 0x00000002)
2422#define SL_AUDIOCHANMODE_MP3_JOINTSTEREO      ((SLuint32) 0x00000003)
2423#define SL_AUDIOCHANMODE_MP3_DUAL             ((SLuint32) 0x00000004)
2424
2425#define SL_AUDIOPROFILE_AMR            ((SLuint32) 0x00000001)
2426
2427#define SL_AUDIOSTREAMFORMAT_CONFORMANCE    ((SLuint32) 0x00000001)
2428#define SL_AUDIOSTREAMFORMAT_IF1            ((SLuint32) 0x00000002)
2429#define SL_AUDIOSTREAMFORMAT_IF2            ((SLuint32) 0x00000003)
2430#define SL_AUDIOSTREAMFORMAT_FSF            ((SLuint32) 0x00000004)
2431#define SL_AUDIOSTREAMFORMAT_RTPPAYLOAD    ((SLuint32) 0x00000005)
2432#define SL_AUDIOSTREAMFORMAT_ITU            ((SLuint32) 0x00000006)
2433
2434#define SL_AUDIOPROFILE_AMRWB            ((SLuint32) 0x00000001)
2435
2436#define SL_AUDIOPROFILE_AMRWBPLUS        ((SLuint32) 0x00000001)
2437
2438#define SL_AUDIOPROFILE_AAC_AAC            ((SLuint32) 0x00000001)
2439
2440#define SL_AUDIOMODE_AAC_MAIN            ((SLuint32) 0x00000001)
2441#define SL_AUDIOMODE_AAC_LC            ((SLuint32) 0x00000002)
2442#define SL_AUDIOMODE_AAC_SSR            ((SLuint32) 0x00000003)
2443#define SL_AUDIOMODE_AAC_LTP            ((SLuint32) 0x00000004)
2444#define SL_AUDIOMODE_AAC_HE            ((SLuint32) 0x00000005)
2445#define SL_AUDIOMODE_AAC_SCALABLE        ((SLuint32) 0x00000006)
2446#define SL_AUDIOMODE_AAC_ERLC            ((SLuint32) 0x00000007)
2447#define SL_AUDIOMODE_AAC_LD            ((SLuint32) 0x00000008)
2448#define SL_AUDIOMODE_AAC_HE_PS            ((SLuint32) 0x00000009)
2449#define SL_AUDIOMODE_AAC_HE_MPS            ((SLuint32) 0x0000000A)
2450
2451#define SL_AUDIOSTREAMFORMAT_MP2ADTS        ((SLuint32) 0x00000001)
2452#define SL_AUDIOSTREAMFORMAT_MP4ADTS        ((SLuint32) 0x00000002)
2453#define SL_AUDIOSTREAMFORMAT_MP4LOAS        ((SLuint32) 0x00000003)
2454#define SL_AUDIOSTREAMFORMAT_MP4LATM        ((SLuint32) 0x00000004)
2455#define SL_AUDIOSTREAMFORMAT_ADIF        ((SLuint32) 0x00000005)
2456#define SL_AUDIOSTREAMFORMAT_MP4FF        ((SLuint32) 0x00000006)
2457#define SL_AUDIOSTREAMFORMAT_RAW            ((SLuint32) 0x00000007)
2458
2459#define SL_AUDIOPROFILE_WMA7        ((SLuint32) 0x00000001)
2460#define SL_AUDIOPROFILE_WMA8        ((SLuint32) 0x00000002)
2461#define SL_AUDIOPROFILE_WMA9        ((SLuint32) 0x00000003)
2462#define SL_AUDIOPROFILE_WMA10        ((SLuint32) 0x00000004)
2463
2464#define SL_AUDIOMODE_WMA_LEVEL1        ((SLuint32) 0x00000001)
2465#define SL_AUDIOMODE_WMA_LEVEL2        ((SLuint32) 0x00000002)
2466#define SL_AUDIOMODE_WMA_LEVEL3        ((SLuint32) 0x00000003)
2467#define SL_AUDIOMODE_WMA_LEVEL4        ((SLuint32) 0x00000004)
2468#define SL_AUDIOMODE_WMAPRO_LEVELM0    ((SLuint32) 0x00000005)
2469#define SL_AUDIOMODE_WMAPRO_LEVELM1    ((SLuint32) 0x00000006)
2470#define SL_AUDIOMODE_WMAPRO_LEVELM2    ((SLuint32) 0x00000007)
2471#define SL_AUDIOMODE_WMAPRO_LEVELM3    ((SLuint32) 0x00000008)
2472
2473#define SL_AUDIOPROFILE_REALAUDIO        ((SLuint32) 0x00000001)
2474
2475#define SL_AUDIOMODE_REALAUDIO_G2        ((SLuint32) 0x00000001)
2476#define SL_AUDIOMODE_REALAUDIO_8            ((SLuint32) 0x00000002)
2477#define SL_AUDIOMODE_REALAUDIO_10        ((SLuint32) 0x00000003)
2478#define SL_AUDIOMODE_REALAUDIO_SURROUND    ((SLuint32) 0x00000004)
2479
2480typedef struct SLAudioCodecDescriptor_ {
2481    SLuint32      maxChannels;
2482    SLuint32      minBitsPerSample;
2483    SLuint32      maxBitsPerSample;
2484    SLmilliHertz  minSampleRate;
2485    SLmilliHertz  maxSampleRate;
2486    SLboolean     isFreqRangeContinuous;
2487    SLmilliHertz *pSampleRatesSupported;
2488    SLuint32      numSampleRatesSupported;
2489    SLuint32      minBitRate;
2490    SLuint32      maxBitRate;
2491    SLboolean     isBitrateRangeContinuous;
2492    SLuint32     *pBitratesSupported;
2493    SLuint32      numBitratesSupported;
2494    SLuint32      profileSetting;
2495    SLuint32      modeSetting;
2496    SLuint32      streamFormat;
2497} SLAudioCodecDescriptor;
2498
2499SL_API extern const SLInterfaceID SL_IID_AUDIODECODERCAPABILITIES;
2500
2501struct SLAudioDecoderCapabilitiesItf_;
2502typedef const struct SLAudioDecoderCapabilitiesItf_ * const * SLAudioDecoderCapabilitiesItf;
2503
2504struct SLAudioDecoderCapabilitiesItf_ {
2505    SLresult (*GetAudioDecoders) (
2506        SLAudioDecoderCapabilitiesItf self,
2507        SLuint32 * pNumDecoders ,
2508        SLuint32 *pDecoderIds
2509    );
2510    SLresult (*GetAudioDecoderCapabilities) (
2511        SLAudioDecoderCapabilitiesItf self,
2512        SLuint32 decoderId,
2513        SLuint32 *pIndex,
2514        SLAudioCodecDescriptor *pDescriptor
2515    );
2516};
2517
2518
2519
2520
2521/*---------------------------------------------------------------------------*/
2522/* Audio Encoder Capabilities Interface                                      */
2523/* --------------------------------------------------------------------------*/
2524
2525/* Structure used when setting audio encoding parameters */
2526
2527typedef struct SLAudioEncoderSettings_ {
2528    SLuint32 encoderId;
2529    SLuint32 channelsIn;
2530    SLuint32 channelsOut;
2531    SLmilliHertz sampleRate;
2532    SLuint32 bitRate;
2533    SLuint32 bitsPerSample;
2534    SLuint32 rateControl;
2535    SLuint32 profileSetting;
2536    SLuint32 levelSetting;
2537    SLuint32 channelMode;
2538    SLuint32 streamFormat;
2539    SLuint32 encodeOptions;
2540    SLuint32 blockAlignment;
2541} SLAudioEncoderSettings;
2542
2543SL_API extern const SLInterfaceID SL_IID_AUDIOENCODERCAPABILITIES;
2544
2545struct SLAudioEncoderCapabilitiesItf_;
2546typedef const struct SLAudioEncoderCapabilitiesItf_ * const * SLAudioEncoderCapabilitiesItf;
2547
2548struct SLAudioEncoderCapabilitiesItf_ {
2549    SLresult (*GetAudioEncoders) (
2550        SLAudioEncoderCapabilitiesItf self,
2551        SLuint32 *pNumEncoders ,
2552        SLuint32 *pEncoderIds
2553    );
2554    SLresult (*GetAudioEncoderCapabilities) (
2555        SLAudioEncoderCapabilitiesItf self,
2556        SLuint32 encoderId,
2557        SLuint32 *pIndex,
2558        SLAudioCodecDescriptor * pDescriptor
2559    );
2560};
2561
2562
2563/*---------------------------------------------------------------------------*/
2564/* Audio Encoder Interface                                                   */
2565/* --------------------------------------------------------------------------*/
2566
2567
2568SL_API extern const SLInterfaceID SL_IID_AUDIOENCODER;
2569
2570struct SLAudioEncoderItf_;
2571typedef const struct SLAudioEncoderItf_ * const * SLAudioEncoderItf;
2572
2573struct SLAudioEncoderItf_ {
2574    SLresult (*SetEncoderSettings) (
2575        SLAudioEncoderItf        self,
2576        SLAudioEncoderSettings     *pSettings
2577    );
2578    SLresult (*GetEncoderSettings) (
2579        SLAudioEncoderItf        self,
2580        SLAudioEncoderSettings    *pSettings
2581    );
2582};
2583
2584
2585/*---------------------------------------------------------------------------*/
2586/* Bass Boost Interface                                                      */
2587/* --------------------------------------------------------------------------*/
2588
2589
2590SL_API extern const SLInterfaceID SL_IID_BASSBOOST;
2591
2592struct SLBassBoostItf_;
2593typedef const struct SLBassBoostItf_ * const * SLBassBoostItf;
2594
2595struct SLBassBoostItf_ {
2596    SLresult (*SetEnabled)(
2597        SLBassBoostItf self,
2598        SLboolean enabled
2599    );
2600    SLresult (*IsEnabled)(
2601        SLBassBoostItf self,
2602        SLboolean *pEnabled
2603    );
2604    SLresult (*SetStrength)(
2605        SLBassBoostItf self,
2606        SLpermille strength
2607    );
2608    SLresult (*GetRoundedStrength)(
2609        SLBassBoostItf self,
2610        SLpermille *pStrength
2611    );
2612    SLresult (*IsStrengthSupported)(
2613        SLBassBoostItf self,
2614        SLboolean *pSupported
2615    );
2616};
2617
2618/*---------------------------------------------------------------------------*/
2619/* Pitch Interface                                                           */
2620/* --------------------------------------------------------------------------*/
2621
2622
2623SL_API extern const SLInterfaceID SL_IID_PITCH;
2624
2625struct SLPitchItf_;
2626typedef const struct SLPitchItf_ * const * SLPitchItf;
2627
2628struct SLPitchItf_ {
2629    SLresult (*SetPitch) (
2630        SLPitchItf self,
2631        SLpermille pitch
2632    );
2633    SLresult (*GetPitch) (
2634        SLPitchItf self,
2635        SLpermille *pPitch
2636    );
2637    SLresult (*GetPitchCapabilities) (
2638        SLPitchItf self,
2639        SLpermille *pMinPitch,
2640        SLpermille *pMaxPitch
2641    );
2642};
2643
2644
2645/*---------------------------------------------------------------------------*/
2646/* Rate Pitch Interface                                                      */
2647/* RatePitchItf is an interface for controlling the rate a sound is played   */
2648/* back. A change in rate will cause a change in pitch.                      */
2649/* --------------------------------------------------------------------------*/
2650
2651
2652SL_API extern const SLInterfaceID SL_IID_RATEPITCH;
2653
2654struct SLRatePitchItf_;
2655typedef const struct SLRatePitchItf_ * const * SLRatePitchItf;
2656
2657struct SLRatePitchItf_ {
2658    SLresult (*SetRate) (
2659        SLRatePitchItf self,
2660        SLpermille rate
2661    );
2662    SLresult (*GetRate) (
2663        SLRatePitchItf self,
2664        SLpermille *pRate
2665    );
2666    SLresult (*GetRatePitchCapabilities) (
2667        SLRatePitchItf self,
2668        SLpermille *pMinRate,
2669        SLpermille *pMaxRate
2670    );
2671};
2672
2673
2674/*---------------------------------------------------------------------------*/
2675/* Virtualizer Interface                                                      */
2676/* --------------------------------------------------------------------------*/
2677
2678
2679SL_API extern const SLInterfaceID SL_IID_VIRTUALIZER;
2680
2681struct SLVirtualizerItf_;
2682typedef const struct SLVirtualizerItf_ * const * SLVirtualizerItf;
2683
2684struct SLVirtualizerItf_ {
2685    SLresult (*SetEnabled)(
2686        SLVirtualizerItf self,
2687        SLboolean enabled
2688    );
2689    SLresult (*IsEnabled)(
2690        SLVirtualizerItf self,
2691        SLboolean *pEnabled
2692    );
2693    SLresult (*SetStrength)(
2694        SLVirtualizerItf self,
2695        SLpermille strength
2696    );
2697    SLresult (*GetRoundedStrength)(
2698        SLVirtualizerItf self,
2699        SLpermille *pStrength
2700    );
2701    SLresult (*IsStrengthSupported)(
2702        SLVirtualizerItf self,
2703        SLboolean *pSupported
2704    );
2705};
2706
2707/*---------------------------------------------------------------------------*/
2708/* Visualization Interface                                                   */
2709/* --------------------------------------------------------------------------*/
2710
2711
2712SL_API extern const SLInterfaceID SL_IID_VISUALIZATION;
2713
2714struct SLVisualizationItf_;
2715typedef const struct SLVisualizationItf_ * const * SLVisualizationItf;
2716
2717typedef void (SLAPIENTRY *slVisualizationCallback) (
2718    void *pContext,
2719    const SLuint8 waveform[],
2720    const SLuint8 fft[],
2721    SLmilliHertz samplerate
2722);
2723
2724struct SLVisualizationItf_{
2725    SLresult (*RegisterVisualizationCallback)(
2726        SLVisualizationItf self,
2727        slVisualizationCallback callback,
2728        void *pContext,
2729        SLmilliHertz rate
2730    );
2731    SLresult (*GetMaxRate)(
2732        SLVisualizationItf self,
2733        SLmilliHertz* pRate
2734    );
2735};
2736
2737
2738/*---------------------------------------------------------------------------*/
2739/* Engine Interface                                                          */
2740/* --------------------------------------------------------------------------*/
2741
2742
2743SL_API extern const SLInterfaceID SL_IID_ENGINE;
2744
2745struct SLEngineItf_;
2746typedef const struct SLEngineItf_ * const * SLEngineItf;
2747
2748
2749struct SLEngineItf_ {
2750
2751    SLresult (*CreateLEDDevice) (
2752        SLEngineItf self,
2753        SLObjectItf * pDevice,
2754        SLuint32 deviceID,
2755        SLuint32 numInterfaces,
2756        const SLInterfaceID * pInterfaceIds,
2757        const SLboolean * pInterfaceRequired
2758    );
2759    SLresult (*CreateVibraDevice) (
2760        SLEngineItf self,
2761        SLObjectItf * pDevice,
2762        SLuint32 deviceID,
2763        SLuint32 numInterfaces,
2764        const SLInterfaceID * pInterfaceIds,
2765        const SLboolean * pInterfaceRequired
2766    );
2767    SLresult (*CreateAudioPlayer) (
2768        SLEngineItf self,
2769        SLObjectItf * pPlayer,
2770        const SLDataSource *pAudioSrc,
2771        const SLDataSink *pAudioSnk,
2772        SLuint32 numInterfaces,
2773        const SLInterfaceID * pInterfaceIds,
2774        const SLboolean * pInterfaceRequired
2775    );
2776    SLresult (*CreateAudioRecorder) (
2777        SLEngineItf self,
2778        SLObjectItf * pRecorder,
2779        const SLDataSource *pAudioSrc,
2780        const SLDataSink *pAudioSnk,
2781        SLuint32 numInterfaces,
2782        const SLInterfaceID * pInterfaceIds,
2783        const SLboolean * pInterfaceRequired
2784    );
2785    SLresult (*CreateMidiPlayer) (
2786        SLEngineItf self,
2787        SLObjectItf * pPlayer,
2788        const SLDataSource *pMIDISrc,
2789        const SLDataSource *pBankSrc,
2790        const SLDataSink *pAudioOutput,
2791        const SLDataSink *pVibra,
2792        const SLDataSink *pLEDArray,
2793        SLuint32 numInterfaces,
2794        const SLInterfaceID * pInterfaceIds,
2795        const SLboolean * pInterfaceRequired
2796    );
2797    SLresult (*CreateListener) (
2798        SLEngineItf self,
2799        SLObjectItf * pListener,
2800        SLuint32 numInterfaces,
2801        const SLInterfaceID * pInterfaceIds,
2802        const SLboolean * pInterfaceRequired
2803    );
2804    SLresult (*Create3DGroup) (
2805        SLEngineItf self,
2806        SLObjectItf * pGroup,
2807        SLuint32 numInterfaces,
2808        const SLInterfaceID * pInterfaceIds,
2809        const SLboolean * pInterfaceRequired
2810    );
2811    SLresult (*CreateOutputMix) (
2812        SLEngineItf self,
2813        SLObjectItf * pMix,
2814        SLuint32 numInterfaces,
2815        const SLInterfaceID * pInterfaceIds,
2816        const SLboolean * pInterfaceRequired
2817    );
2818    SLresult (*CreateMetadataExtractor) (
2819        SLEngineItf self,
2820        SLObjectItf * pMetadataExtractor,
2821        const SLDataSource * pDataSource,
2822        SLuint32 numInterfaces,
2823        const SLInterfaceID * pInterfaceIds,
2824        const SLboolean * pInterfaceRequired
2825    );
2826    SLresult (*CreateExtensionObject) (
2827        SLEngineItf self,
2828        SLObjectItf * pObject,
2829        void * pParameters,
2830        SLuint32 objectID,
2831        SLuint32 numInterfaces,
2832        const SLInterfaceID * pInterfaceIds,
2833        const SLboolean * pInterfaceRequired
2834    );
2835    SLresult (*QueryNumSupportedInterfaces) (
2836        SLEngineItf self,
2837        SLuint32 objectID,
2838        SLuint32 * pNumSupportedInterfaces
2839    );
2840    SLresult (*QuerySupportedInterfaces) (
2841        SLEngineItf self,
2842        SLuint32 objectID,
2843        SLuint32 index,
2844        SLInterfaceID * pInterfaceId
2845    );
2846    SLresult (*QueryNumSupportedExtensions) (
2847        SLEngineItf self,
2848        SLuint32 * pNumExtensions
2849    );
2850    SLresult (*QuerySupportedExtension) (
2851        SLEngineItf self,
2852        SLuint32 index,
2853        SLchar * pExtensionName,
2854        SLuint16 * pNameLength
2855    );
2856    SLresult (*IsExtensionSupported) (
2857        SLEngineItf self,
2858        const SLchar * pExtensionName,
2859        SLboolean * pSupported
2860    );
2861};
2862
2863
2864/*---------------------------------------------------------------------------*/
2865/* Engine Capabilities Interface                                             */
2866/* --------------------------------------------------------------------------*/
2867
2868
2869SL_API extern const SLInterfaceID SL_IID_ENGINECAPABILITIES;
2870
2871struct SLEngineCapabilitiesItf_;
2872typedef const struct SLEngineCapabilitiesItf_ * const * SLEngineCapabilitiesItf;
2873
2874struct SLEngineCapabilitiesItf_ {
2875    SLresult (*QuerySupportedProfiles) (
2876        SLEngineCapabilitiesItf self,
2877        SLuint16 *pProfilesSupported
2878    );
2879    SLresult (*QueryAvailableVoices) (
2880        SLEngineCapabilitiesItf self,
2881        SLuint16 voiceType,
2882        SLuint16 *pNumMaxVoices,
2883        SLboolean *pIsAbsoluteMax,
2884        SLuint16 *pNumFreeVoices
2885    );
2886    SLresult (*QueryNumberOfMIDISynthesizers) (
2887        SLEngineCapabilitiesItf self,
2888        SLuint16 *pNumMIDIsynthesizers
2889    );
2890    SLresult (*QueryAPIVersion) (
2891        SLEngineCapabilitiesItf self,
2892        SLuint16 *pMajor,
2893        SLuint16 *pMinor,
2894        SLuint16 *pStep
2895    );
2896    SLresult (*QueryLEDCapabilities) (
2897        SLEngineCapabilitiesItf self,
2898        SLuint32 *pIndex,
2899        SLuint32 *pLEDDeviceID,
2900        SLLEDDescriptor *pDescriptor
2901    );
2902    SLresult (*QueryVibraCapabilities) (
2903        SLEngineCapabilitiesItf self,
2904        SLuint32 *pIndex,
2905        SLuint32 *pVibraDeviceID,
2906        SLVibraDescriptor *pDescriptor
2907    );
2908    SLresult (*IsThreadSafe) (
2909        SLEngineCapabilitiesItf self,
2910        SLboolean *pIsThreadSafe
2911    );
2912};
2913
2914/*---------------------------------------------------------------------------*/
2915/* Thread Sync Interface                                                     */
2916/* --------------------------------------------------------------------------*/
2917
2918
2919SL_API extern const SLInterfaceID SL_IID_THREADSYNC;
2920
2921struct SLThreadSyncItf_;
2922typedef const struct SLThreadSyncItf_ * const * SLThreadSyncItf;
2923
2924
2925struct SLThreadSyncItf_ {
2926    SLresult (*EnterCriticalSection) (
2927        SLThreadSyncItf self
2928    );
2929    SLresult (*ExitCriticalSection) (
2930        SLThreadSyncItf self
2931    );
2932};
2933
2934
2935/*****************************************************************************/
2936/* SL engine constructor                                                     */
2937/*****************************************************************************/
2938
2939#define SL_ENGINEOPTION_THREADSAFE        ((SLuint32) 0x00000001)
2940#define SL_ENGINEOPTION_LOSSOFCONTROL    ((SLuint32) 0x00000002)
2941#define SL_ENGINEOPTION_MAJORVERSION    ((SLuint32) 0x00000003)
2942#define SL_ENGINEOPTION_MINORVERSION    ((SLuint32) 0x00000004)
2943#define SL_ENGINEOPTION_STEPVERSION        ((SLuint32) 0x00000005)
2944
2945
2946typedef struct SLEngineOption_ {
2947    SLuint32 feature;
2948    SLuint32 data;
2949} SLEngineOption;
2950
2951
2952SL_API SLresult SLAPIENTRY slCreateEngine(
2953    SLObjectItf             *pEngine,
2954    SLuint32                numOptions,
2955    const SLEngineOption    *pEngineOptions,
2956    SLuint32                numInterfaces,
2957    const SLInterfaceID     *pInterfaceIds,
2958    const SLboolean         * pInterfaceRequired
2959);
2960
2961SL_API SLresult SLAPIENTRY slQueryNumSupportedEngineInterfaces(
2962    SLuint32 * pNumSupportedInterfaces
2963);
2964
2965SL_API SLresult SLAPIENTRY slQuerySupportedEngineInterfaces(
2966    SLuint32 index,
2967    SLInterfaceID * pInterfaceId
2968);
2969
2970#ifdef __cplusplus
2971} /* extern "C" */
2972#endif
2973
2974#endif /* OPENSL_ES_H_ */
2975