blob: dcf343279183841e2a6aab01f3d80d893635502a [file] [log] [blame]
Dan Albert287553d2017-02-16 10:47:51 -08001/*
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 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
48typedef 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
63extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT;
64
65/** Android Effect interface methods */
66
67struct SLAndroidEffectItf_;
68typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
69
70struct 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
100extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
101
102/** Android Effect Send interface methods */
103
104struct SLAndroidEffectSendItf_;
105typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
106
107struct 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
144extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
145
146/** Android Effect Capabilities interface methods */
147
148struct SLAndroidEffectCapabilitiesItf_;
149typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
150
151struct 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/*---------------------------------------------------------------------------*/
169extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
170
171/** Android Configuration interface methods */
172
173struct SLAndroidConfigurationItf_;
174typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
175
176struct 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
195extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
196
197struct SLAndroidSimpleBufferQueueItf_;
198typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
199
200typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)(
201 SLAndroidSimpleBufferQueueItf caller,
202 void *pContext
203);
204
205/** Android simple buffer queue state **/
206
207typedef struct SLAndroidSimpleBufferQueueState_ {
208 SLuint32 count;
209 SLuint32 index;
210} SLAndroidSimpleBufferQueueState;
211
212
213struct 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
238extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE;
239
240struct SLAndroidBufferQueueItf_;
241typedef 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
259typedef struct SLAndroidBufferItem_ {
260 SLuint32 itemKey; // identifies the item
261 SLuint32 itemSize;
262 SLuint8 itemData[0];
263} SLAndroidBufferItem;
264
265typedef 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
276typedef struct SLAndroidBufferQueueState_ {
277 SLuint32 count;
278 SLuint32 index;
279} SLAndroidBufferQueueState;
280
281struct 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 */
328typedef 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*/
344typedef 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 */
359typedef 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_ */