1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef OPENSL_ES_ANDROID_H_
18 #define OPENSL_ES_ANDROID_H_
19 
20 #include "OpenSLES_AndroidConfiguration.h"
21 #include "OpenSLES_AndroidMetadata.h"
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /*---------------------------------------------------------------------------*/
28 /* Android common types                                                      */
29 /*---------------------------------------------------------------------------*/
30 
31 typedef sl_int64_t             SLAint64;          /* 64 bit signed integer   */
32 
33 typedef sl_uint64_t            SLAuint64;         /* 64 bit unsigned integer */
34 
35 /*---------------------------------------------------------------------------*/
36 /* Android PCM Data Format                                                   */
37 /*---------------------------------------------------------------------------*/
38 
39 /* The following pcm representations and data formats map to those in OpenSLES 1.1 */
40 #define SL_ANDROID_PCM_REPRESENTATION_SIGNED_INT       ((SLuint32) 0x00000001)
41 #define SL_ANDROID_PCM_REPRESENTATION_UNSIGNED_INT     ((SLuint32) 0x00000002)
42 #define SL_ANDROID_PCM_REPRESENTATION_FLOAT            ((SLuint32) 0x00000003)
43 
44 #define SL_ANDROID_DATAFORMAT_PCM_EX    ((SLuint32) 0x00000004)
45 
46 typedef struct SLAndroidDataFormat_PCM_EX_ {
47     SLuint32         formatType;
48     SLuint32         numChannels;
49     SLuint32         sampleRate;
50     SLuint32         bitsPerSample;
51     SLuint32         containerSize;
52     SLuint32         channelMask;
53     SLuint32         endianness;
54     SLuint32         representation;
55 } SLAndroidDataFormat_PCM_EX;
56 
57 /*---------------------------------------------------------------------------*/
58 /* Android Effect interface                                                  */
59 /*---------------------------------------------------------------------------*/
60 
61 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT;
62 
63 /** Android Effect interface methods */
64 
65 struct SLAndroidEffectItf_;
66 typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
67 
68 struct SLAndroidEffectItf_ {
69 
70     SLresult (*CreateEffect) (SLAndroidEffectItf self,
71             SLInterfaceID effectImplementationId);
72 
73     SLresult (*ReleaseEffect) (SLAndroidEffectItf self,
74             SLInterfaceID effectImplementationId);
75 
76     SLresult (*SetEnabled) (SLAndroidEffectItf self,
77             SLInterfaceID effectImplementationId,
78             SLboolean enabled);
79 
80     SLresult (*IsEnabled) (SLAndroidEffectItf self,
81             SLInterfaceID effectImplementationId,
82             SLboolean *pEnabled);
83 
84     SLresult (*SendCommand) (SLAndroidEffectItf self,
85             SLInterfaceID effectImplementationId,
86             SLuint32 command,
87             SLuint32 commandSize,
88             void *pCommandData,
89             SLuint32 *replySize,
90             void *pReplyData);
91 };
92 
93 
94 /*---------------------------------------------------------------------------*/
95 /* Android Effect Send interface                                             */
96 /*---------------------------------------------------------------------------*/
97 
98 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
99 
100 /** Android Effect Send interface methods */
101 
102 struct SLAndroidEffectSendItf_;
103 typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
104 
105 struct SLAndroidEffectSendItf_ {
106     SLresult (*EnableEffectSend) (
107         SLAndroidEffectSendItf self,
108         SLInterfaceID effectImplementationId,
109         SLboolean enable,
110         SLmillibel initialLevel
111     );
112     SLresult (*IsEnabled) (
113         SLAndroidEffectSendItf self,
114         SLInterfaceID effectImplementationId,
115         SLboolean *pEnable
116     );
117     SLresult (*SetDirectLevel) (
118         SLAndroidEffectSendItf self,
119         SLmillibel directLevel
120     );
121     SLresult (*GetDirectLevel) (
122         SLAndroidEffectSendItf self,
123         SLmillibel *pDirectLevel
124     );
125     SLresult (*SetSendLevel) (
126         SLAndroidEffectSendItf self,
127         SLInterfaceID effectImplementationId,
128         SLmillibel sendLevel
129     );
130     SLresult (*GetSendLevel)(
131         SLAndroidEffectSendItf self,
132         SLInterfaceID effectImplementationId,
133         SLmillibel *pSendLevel
134     );
135 };
136 
137 
138 /*---------------------------------------------------------------------------*/
139 /* Android Effect Capabilities interface                                     */
140 /*---------------------------------------------------------------------------*/
141 
142 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
143 
144 /** Android Effect Capabilities interface methods */
145 
146 struct SLAndroidEffectCapabilitiesItf_;
147 typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
148 
149 struct SLAndroidEffectCapabilitiesItf_ {
150 
151     SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self,
152             SLuint32 *pNumSupportedEffects);
153 
154 
155     SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self,
156             SLuint32 index,
157             SLInterfaceID *pEffectType,
158             SLInterfaceID *pEffectImplementation,
159             SLchar *pName,
160             SLuint16 *pNameSize);
161 };
162 
163 
164 /*---------------------------------------------------------------------------*/
165 /* Android Configuration interface                                           */
166 /*---------------------------------------------------------------------------*/
167 extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
168 
169 /** Android Configuration interface methods */
170 
171 struct SLAndroidConfigurationItf_;
172 typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
173 
174 struct SLAndroidConfigurationItf_ {
175 
176     SLresult (*SetConfiguration) (SLAndroidConfigurationItf self,
177             const SLchar *configKey,
178             const void *pConfigValue,
179             SLuint32 valueSize);
180 
181     SLresult (*GetConfiguration) (SLAndroidConfigurationItf self,
182            const SLchar *configKey,
183            SLuint32 *pValueSize,
184            void *pConfigValue
185        );
186 };
187 
188 
189 /*---------------------------------------------------------------------------*/
190 /* Android Simple Buffer Queue Interface                                     */
191 /*---------------------------------------------------------------------------*/
192 
193 extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
194 
195 struct SLAndroidSimpleBufferQueueItf_;
196 typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
197 
198 typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)(
199 	SLAndroidSimpleBufferQueueItf caller,
200 	void *pContext
201 );
202 
203 /** Android simple buffer queue state **/
204 
205 typedef struct SLAndroidSimpleBufferQueueState_ {
206 	SLuint32	count;
207 	SLuint32	index;
208 } SLAndroidSimpleBufferQueueState;
209 
210 
211 struct SLAndroidSimpleBufferQueueItf_ {
212 	SLresult (*Enqueue) (
213 		SLAndroidSimpleBufferQueueItf self,
214 		const void *pBuffer,
215 		SLuint32 size
216 	);
217 	SLresult (*Clear) (
218 		SLAndroidSimpleBufferQueueItf self
219 	);
220 	SLresult (*GetState) (
221 		SLAndroidSimpleBufferQueueItf self,
222 		SLAndroidSimpleBufferQueueState *pState
223 	);
224 	SLresult (*RegisterCallback) (
225 		SLAndroidSimpleBufferQueueItf self,
226 		slAndroidSimpleBufferQueueCallback callback,
227 		void* pContext
228 	);
229 };
230 
231 
232 /*---------------------------------------------------------------------------*/
233 /* Android Buffer Queue Interface                                            */
234 /*---------------------------------------------------------------------------*/
235 
236 extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE;
237 
238 struct SLAndroidBufferQueueItf_;
239 typedef const struct SLAndroidBufferQueueItf_ * const * SLAndroidBufferQueueItf;
240 
241 #define SL_ANDROID_ITEMKEY_NONE             ((SLuint32) 0x00000000)
242 #define SL_ANDROID_ITEMKEY_EOS              ((SLuint32) 0x00000001)
243 #define SL_ANDROID_ITEMKEY_DISCONTINUITY    ((SLuint32) 0x00000002)
244 #define SL_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((SLuint32) 0x00000003)
245 #define SL_ANDROID_ITEMKEY_FORMAT_CHANGE    ((SLuint32) 0x00000004)
246 
247 #define SL_ANDROIDBUFFERQUEUEEVENT_NONE        ((SLuint32) 0x00000000)
248 #define SL_ANDROIDBUFFERQUEUEEVENT_PROCESSED   ((SLuint32) 0x00000001)
249 #if 0   // reserved for future use
250 #define SL_ANDROIDBUFFERQUEUEEVENT_UNREALIZED  ((SLuint32) 0x00000002)
251 #define SL_ANDROIDBUFFERQUEUEEVENT_CLEARED     ((SLuint32) 0x00000004)
252 #define SL_ANDROIDBUFFERQUEUEEVENT_STOPPED     ((SLuint32) 0x00000008)
253 #define SL_ANDROIDBUFFERQUEUEEVENT_ERROR       ((SLuint32) 0x00000010)
254 #define SL_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020)
255 #endif
256 
257 typedef struct SLAndroidBufferItem_ {
258     SLuint32 itemKey;  // identifies the item
259     SLuint32 itemSize;
260     SLuint8  itemData[0];
261 } SLAndroidBufferItem;
262 
263 typedef SLresult (SLAPIENTRY *slAndroidBufferQueueCallback)(
264     SLAndroidBufferQueueItf caller,/* input */
265     void *pCallbackContext,        /* input */
266     void *pBufferContext,          /* input */
267     void *pBufferData,             /* input */
268     SLuint32 dataSize,             /* input */
269     SLuint32 dataUsed,             /* input */
270     const SLAndroidBufferItem *pItems,/* input */
271     SLuint32 itemsLength           /* input */
272 );
273 
274 typedef struct SLAndroidBufferQueueState_ {
275     SLuint32    count;
276     SLuint32    index;
277 } SLAndroidBufferQueueState;
278 
279 struct SLAndroidBufferQueueItf_ {
280     SLresult (*RegisterCallback) (
281         SLAndroidBufferQueueItf self,
282         slAndroidBufferQueueCallback callback,
283         void* pCallbackContext
284     );
285 
286     SLresult (*Clear) (
287         SLAndroidBufferQueueItf self
288     );
289 
290     SLresult (*Enqueue) (
291         SLAndroidBufferQueueItf self,
292         void *pBufferContext,
293         void *pData,
294         SLuint32 dataLength,
295         const SLAndroidBufferItem *pItems,
296         SLuint32 itemsLength
297     );
298 
299     SLresult (*GetState) (
300         SLAndroidBufferQueueItf self,
301         SLAndroidBufferQueueState *pState
302     );
303 
304     SLresult (*SetCallbackEventsMask) (
305             SLAndroidBufferQueueItf self,
306             SLuint32 eventFlags
307     );
308 
309     SLresult (*GetCallbackEventsMask) (
310             SLAndroidBufferQueueItf self,
311             SLuint32 *pEventFlags
312     );
313 };
314 
315 
316 /*---------------------------------------------------------------------------*/
317 /* Android File Descriptor Data Locator                                      */
318 /*---------------------------------------------------------------------------*/
319 
320 /** Addendum to Data locator macros  */
321 #define SL_DATALOCATOR_ANDROIDFD                ((SLuint32) 0x800007BC)
322 
323 #define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll)
324 
325 /** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */
326 typedef struct SLDataLocator_AndroidFD_ {
327     SLuint32        locatorType;
328     SLint32         fd;
329     SLAint64        offset;
330     SLAint64        length;
331 } SLDataLocator_AndroidFD;
332 
333 
334 /*---------------------------------------------------------------------------*/
335 /* Android Android Simple Buffer Queue Data Locator                          */
336 /*---------------------------------------------------------------------------*/
337 
338 /** Addendum to Data locator macros  */
339 #define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD)
340 
341 /** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE*/
342 typedef struct SLDataLocator_AndroidSimpleBufferQueue {
343 	SLuint32	locatorType;
344 	SLuint32	numBuffers;
345 } SLDataLocator_AndroidSimpleBufferQueue;
346 
347 
348 /*---------------------------------------------------------------------------*/
349 /* Android Buffer Queue Data Locator                                         */
350 /*---------------------------------------------------------------------------*/
351 
352 /** Addendum to Data locator macros  */
353 #define SL_DATALOCATOR_ANDROIDBUFFERQUEUE       ((SLuint32) 0x800007BE)
354 
355 /** Android Buffer Queue-based data locator definition,
356  *  locatorType must be SL_DATALOCATOR_ANDROIDBUFFERQUEUE */
357 typedef struct SLDataLocator_AndroidBufferQueue_ {
358     SLuint32    locatorType;
359     SLuint32    numBuffers;
360 } SLDataLocator_AndroidBufferQueue;
361 
362 /**
363  * MIME types required for data in Android Buffer Queues
364  */
365 #define SL_ANDROID_MIME_AACADTS            ((SLchar *) "audio/vnd.android.aac-adts")
366 
367 /*---------------------------------------------------------------------------*/
368 /* Acoustic Echo Cancellation (AEC) Interface                                */
369 /* --------------------------------------------------------------------------*/
370 extern SL_API const SLInterfaceID SL_IID_ANDROIDACOUSTICECHOCANCELLATION;
371 
372 struct SLAndroidAcousticEchoCancellationItf_;
373 typedef const struct SLAndroidAcousticEchoCancellationItf_ * const *
374         SLAndroidAcousticEchoCancellationItf;
375 
376 struct SLAndroidAcousticEchoCancellationItf_ {
377     SLresult (*SetEnabled)(
378         SLAndroidAcousticEchoCancellationItf self,
379         SLboolean enabled
380     );
381     SLresult (*IsEnabled)(
382         SLAndroidAcousticEchoCancellationItf self,
383         SLboolean *pEnabled
384     );
385     SLresult (*IsAvailable)(
386         SLAndroidAcousticEchoCancellationItf self,
387         SLboolean *pEnabled
388     );
389 };
390 
391 /*---------------------------------------------------------------------------*/
392 /* Automatic Gain Control (ACC) Interface                                    */
393 /* --------------------------------------------------------------------------*/
394 extern SL_API const SLInterfaceID SL_IID_ANDROIDAUTOMATICGAINCONTROL;
395 
396 struct SLAndroidAutomaticGainControlItf_;
397 typedef const struct SLAndroidAutomaticGainControlItf_ * const * SLAndroidAutomaticGainControlItf;
398 
399 struct SLAndroidAutomaticGainControlItf_ {
400     SLresult (*SetEnabled)(
401         SLAndroidAutomaticGainControlItf self,
402         SLboolean enabled
403     );
404     SLresult (*IsEnabled)(
405         SLAndroidAutomaticGainControlItf self,
406         SLboolean *pEnabled
407     );
408     SLresult (*IsAvailable)(
409         SLAndroidAutomaticGainControlItf self,
410         SLboolean *pEnabled
411     );
412 };
413 
414 /*---------------------------------------------------------------------------*/
415 /* Noise Suppression Interface                                               */
416 /* --------------------------------------------------------------------------*/
417 extern SL_API const SLInterfaceID SL_IID_ANDROIDNOISESUPPRESSION;
418 
419 struct SLAndroidNoiseSuppressionItf_;
420 typedef const struct SLAndroidNoiseSuppressionItf_ * const * SLAndroidNoiseSuppressionItf;
421 
422 struct SLAndroidNoiseSuppressionItf_ {
423     SLresult (*SetEnabled)(
424         SLAndroidNoiseSuppressionItf self,
425         SLboolean enabled
426     );
427     SLresult (*IsEnabled)(
428         SLAndroidNoiseSuppressionItf self,
429         SLboolean *pEnabled
430     );
431     SLresult (*IsAvailable)(
432         SLAndroidNoiseSuppressionItf self,
433         SLboolean *pEnabled
434     );
435 };
436 
437 #ifdef __cplusplus
438 }
439 #endif /* __cplusplus */
440 
441 #endif /* OPENSL_ES_ANDROID_H_ */
442