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