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