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