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