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#ifdef __cplusplus
21extern "C" {
22#endif
23
24#include "OpenSLES.h"
25
26/*---------------------------------------------------------------------------*/
27/* Android common types                                                      */
28/*---------------------------------------------------------------------------*/
29
30typedef sl_int64_t             SLAint64;           /* 64 bit signed integer */
31
32
33/*---------------------------------------------------------------------------*/
34/* Android Effect interface                                                  */
35/*---------------------------------------------------------------------------*/
36
37extern SLAPIENTRY const SLInterfaceID SL_IID_ANDROIDEFFECT;
38
39/** Android Effect interface methods */
40
41struct SLAndroidEffectItf_;
42typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
43
44struct SLAndroidEffectItf_ {
45
46    SLresult (*CreateEffect) (SLAndroidEffectItf self,
47            SLInterfaceID effectImplementationId);
48
49    SLresult (*ReleaseEffect) (SLAndroidEffectItf self,
50            SLInterfaceID effectImplementationId);
51
52    SLresult (*SetEnabled) (SLAndroidEffectItf self,
53            SLInterfaceID effectImplementationId,
54            SLboolean enabled);
55
56    SLresult (*IsEnabled) (SLAndroidEffectItf self,
57            SLInterfaceID effectImplementationId,
58            SLboolean *pEnabled);
59
60    SLresult (*SendCommand) (SLAndroidEffectItf self,
61            SLInterfaceID effectImplementationId,
62            SLuint32 command,
63            SLuint32 commandSize,
64            void *pCommandData,
65            SLuint32 *replySize,
66            void *pReplyData);
67};
68
69
70/*---------------------------------------------------------------------------*/
71/* Android Effect Send interface                                             */
72/*---------------------------------------------------------------------------*/
73
74extern SLAPIENTRY const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
75
76/** Android Effect Send interface methods */
77
78struct SLAndroidEffectSendItf_;
79typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
80
81struct SLAndroidEffectSendItf_ {
82    SLresult (*EnableEffectSend) (
83        SLAndroidEffectSendItf self,
84        SLInterfaceID effectImplementationId,
85        SLboolean enable,
86        SLmillibel initialLevel
87    );
88    SLresult (*IsEnabled) (
89        SLAndroidEffectSendItf self,
90        SLInterfaceID effectImplementationId,
91        SLboolean *pEnable
92    );
93    SLresult (*SetDirectLevel) (
94        SLAndroidEffectSendItf self,
95        SLmillibel directLevel
96    );
97    SLresult (*GetDirectLevel) (
98        SLAndroidEffectSendItf self,
99        SLmillibel *pDirectLevel
100    );
101    SLresult (*SetSendLevel) (
102        SLAndroidEffectSendItf self,
103        SLInterfaceID effectImplementationId,
104        SLmillibel sendLevel
105    );
106    SLresult (*GetSendLevel)(
107        SLAndroidEffectSendItf self,
108        SLInterfaceID effectImplementationId,
109        SLmillibel *pSendLevel
110    );
111};
112
113
114/*---------------------------------------------------------------------------*/
115/* Android Effect Capabilities interface                                     */
116/*---------------------------------------------------------------------------*/
117
118extern SLAPIENTRY const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
119
120/** Android Effect Capabilities interface methods */
121
122struct SLAndroidEffectCapabilitiesItf_;
123typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
124
125struct SLAndroidEffectCapabilitiesItf_ {
126
127    SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self,
128            SLuint32 *pNumSupportedEffects);
129
130
131    SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self,
132            SLuint32 index,
133            SLInterfaceID *pEffectType,
134            SLInterfaceID *pEffectImplementation,
135            SLchar *pName,
136            SLuint16 *pNameSize);
137};
138
139
140/*---------------------------------------------------------------------------*/
141/* Android Configuration interface                                           */
142/*---------------------------------------------------------------------------*/
143extern SLAPIENTRY const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
144
145/** Android Configuration interface methods */
146
147struct SLAndroidConfigurationItf_;
148typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
149
150struct SLAndroidConfigurationItf_ {
151
152    SLresult (*SetConfiguration) (SLAndroidConfigurationItf self,
153            const SLchar *configKey,
154            const void *pConfigValue,
155            SLuint32 valueSize);
156
157    SLresult (*GetConfiguration) (SLAndroidConfigurationItf self,
158           const SLchar *configKey,
159           SLuint32 *pValueSize,
160           void *pConfigValue
161       );
162};
163
164
165/*---------------------------------------------------------------------------*/
166/* Android Simple Buffer Queue Interface                                     */
167/*---------------------------------------------------------------------------*/
168
169extern SLAPIENTRY const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
170
171struct SLAndroidSimpleBufferQueueItf_;
172typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
173
174typedef void (/*SLAPIENTRY*/ *slAndroidSimpleBufferQueueCallback)(
175	SLAndroidSimpleBufferQueueItf caller,
176	void *pContext
177);
178
179/** Android simple buffer queue state **/
180
181typedef struct SLAndroidSimpleBufferQueueState_ {
182	SLuint32	count;
183	SLuint32	index;
184} SLAndroidSimpleBufferQueueState;
185
186
187struct SLAndroidSimpleBufferQueueItf_ {
188	SLresult (*Enqueue) (
189		SLAndroidSimpleBufferQueueItf self,
190		const void *pBuffer,
191		SLuint32 size
192	);
193	SLresult (*Clear) (
194		SLAndroidSimpleBufferQueueItf self
195	);
196	SLresult (*GetState) (
197		SLAndroidSimpleBufferQueueItf self,
198		SLAndroidSimpleBufferQueueState *pState
199	);
200	SLresult (*RegisterCallback) (
201		SLAndroidSimpleBufferQueueItf self,
202		slAndroidSimpleBufferQueueCallback callback,
203		void* pContext
204	);
205};
206
207
208/*---------------------------------------------------------------------------*/
209/* Android File Descriptor Data Locator                                      */
210/*---------------------------------------------------------------------------*/
211
212/** Addendum to Data locator macros  */
213#define SL_DATALOCATOR_ANDROIDFD                ((SLuint32) 0x800007BC)
214
215#define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll)
216
217/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */
218typedef struct SLDataLocator_AndroidFD_ {
219    SLuint32        locatorType;
220    SLint32         fd;
221    SLAint64        offset;
222    SLAint64        length;
223} SLDataLocator_AndroidFD;
224
225
226/*---------------------------------------------------------------------------*/
227/* Android Android Simple Buffer Queue Data Locator                          */
228/*---------------------------------------------------------------------------*/
229
230/** Addendum to Data locator macros  */
231#define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD)
232
233/** BufferQueue-based data locator definition where locatorType must be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE*/
234typedef struct SLDataLocator_AndroidSimpleBufferQueue {
235	SLuint32	locatorType;
236	SLuint32	numBuffers;
237} SLDataLocator_AndroidSimpleBufferQueue;
238
239
240#ifdef __cplusplus
241}
242#endif /* __cplusplus */
243
244#endif /* OPENSL_ES_ANDROID_H_ */
245