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