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