• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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