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.h" 21#include "OpenSLES_AndroidConfiguration.h" 22#include "OpenSLES_AndroidMetadata.h" 23#include <jni.h> 24 25#ifdef __cplusplus 26extern "C" { 27#endif 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#define SL_ANDROID_SPEAKER_NON_POSITIONAL ((SLuint32) 0x80000000) 60 61// Make an indexed channel mask from a bitfield. 62// 63// Each bit in the bitfield corresponds to a channel index, 64// from least-significant bit (channel 0) up to the bit 65// corresponding to the maximum channel count (currently FCC_8). 66// A '1' in the bitfield indicates that the channel should be 67// included in the stream, while a '0' indicates that it 68// should be excluded. For instance, a bitfield of 0x0A (binary 00001010) 69// would define a stream that contains channels 1 and 3. (The corresponding 70// indexed mask, after setting the SL_ANDROID_NON_POSITIONAL bit, 71// would be 0x8000000A.) 72#define SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield) \ 73 ((bitfield) | SL_ANDROID_SPEAKER_NON_POSITIONAL) 74 75// Specifying SL_ANDROID_SPEAKER_USE_DEFAULT as a channel mask in 76// SLAndroidDataFormat_PCM_EX causes OpenSL ES to assign a default 77// channel mask based on the number of channels requested. This 78// value cannot be combined with SL_ANDROID_SPEAKER_NON_POSITIONAL. 79#define SL_ANDROID_SPEAKER_USE_DEFAULT ((SLuint32)0) 80 81/*---------------------------------------------------------------------------*/ 82/* Android Effect interface */ 83/*---------------------------------------------------------------------------*/ 84 85extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT; 86 87/** Android Effect interface methods */ 88 89struct SLAndroidEffectItf_; 90typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf; 91 92struct SLAndroidEffectItf_ { 93 94 SLresult (*CreateEffect) (SLAndroidEffectItf self, 95 SLInterfaceID effectImplementationId); 96 97 SLresult (*ReleaseEffect) (SLAndroidEffectItf self, 98 SLInterfaceID effectImplementationId); 99 100 SLresult (*SetEnabled) (SLAndroidEffectItf self, 101 SLInterfaceID effectImplementationId, 102 SLboolean enabled); 103 104 SLresult (*IsEnabled) (SLAndroidEffectItf self, 105 SLInterfaceID effectImplementationId, 106 SLboolean *pEnabled); 107 108 SLresult (*SendCommand) (SLAndroidEffectItf self, 109 SLInterfaceID effectImplementationId, 110 SLuint32 command, 111 SLuint32 commandSize, 112 void *pCommandData, 113 SLuint32 *replySize, 114 void *pReplyData); 115}; 116 117 118/*---------------------------------------------------------------------------*/ 119/* Android Effect Send interface */ 120/*---------------------------------------------------------------------------*/ 121 122extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND; 123 124/** Android Effect Send interface methods */ 125 126struct SLAndroidEffectSendItf_; 127typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf; 128 129struct SLAndroidEffectSendItf_ { 130 SLresult (*EnableEffectSend) ( 131 SLAndroidEffectSendItf self, 132 SLInterfaceID effectImplementationId, 133 SLboolean enable, 134 SLmillibel initialLevel 135 ); 136 SLresult (*IsEnabled) ( 137 SLAndroidEffectSendItf self, 138 SLInterfaceID effectImplementationId, 139 SLboolean *pEnable 140 ); 141 SLresult (*SetDirectLevel) ( 142 SLAndroidEffectSendItf self, 143 SLmillibel directLevel 144 ); 145 SLresult (*GetDirectLevel) ( 146 SLAndroidEffectSendItf self, 147 SLmillibel *pDirectLevel 148 ); 149 SLresult (*SetSendLevel) ( 150 SLAndroidEffectSendItf self, 151 SLInterfaceID effectImplementationId, 152 SLmillibel sendLevel 153 ); 154 SLresult (*GetSendLevel)( 155 SLAndroidEffectSendItf self, 156 SLInterfaceID effectImplementationId, 157 SLmillibel *pSendLevel 158 ); 159}; 160 161 162/*---------------------------------------------------------------------------*/ 163/* Android Effect Capabilities interface */ 164/*---------------------------------------------------------------------------*/ 165 166extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES; 167 168/** Android Effect Capabilities interface methods */ 169 170struct SLAndroidEffectCapabilitiesItf_; 171typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf; 172 173struct SLAndroidEffectCapabilitiesItf_ { 174 175 SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self, 176 SLuint32 *pNumSupportedEffects); 177 178 179 SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self, 180 SLuint32 index, 181 SLInterfaceID *pEffectType, 182 SLInterfaceID *pEffectImplementation, 183 SLchar *pName, 184 SLuint16 *pNameSize); 185}; 186 187 188/*---------------------------------------------------------------------------*/ 189/* Android Configuration interface */ 190/*---------------------------------------------------------------------------*/ 191extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION; 192 193/** Android Configuration interface methods */ 194 195struct SLAndroidConfigurationItf_; 196typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf; 197 198/* 199 * Java Proxy Type IDs 200 */ 201#define SL_ANDROID_JAVA_PROXY_ROUTING 0x0001 202 203struct SLAndroidConfigurationItf_ { 204 205 SLresult (*SetConfiguration) (SLAndroidConfigurationItf self, 206 const SLchar *configKey, 207 const void *pConfigValue, 208 SLuint32 valueSize); 209 210 SLresult (*GetConfiguration) (SLAndroidConfigurationItf self, 211 const SLchar *configKey, 212 SLuint32 *pValueSize, 213 void *pConfigValue 214 ); 215 216 SLresult (*AcquireJavaProxy) (SLAndroidConfigurationItf self, 217 SLuint32 proxyType, 218 jobject *pProxyObj); 219 220 SLresult (*ReleaseJavaProxy) (SLAndroidConfigurationItf self, 221 SLuint32 proxyType); 222}; 223 224 225/*---------------------------------------------------------------------------*/ 226/* Android Simple Buffer Queue Interface */ 227/*---------------------------------------------------------------------------*/ 228 229extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE; 230 231struct SLAndroidSimpleBufferQueueItf_; 232typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf; 233 234typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)( 235 SLAndroidSimpleBufferQueueItf caller, 236 void *pContext 237); 238 239/** Android simple buffer queue state **/ 240 241typedef struct SLAndroidSimpleBufferQueueState_ { 242 SLuint32 count; 243 SLuint32 index; 244} SLAndroidSimpleBufferQueueState; 245 246 247struct SLAndroidSimpleBufferQueueItf_ { 248 SLresult (*Enqueue) ( 249 SLAndroidSimpleBufferQueueItf self, 250 const void *pBuffer, 251 SLuint32 size 252 ); 253 SLresult (*Clear) ( 254 SLAndroidSimpleBufferQueueItf self 255 ); 256 SLresult (*GetState) ( 257 SLAndroidSimpleBufferQueueItf self, 258 SLAndroidSimpleBufferQueueState *pState 259 ); 260 SLresult (*RegisterCallback) ( 261 SLAndroidSimpleBufferQueueItf self, 262 slAndroidSimpleBufferQueueCallback callback, 263 void* pContext 264 ); 265}; 266 267 268/*---------------------------------------------------------------------------*/ 269/* Android Buffer Queue Interface */ 270/*---------------------------------------------------------------------------*/ 271 272extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE; 273 274struct SLAndroidBufferQueueItf_; 275typedef const struct SLAndroidBufferQueueItf_ * const * SLAndroidBufferQueueItf; 276 277#define SL_ANDROID_ITEMKEY_NONE ((SLuint32) 0x00000000) 278#define SL_ANDROID_ITEMKEY_EOS ((SLuint32) 0x00000001) 279#define SL_ANDROID_ITEMKEY_DISCONTINUITY ((SLuint32) 0x00000002) 280#define SL_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((SLuint32) 0x00000003) 281#define SL_ANDROID_ITEMKEY_FORMAT_CHANGE ((SLuint32) 0x00000004) 282 283#define SL_ANDROIDBUFFERQUEUEEVENT_NONE ((SLuint32) 0x00000000) 284#define SL_ANDROIDBUFFERQUEUEEVENT_PROCESSED ((SLuint32) 0x00000001) 285#if 0 // reserved for future use 286#define SL_ANDROIDBUFFERQUEUEEVENT_UNREALIZED ((SLuint32) 0x00000002) 287#define SL_ANDROIDBUFFERQUEUEEVENT_CLEARED ((SLuint32) 0x00000004) 288#define SL_ANDROIDBUFFERQUEUEEVENT_STOPPED ((SLuint32) 0x00000008) 289#define SL_ANDROIDBUFFERQUEUEEVENT_ERROR ((SLuint32) 0x00000010) 290#define SL_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020) 291#endif 292 293typedef struct SLAndroidBufferItem_ { 294 SLuint32 itemKey; // identifies the item 295 SLuint32 itemSize; 296 SLuint8 itemData[0]; 297} SLAndroidBufferItem; 298 299typedef SLresult (SLAPIENTRY *slAndroidBufferQueueCallback)( 300 SLAndroidBufferQueueItf caller,/* input */ 301 void *pCallbackContext, /* input */ 302 void *pBufferContext, /* input */ 303 void *pBufferData, /* input */ 304 SLuint32 dataSize, /* input */ 305 SLuint32 dataUsed, /* input */ 306 const SLAndroidBufferItem *pItems,/* input */ 307 SLuint32 itemsLength /* input */ 308); 309 310typedef struct SLAndroidBufferQueueState_ { 311 SLuint32 count; 312 SLuint32 index; 313} SLAndroidBufferQueueState; 314 315struct SLAndroidBufferQueueItf_ { 316 SLresult (*RegisterCallback) ( 317 SLAndroidBufferQueueItf self, 318 slAndroidBufferQueueCallback callback, 319 void* pCallbackContext 320 ); 321 322 SLresult (*Clear) ( 323 SLAndroidBufferQueueItf self 324 ); 325 326 SLresult (*Enqueue) ( 327 SLAndroidBufferQueueItf self, 328 void *pBufferContext, 329 void *pData, 330 SLuint32 dataLength, 331 const SLAndroidBufferItem *pItems, 332 SLuint32 itemsLength 333 ); 334 335 SLresult (*GetState) ( 336 SLAndroidBufferQueueItf self, 337 SLAndroidBufferQueueState *pState 338 ); 339 340 SLresult (*SetCallbackEventsMask) ( 341 SLAndroidBufferQueueItf self, 342 SLuint32 eventFlags 343 ); 344 345 SLresult (*GetCallbackEventsMask) ( 346 SLAndroidBufferQueueItf self, 347 SLuint32 *pEventFlags 348 ); 349}; 350 351 352/*---------------------------------------------------------------------------*/ 353/* Android File Descriptor Data Locator */ 354/*---------------------------------------------------------------------------*/ 355 356/** Addendum to Data locator macros */ 357#define SL_DATALOCATOR_ANDROIDFD ((SLuint32) 0x800007BC) 358 359#define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll) 360 361/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */ 362typedef struct SLDataLocator_AndroidFD_ { 363 SLuint32 locatorType; 364 SLint32 fd; 365 SLAint64 offset; 366 SLAint64 length; 367} SLDataLocator_AndroidFD; 368 369 370/*---------------------------------------------------------------------------*/ 371/* Android Android Simple Buffer Queue Data Locator */ 372/*---------------------------------------------------------------------------*/ 373 374/** Addendum to Data locator macros */ 375#define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD) 376 377/** BufferQueue-based data locator definition where locatorType must 378 * be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE 379 */ 380typedef struct SLDataLocator_AndroidSimpleBufferQueue { 381 SLuint32 locatorType; 382 SLuint32 numBuffers; 383} SLDataLocator_AndroidSimpleBufferQueue; 384 385 386/*---------------------------------------------------------------------------*/ 387/* Android Buffer Queue Data Locator */ 388/*---------------------------------------------------------------------------*/ 389 390/** Addendum to Data locator macros */ 391#define SL_DATALOCATOR_ANDROIDBUFFERQUEUE ((SLuint32) 0x800007BE) 392 393/** Android Buffer Queue-based data locator definition, 394 * locatorType must be SL_DATALOCATOR_ANDROIDBUFFERQUEUE */ 395typedef struct SLDataLocator_AndroidBufferQueue_ { 396 SLuint32 locatorType; 397 SLuint32 numBuffers; 398} SLDataLocator_AndroidBufferQueue; 399 400/** 401 * MIME types required for data in Android Buffer Queues 402 */ 403#define SL_ANDROID_MIME_AACADTS ((SLchar *) "audio/vnd.android.aac-adts") 404 405/*---------------------------------------------------------------------------*/ 406/* Acoustic Echo Cancellation (AEC) Interface */ 407/* --------------------------------------------------------------------------*/ 408extern SL_API const SLInterfaceID SL_IID_ANDROIDACOUSTICECHOCANCELLATION; 409 410struct SLAndroidAcousticEchoCancellationItf_; 411typedef const struct SLAndroidAcousticEchoCancellationItf_ * const * 412 SLAndroidAcousticEchoCancellationItf; 413 414struct SLAndroidAcousticEchoCancellationItf_ { 415 SLresult (*SetEnabled)( 416 SLAndroidAcousticEchoCancellationItf self, 417 SLboolean enabled 418 ); 419 SLresult (*IsEnabled)( 420 SLAndroidAcousticEchoCancellationItf self, 421 SLboolean *pEnabled 422 ); 423}; 424 425/*---------------------------------------------------------------------------*/ 426/* Automatic Gain Control (ACC) Interface */ 427/* --------------------------------------------------------------------------*/ 428extern SL_API const SLInterfaceID SL_IID_ANDROIDAUTOMATICGAINCONTROL; 429 430struct SLAndroidAutomaticGainControlItf_; 431typedef const struct SLAndroidAutomaticGainControlItf_ * const * SLAndroidAutomaticGainControlItf; 432 433struct SLAndroidAutomaticGainControlItf_ { 434 SLresult (*SetEnabled)( 435 SLAndroidAutomaticGainControlItf self, 436 SLboolean enabled 437 ); 438 SLresult (*IsEnabled)( 439 SLAndroidAutomaticGainControlItf self, 440 SLboolean *pEnabled 441 ); 442}; 443 444/*---------------------------------------------------------------------------*/ 445/* Noise Suppression Interface */ 446/* --------------------------------------------------------------------------*/ 447extern SL_API const SLInterfaceID SL_IID_ANDROIDNOISESUPPRESSION; 448 449struct SLAndroidNoiseSuppressionItf_; 450typedef const struct SLAndroidNoiseSuppressionItf_ * const * SLAndroidNoiseSuppressionItf; 451 452struct SLAndroidNoiseSuppressionItf_ { 453 SLresult (*SetEnabled)( 454 SLAndroidNoiseSuppressionItf self, 455 SLboolean enabled 456 ); 457 SLresult (*IsEnabled)( 458 SLAndroidNoiseSuppressionItf self, 459 SLboolean *pEnabled 460 ); 461}; 462 463#ifdef __cplusplus 464} 465#endif /* __cplusplus */ 466 467#endif /* OPENSL_ES_ANDROID_H_ */ 468