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