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