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