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 Effect interface                                                  */
     39 /*---------------------------------------------------------------------------*/
     40 
     41 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT;
     42 
     43 /** Android Effect interface methods */
     44 
     45 struct SLAndroidEffectItf_;
     46 typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf;
     47 
     48 struct 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 
     78 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND;
     79 
     80 /** Android Effect Send interface methods */
     81 
     82 struct SLAndroidEffectSendItf_;
     83 typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf;
     84 
     85 struct 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 
    122 extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES;
    123 
    124 /** Android Effect Capabilities interface methods */
    125 
    126 struct SLAndroidEffectCapabilitiesItf_;
    127 typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf;
    128 
    129 struct 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 /*---------------------------------------------------------------------------*/
    147 extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION;
    148 
    149 /** Android Configuration interface methods */
    150 
    151 struct SLAndroidConfigurationItf_;
    152 typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf;
    153 
    154 struct 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 
    173 extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE;
    174 
    175 struct SLAndroidSimpleBufferQueueItf_;
    176 typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf;
    177 
    178 typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)(
    179 	SLAndroidSimpleBufferQueueItf caller,
    180 	void *pContext
    181 );
    182 
    183 /** Android simple buffer queue state **/
    184 
    185 typedef struct SLAndroidSimpleBufferQueueState_ {
    186 	SLuint32	count;
    187 	SLuint32	index;
    188 } SLAndroidSimpleBufferQueueState;
    189 
    190 
    191 struct 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 
    216 extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE;
    217 
    218 struct SLAndroidBufferQueueItf_;
    219 typedef 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 
    237 typedef struct SLAndroidBufferItem_ {
    238     SLuint32 itemKey;  // identifies the item
    239     SLuint32 itemSize;
    240     SLuint8  itemData[0];
    241 } SLAndroidBufferItem;
    242 
    243 typedef 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 
    254 typedef struct SLAndroidBufferQueueState_ {
    255     SLuint32    count;
    256     SLuint32    index;
    257 } SLAndroidBufferQueueState;
    258 
    259 struct 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 */
    306 typedef 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*/
    322 typedef 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 */
    337 typedef 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