OpenSLES_Android.h revision 053b3c2696e5e1b28dd5e02c54b0e3aedc21168d
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#include <jni.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/*---------------------------------------------------------------------------*/
29/* Android common types                                                      */
30/*---------------------------------------------------------------------------*/
31
32typedef sl_int64_t             SLAint64;          /* 64 bit signed integer   */
33
34typedef sl_uint64_t            SLAuint64;         /* 64 bit unsigned integer */
35
36/*---------------------------------------------------------------------------*/
37/* Android PCM Data Format                                                   */
38/*---------------------------------------------------------------------------*/
39
40/* The following pcm representations and data formats map to those in OpenSLES 1.1 */
41#define SL_ANDROID_PCM_REPRESENTATION_SIGNED_INT       ((SLuint32) 0x00000001)
42#define SL_ANDROID_PCM_REPRESENTATION_UNSIGNED_INT     ((SLuint32) 0x00000002)
43#define SL_ANDROID_PCM_REPRESENTATION_FLOAT            ((SLuint32) 0x00000003)
44
45#define SL_ANDROID_DATAFORMAT_PCM_EX    ((SLuint32) 0x00000004)
46
47typedef struct SLAndroidDataFormat_PCM_EX_ {
48    SLuint32         formatType;
49    SLuint32         numChannels;
50    SLuint32         sampleRate;
51    SLuint32         bitsPerSample;
52    SLuint32         containerSize;
53    SLuint32         channelMask;
54    SLuint32         endianness;
55    SLuint32         representation;
56} SLAndroidDataFormat_PCM_EX;
57
58#define SL_ANDROID_SPEAKER_NON_POSITIONAL       ((SLuint32) 0x80000000)
59
60// Make an indexed channel mask from a bitfield.
61//
62// Each bit in the bitfield corresponds to a channel index,
63// from least-significant bit (channel 0) up to the bit
64// corresponding to the maximum channel count (currently FCC_8).
65// A '1' in the bitfield indicates that the channel should be
66// included in the stream, while a '0' indicates that it
67// should be excluded. For instance, a bitfield of 0x0A (binary 00001010)
68// would define a stream that contains channels 1 and 3. (The corresponding
69// indexed mask, after setting the SL_ANDROID_NON_POSITIONAL bit,
70// would be 0x8000000A.)
71#define SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield) \
72        ((bitfield) | SL_ANDROID_SPEAKER_NON_POSITIONAL)
73
74// Specifying SL_ANDROID_SPEAKER_USE_DEFAULT as a channel mask in
75// SLAndroidDataFormat_PCM_EX causes OpenSL ES to assign a default
76// channel mask based on the number of channels requested. This
77// value cannot be combined with SL_ANDROID_SPEAKER_NON_POSITIONAL.
78#define SL_ANDROID_SPEAKER_USE_DEFAULT ((SLuint32)0)
79
80/*---------------------------------------------------------------------------*/
81/* Android Effect interface                                                  */
82/*---------------------------------------------------------------------------*/
83
84extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT;
85
86/** Android Effect interface methods */
87
88struct SLAndroidEffectItf_;
89typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
90
91struct SLAndroidEffectItf_ {
92
93    SLresult (*CreateEffect) (SLAndroidEffectItf self,
94            SLInterfaceID effectImplementationId);
95
96    SLresult (*ReleaseEffect) (SLAndroidEffectItf self,
97            SLInterfaceID effectImplementationId);
98
99    SLresult (*SetEnabled) (SLAndroidEffectItf self,
100            SLInterfaceID effectImplementationId,
101            SLboolean enabled);
102
103    SLresult (*IsEnabled) (SLAndroidEffectItf self,
104            SLInterfaceID effectImplementationId,
105            SLboolean *pEnabled);
106
107    SLresult (*SendCommand) (SLAndroidEffectItf self,
108            SLInterfaceID effectImplementationId,
109            SLuint32 command,
110            SLuint32 commandSize,
111            void *pCommandData,
112            SLuint32 *replySize,
113            void *pReplyData);
114};
115
116
117/*---------------------------------------------------------------------------*/
118/* Android Effect Send interface                                             */
119/*---------------------------------------------------------------------------*/
120
121extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
122
123/** Android Effect Send interface methods */
124
125struct SLAndroidEffectSendItf_;
126typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
127
128struct SLAndroidEffectSendItf_ {
129    SLresult (*EnableEffectSend) (
130        SLAndroidEffectSendItf self,
131        SLInterfaceID effectImplementationId,
132        SLboolean enable,
133        SLmillibel initialLevel
134    );
135    SLresult (*IsEnabled) (
136        SLAndroidEffectSendItf self,
137        SLInterfaceID effectImplementationId,
138        SLboolean *pEnable
139    );
140    SLresult (*SetDirectLevel) (
141        SLAndroidEffectSendItf self,
142        SLmillibel directLevel
143    );
144    SLresult (*GetDirectLevel) (
145        SLAndroidEffectSendItf self,
146        SLmillibel *pDirectLevel
147    );
148    SLresult (*SetSendLevel) (
149        SLAndroidEffectSendItf self,
150        SLInterfaceID effectImplementationId,
151        SLmillibel sendLevel
152    );
153    SLresult (*GetSendLevel)(
154        SLAndroidEffectSendItf self,
155        SLInterfaceID effectImplementationId,
156        SLmillibel *pSendLevel
157    );
158};
159
160
161/*---------------------------------------------------------------------------*/
162/* Android Effect Capabilities interface                                     */
163/*---------------------------------------------------------------------------*/
164
165extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
166
167/** Android Effect Capabilities interface methods */
168
169struct SLAndroidEffectCapabilitiesItf_;
170typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
171
172struct SLAndroidEffectCapabilitiesItf_ {
173
174    SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self,
175            SLuint32 *pNumSupportedEffects);
176
177
178    SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self,
179            SLuint32 index,
180            SLInterfaceID *pEffectType,
181            SLInterfaceID *pEffectImplementation,
182            SLchar *pName,
183            SLuint16 *pNameSize);
184};
185
186
187/*---------------------------------------------------------------------------*/
188/* Android Configuration interface                                           */
189/*---------------------------------------------------------------------------*/
190extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
191
192/** Android Configuration interface methods */
193
194struct SLAndroidConfigurationItf_;
195typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
196
197/*
198 * Java Proxy Type IDs
199 */
200#define SL_ANDROID_JAVA_PROXY_ROUTING   0x0001
201
202struct SLAndroidConfigurationItf_ {
203
204    SLresult (*SetConfiguration) (SLAndroidConfigurationItf self,
205            const SLchar *configKey,
206            const void *pConfigValue,
207            SLuint32 valueSize);
208
209    SLresult (*GetConfiguration) (SLAndroidConfigurationItf self,
210           const SLchar *configKey,
211           SLuint32 *pValueSize,
212           void *pConfigValue
213       );
214
215    SLresult (*AcquireJavaProxy) (SLAndroidConfigurationItf self,
216            SLuint32 proxyType,
217            jobject *pProxyObj);
218
219    SLresult (*ReleaseJavaProxy) (SLAndroidConfigurationItf self,
220            SLuint32 proxyType);
221};
222
223
224/*---------------------------------------------------------------------------*/
225/* Android Simple Buffer Queue Interface                                     */
226/*---------------------------------------------------------------------------*/
227
228extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
229
230struct SLAndroidSimpleBufferQueueItf_;
231typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
232
233typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)(
234	SLAndroidSimpleBufferQueueItf caller,
235	void *pContext
236);
237
238/** Android simple buffer queue state **/
239
240typedef struct SLAndroidSimpleBufferQueueState_ {
241	SLuint32	count;
242	SLuint32	index;
243} SLAndroidSimpleBufferQueueState;
244
245
246struct SLAndroidSimpleBufferQueueItf_ {
247	SLresult (*Enqueue) (
248		SLAndroidSimpleBufferQueueItf self,
249		const void *pBuffer,
250		SLuint32 size
251	);
252	SLresult (*Clear) (
253		SLAndroidSimpleBufferQueueItf self
254	);
255	SLresult (*GetState) (
256		SLAndroidSimpleBufferQueueItf self,
257		SLAndroidSimpleBufferQueueState *pState
258	);
259	SLresult (*RegisterCallback) (
260		SLAndroidSimpleBufferQueueItf self,
261		slAndroidSimpleBufferQueueCallback callback,
262		void* pContext
263	);
264};
265
266
267/*---------------------------------------------------------------------------*/
268/* Android Buffer Queue Interface                                            */
269/*---------------------------------------------------------------------------*/
270
271extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE;
272
273struct SLAndroidBufferQueueItf_;
274typedef const struct SLAndroidBufferQueueItf_ * const * SLAndroidBufferQueueItf;
275
276#define SL_ANDROID_ITEMKEY_NONE             ((SLuint32) 0x00000000)
277#define SL_ANDROID_ITEMKEY_EOS              ((SLuint32) 0x00000001)
278#define SL_ANDROID_ITEMKEY_DISCONTINUITY    ((SLuint32) 0x00000002)
279#define SL_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((SLuint32) 0x00000003)
280#define SL_ANDROID_ITEMKEY_FORMAT_CHANGE    ((SLuint32) 0x00000004)
281
282#define SL_ANDROIDBUFFERQUEUEEVENT_NONE        ((SLuint32) 0x00000000)
283#define SL_ANDROIDBUFFERQUEUEEVENT_PROCESSED   ((SLuint32) 0x00000001)
284#if 0   // reserved for future use
285#define SL_ANDROIDBUFFERQUEUEEVENT_UNREALIZED  ((SLuint32) 0x00000002)
286#define SL_ANDROIDBUFFERQUEUEEVENT_CLEARED     ((SLuint32) 0x00000004)
287#define SL_ANDROIDBUFFERQUEUEEVENT_STOPPED     ((SLuint32) 0x00000008)
288#define SL_ANDROIDBUFFERQUEUEEVENT_ERROR       ((SLuint32) 0x00000010)
289#define SL_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020)
290#endif
291
292typedef struct SLAndroidBufferItem_ {
293    SLuint32 itemKey;  // identifies the item
294    SLuint32 itemSize;
295    SLuint8  itemData[0];
296} SLAndroidBufferItem;
297
298typedef SLresult (SLAPIENTRY *slAndroidBufferQueueCallback)(
299    SLAndroidBufferQueueItf caller,/* input */
300    void *pCallbackContext,        /* input */
301    void *pBufferContext,          /* input */
302    void *pBufferData,             /* input */
303    SLuint32 dataSize,             /* input */
304    SLuint32 dataUsed,             /* input */
305    const SLAndroidBufferItem *pItems,/* input */
306    SLuint32 itemsLength           /* input */
307);
308
309typedef struct SLAndroidBufferQueueState_ {
310    SLuint32    count;
311    SLuint32    index;
312} SLAndroidBufferQueueState;
313
314struct SLAndroidBufferQueueItf_ {
315    SLresult (*RegisterCallback) (
316        SLAndroidBufferQueueItf self,
317        slAndroidBufferQueueCallback callback,
318        void* pCallbackContext
319    );
320
321    SLresult (*Clear) (
322        SLAndroidBufferQueueItf self
323    );
324
325    SLresult (*Enqueue) (
326        SLAndroidBufferQueueItf self,
327        void *pBufferContext,
328        void *pData,
329        SLuint32 dataLength,
330        const SLAndroidBufferItem *pItems,
331        SLuint32 itemsLength
332    );
333
334    SLresult (*GetState) (
335        SLAndroidBufferQueueItf self,
336        SLAndroidBufferQueueState *pState
337    );
338
339    SLresult (*SetCallbackEventsMask) (
340            SLAndroidBufferQueueItf self,
341            SLuint32 eventFlags
342    );
343
344    SLresult (*GetCallbackEventsMask) (
345            SLAndroidBufferQueueItf self,
346            SLuint32 *pEventFlags
347    );
348};
349
350
351/*---------------------------------------------------------------------------*/
352/* Android File Descriptor Data Locator                                      */
353/*---------------------------------------------------------------------------*/
354
355/** Addendum to Data locator macros  */
356#define SL_DATALOCATOR_ANDROIDFD                ((SLuint32) 0x800007BC)
357
358#define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll)
359
360/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */
361typedef struct SLDataLocator_AndroidFD_ {
362    SLuint32        locatorType;
363    SLint32         fd;
364    SLAint64        offset;
365    SLAint64        length;
366} SLDataLocator_AndroidFD;
367
368
369/*---------------------------------------------------------------------------*/
370/* Android Android Simple Buffer Queue Data Locator                          */
371/*---------------------------------------------------------------------------*/
372
373/** Addendum to Data locator macros  */
374#define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD)
375
376/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE*/
377typedef struct SLDataLocator_AndroidSimpleBufferQueue {
378	SLuint32	locatorType;
379	SLuint32	numBuffers;
380} SLDataLocator_AndroidSimpleBufferQueue;
381
382
383/*---------------------------------------------------------------------------*/
384/* Android Buffer Queue Data Locator                                         */
385/*---------------------------------------------------------------------------*/
386
387/** Addendum to Data locator macros  */
388#define SL_DATALOCATOR_ANDROIDBUFFERQUEUE       ((SLuint32) 0x800007BE)
389
390/** Android Buffer Queue-based data locator definition,
391 *  locatorType must be SL_DATALOCATOR_ANDROIDBUFFERQUEUE */
392typedef struct SLDataLocator_AndroidBufferQueue_ {
393    SLuint32    locatorType;
394    SLuint32    numBuffers;
395} SLDataLocator_AndroidBufferQueue;
396
397/**
398 * MIME types required for data in Android Buffer Queues
399 */
400#define SL_ANDROID_MIME_AACADTS            ((SLchar *) "audio/vnd.android.aac-adts")
401
402/*---------------------------------------------------------------------------*/
403/* Acoustic Echo Cancellation (AEC) Interface                                */
404/* --------------------------------------------------------------------------*/
405extern SL_API const SLInterfaceID SL_IID_ANDROIDACOUSTICECHOCANCELLATION;
406
407struct SLAndroidAcousticEchoCancellationItf_;
408typedef const struct SLAndroidAcousticEchoCancellationItf_ * const *
409        SLAndroidAcousticEchoCancellationItf;
410
411struct SLAndroidAcousticEchoCancellationItf_ {
412    SLresult (*SetEnabled)(
413        SLAndroidAcousticEchoCancellationItf self,
414        SLboolean enabled
415    );
416    SLresult (*IsEnabled)(
417        SLAndroidAcousticEchoCancellationItf self,
418        SLboolean *pEnabled
419    );
420    SLresult (*IsAvailable)(
421        SLAndroidAcousticEchoCancellationItf self,
422        SLboolean *pEnabled
423    );
424};
425
426/*---------------------------------------------------------------------------*/
427/* Automatic Gain Control (ACC) Interface                                    */
428/* --------------------------------------------------------------------------*/
429extern SL_API const SLInterfaceID SL_IID_ANDROIDAUTOMATICGAINCONTROL;
430
431struct SLAndroidAutomaticGainControlItf_;
432typedef const struct SLAndroidAutomaticGainControlItf_ * const * SLAndroidAutomaticGainControlItf;
433
434struct SLAndroidAutomaticGainControlItf_ {
435    SLresult (*SetEnabled)(
436        SLAndroidAutomaticGainControlItf self,
437        SLboolean enabled
438    );
439    SLresult (*IsEnabled)(
440        SLAndroidAutomaticGainControlItf self,
441        SLboolean *pEnabled
442    );
443    SLresult (*IsAvailable)(
444        SLAndroidAutomaticGainControlItf self,
445        SLboolean *pEnabled
446    );
447};
448
449/*---------------------------------------------------------------------------*/
450/* Noise Suppression Interface                                               */
451/* --------------------------------------------------------------------------*/
452extern SL_API const SLInterfaceID SL_IID_ANDROIDNOISESUPPRESSION;
453
454struct SLAndroidNoiseSuppressionItf_;
455typedef const struct SLAndroidNoiseSuppressionItf_ * const * SLAndroidNoiseSuppressionItf;
456
457struct SLAndroidNoiseSuppressionItf_ {
458    SLresult (*SetEnabled)(
459        SLAndroidNoiseSuppressionItf self,
460        SLboolean enabled
461    );
462    SLresult (*IsEnabled)(
463        SLAndroidNoiseSuppressionItf self,
464        SLboolean *pEnabled
465    );
466    SLresult (*IsAvailable)(
467        SLAndroidNoiseSuppressionItf self,
468        SLboolean *pEnabled
469    );
470};
471
472#ifdef __cplusplus
473}
474#endif /* __cplusplus */
475
476#endif /* OPENSL_ES_ANDROID_H_ */
477