OpenSLES_Android.h revision 11cd02dfb91661c65134cac258cf5924270e9d2b
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
24extern "C" {
25#endif
26
27#include "OpenSLES.h"
28
29/*---------------------------------------------------------------------------*/
30/* Android common types                                                      */
31/*---------------------------------------------------------------------------*/
32
33typedef sl_int64_t             SLAint64;          /* 64 bit signed integer   */
34
35typedef sl_uint64_t            SLAuint64;         /* 64 bit unsigned integer */
36
37/*---------------------------------------------------------------------------*/
38/* Android Effect interface                                                  */
39/*---------------------------------------------------------------------------*/
40
41extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT;
42
43/** Android Effect interface methods */
44
45struct SLAndroidEffectItf_;
46typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
47
48struct SLAndroidEffectItf_ {
49
50    SLresult (*CreateEffect) (SLAndroidEffectItf self,
51            SLInterfaceID effectImplementationId);
52
53    SLresult (*ReleaseEffect) (SLAndroidEffectItf self,
54            SLInterfaceID effectImplementationId);
55
56    SLresult (*SetEnabled) (SLAndroidEffectItf self,
57            SLInterfaceID effectImplementationId,
58            SLboolean enabled);
59
60    SLresult (*IsEnabled) (SLAndroidEffectItf self,
61            SLInterfaceID effectImplementationId,
62            SLboolean *pEnabled);
63
64    SLresult (*SendCommand) (SLAndroidEffectItf self,
65            SLInterfaceID effectImplementationId,
66            SLuint32 command,
67            SLuint32 commandSize,
68            void *pCommandData,
69            SLuint32 *replySize,
70            void *pReplyData);
71};
72
73
74/*---------------------------------------------------------------------------*/
75/* Android Effect Send interface                                             */
76/*---------------------------------------------------------------------------*/
77
78extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
79
80/** Android Effect Send interface methods */
81
82struct SLAndroidEffectSendItf_;
83typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
84
85struct SLAndroidEffectSendItf_ {
86    SLresult (*EnableEffectSend) (
87        SLAndroidEffectSendItf self,
88        SLInterfaceID effectImplementationId,
89        SLboolean enable,
90        SLmillibel initialLevel
91    );
92    SLresult (*IsEnabled) (
93        SLAndroidEffectSendItf self,
94        SLInterfaceID effectImplementationId,
95        SLboolean *pEnable
96    );
97    SLresult (*SetDirectLevel) (
98        SLAndroidEffectSendItf self,
99        SLmillibel directLevel
100    );
101    SLresult (*GetDirectLevel) (
102        SLAndroidEffectSendItf self,
103        SLmillibel *pDirectLevel
104    );
105    SLresult (*SetSendLevel) (
106        SLAndroidEffectSendItf self,
107        SLInterfaceID effectImplementationId,
108        SLmillibel sendLevel
109    );
110    SLresult (*GetSendLevel)(
111        SLAndroidEffectSendItf self,
112        SLInterfaceID effectImplementationId,
113        SLmillibel *pSendLevel
114    );
115};
116
117
118/*---------------------------------------------------------------------------*/
119/* Android Effect Capabilities interface                                     */
120/*---------------------------------------------------------------------------*/
121
122extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
123
124/** Android Effect Capabilities interface methods */
125
126struct SLAndroidEffectCapabilitiesItf_;
127typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
128
129struct SLAndroidEffectCapabilitiesItf_ {
130
131    SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self,
132            SLuint32 *pNumSupportedEffects);
133
134
135    SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self,
136            SLuint32 index,
137            SLInterfaceID *pEffectType,
138            SLInterfaceID *pEffectImplementation,
139            SLchar *pName,
140            SLuint16 *pNameSize);
141};
142
143
144/*---------------------------------------------------------------------------*/
145/* Android Configuration interface                                           */
146/*---------------------------------------------------------------------------*/
147extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
148
149/** Android Configuration interface methods */
150
151struct SLAndroidConfigurationItf_;
152typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
153
154struct SLAndroidConfigurationItf_ {
155
156    SLresult (*SetConfiguration) (SLAndroidConfigurationItf self,
157            const SLchar *configKey,
158            const void *pConfigValue,
159            SLuint32 valueSize);
160
161    SLresult (*GetConfiguration) (SLAndroidConfigurationItf self,
162           const SLchar *configKey,
163           SLuint32 *pValueSize,
164           void *pConfigValue
165       );
166};
167
168
169/*---------------------------------------------------------------------------*/
170/* Android Simple Buffer Queue Interface                                     */
171/*---------------------------------------------------------------------------*/
172
173extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
174
175struct SLAndroidSimpleBufferQueueItf_;
176typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
177
178typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)(
179	SLAndroidSimpleBufferQueueItf caller,
180	void *pContext
181);
182
183/** Android simple buffer queue state **/
184
185typedef struct SLAndroidSimpleBufferQueueState_ {
186	SLuint32	count;
187	SLuint32	index;
188} SLAndroidSimpleBufferQueueState;
189
190
191struct SLAndroidSimpleBufferQueueItf_ {
192	SLresult (*Enqueue) (
193		SLAndroidSimpleBufferQueueItf self,
194		const void *pBuffer,
195		SLuint32 size
196	);
197	SLresult (*Clear) (
198		SLAndroidSimpleBufferQueueItf self
199	);
200	SLresult (*GetState) (
201		SLAndroidSimpleBufferQueueItf self,
202		SLAndroidSimpleBufferQueueState *pState
203	);
204	SLresult (*RegisterCallback) (
205		SLAndroidSimpleBufferQueueItf self,
206		slAndroidSimpleBufferQueueCallback callback,
207		void* pContext
208	);
209};
210
211
212/*---------------------------------------------------------------------------*/
213/* Android Buffer Queue Interface                                            */
214/*---------------------------------------------------------------------------*/
215
216extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE;
217
218struct SLAndroidBufferQueueItf_;
219typedef const struct SLAndroidBufferQueueItf_ * const * SLAndroidBufferQueueItf;
220
221#define SL_ANDROID_ITEMKEY_NONE             ((SLuint32) 0x00000000)
222#define SL_ANDROID_ITEMKEY_EOS              ((SLuint32) 0x00000001)
223#define SL_ANDROID_ITEMKEY_DISCONTINUITY    ((SLuint32) 0x00000002)
224#define SL_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((SLuint32) 0x00000003)
225#define SL_ANDROID_ITEMKEY_FORMAT_CHANGE    ((SLuint32) 0x00000004)
226
227#define SL_ANDROIDBUFFERQUEUEEVENT_NONE        ((SLuint32) 0x00000000)
228#define SL_ANDROIDBUFFERQUEUEEVENT_PROCESSED   ((SLuint32) 0x00000001)
229#if 0   // reserved for future use
230#define SL_ANDROIDBUFFERQUEUEEVENT_UNREALIZED  ((SLuint32) 0x00000002)
231#define SL_ANDROIDBUFFERQUEUEEVENT_CLEARED     ((SLuint32) 0x00000004)
232#define SL_ANDROIDBUFFERQUEUEEVENT_STOPPED     ((SLuint32) 0x00000008)
233#define SL_ANDROIDBUFFERQUEUEEVENT_ERROR       ((SLuint32) 0x00000010)
234#define SL_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020)
235#endif
236
237typedef struct SLAndroidBufferItem_ {
238    SLuint32 itemKey;  // identifies the item
239    SLuint32 itemSize;
240    SLuint8  itemData[0];
241} SLAndroidBufferItem;
242
243typedef SLresult (SLAPIENTRY *slAndroidBufferQueueCallback)(
244    SLAndroidBufferQueueItf caller,/* input */
245    void *pCallbackContext,        /* input */
246    void *pBufferContext,          /* input */
247    void *pBufferData,             /* input */
248    SLuint32 dataSize,             /* input */
249    SLuint32 dataUsed,             /* input */
250    const SLAndroidBufferItem *pItems,/* input */
251    SLuint32 itemsLength           /* input */
252);
253
254typedef struct SLAndroidBufferQueueState_ {
255    SLuint32    count;
256    SLuint32    index;
257} SLAndroidBufferQueueState;
258
259struct SLAndroidBufferQueueItf_ {
260    SLresult (*RegisterCallback) (
261        SLAndroidBufferQueueItf self,
262        slAndroidBufferQueueCallback callback,
263        void* pCallbackContext
264    );
265
266    SLresult (*Clear) (
267        SLAndroidBufferQueueItf self
268    );
269
270    SLresult (*Enqueue) (
271        SLAndroidBufferQueueItf self,
272        void *pBufferContext,
273        void *pData,
274        SLuint32 dataLength,
275        const SLAndroidBufferItem *pItems,
276        SLuint32 itemsLength
277    );
278
279    SLresult (*GetState) (
280        SLAndroidBufferQueueItf self,
281        SLAndroidBufferQueueState *pState
282    );
283
284    SLresult (*SetCallbackEventsMask) (
285            SLAndroidBufferQueueItf self,
286            SLuint32 eventFlags
287    );
288
289    SLresult (*GetCallbackEventsMask) (
290            SLAndroidBufferQueueItf self,
291            SLuint32 *pEventFlags
292    );
293};
294
295
296/*---------------------------------------------------------------------------*/
297/* Android File Descriptor Data Locator                                      */
298/*---------------------------------------------------------------------------*/
299
300/** Addendum to Data locator macros  */
301#define SL_DATALOCATOR_ANDROIDFD                ((SLuint32) 0x800007BC)
302
303#define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll)
304
305/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */
306typedef struct SLDataLocator_AndroidFD_ {
307    SLuint32        locatorType;
308    SLint32         fd;
309    SLAint64        offset;
310    SLAint64        length;
311} SLDataLocator_AndroidFD;
312
313
314/*---------------------------------------------------------------------------*/
315/* Android Android Simple Buffer Queue Data Locator                          */
316/*---------------------------------------------------------------------------*/
317
318/** Addendum to Data locator macros  */
319#define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD)
320
321/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE*/
322typedef struct SLDataLocator_AndroidSimpleBufferQueue {
323	SLuint32	locatorType;
324	SLuint32	numBuffers;
325} SLDataLocator_AndroidSimpleBufferQueue;
326
327
328/*---------------------------------------------------------------------------*/
329/* Android Buffer Queue Data Locator                                         */
330/*---------------------------------------------------------------------------*/
331
332/** Addendum to Data locator macros  */
333#define SL_DATALOCATOR_ANDROIDBUFFERQUEUE       ((SLuint32) 0x800007BE)
334
335/** Android Buffer Queue-based data locator definition,
336 *  locatorType must be SL_DATALOCATOR_ANDROIDBUFFERQUEUE */
337typedef struct SLDataLocator_AndroidBufferQueue_ {
338    SLuint32    locatorType;
339    SLuint32    numBuffers;
340} SLDataLocator_AndroidBufferQueue;
341
342/**
343 * MIME types required for data in Android Buffer Queues
344 */
345#define SL_ANDROID_MIME_AACADTS            ((SLchar *) "audio/vnd.android.aac-adts")
346
347#ifdef __cplusplus
348}
349#endif /* __cplusplus */
350
351#endif /* OPENSL_ES_ANDROID_H_ */
352