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