| /* |
| * Copyright (C) 2010 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef OPENSL_ES_ANDROID_H_ |
| #define OPENSL_ES_ANDROID_H_ |
| |
| #include "OpenSLES.h" |
| #include "OpenSLES_AndroidConfiguration.h" |
| #include "OpenSLES_AndroidMetadata.h" |
| #include <jni.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android common types */ |
| /*---------------------------------------------------------------------------*/ |
| |
| typedef sl_int64_t SLAint64; /* 64 bit signed integer */ |
| |
| typedef sl_uint64_t SLAuint64; /* 64 bit unsigned integer */ |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android PCM Data Format */ |
| /*---------------------------------------------------------------------------*/ |
| |
| /* The following pcm representations and data formats map to those in OpenSLES 1.1 */ |
| #define SL_ANDROID_PCM_REPRESENTATION_SIGNED_INT ((SLuint32) 0x00000001) |
| #define SL_ANDROID_PCM_REPRESENTATION_UNSIGNED_INT ((SLuint32) 0x00000002) |
| #define SL_ANDROID_PCM_REPRESENTATION_FLOAT ((SLuint32) 0x00000003) |
| |
| #define SL_ANDROID_DATAFORMAT_PCM_EX ((SLuint32) 0x00000004) |
| |
| typedef struct SLAndroidDataFormat_PCM_EX_ { |
| SLuint32 formatType; |
| SLuint32 numChannels; |
| SLuint32 sampleRate; |
| SLuint32 bitsPerSample; |
| SLuint32 containerSize; |
| SLuint32 channelMask; |
| SLuint32 endianness; |
| SLuint32 representation; |
| } SLAndroidDataFormat_PCM_EX; |
| |
| #define SL_ANDROID_SPEAKER_NON_POSITIONAL ((SLuint32) 0x80000000) |
| |
| // Make an indexed channel mask from a bitfield. |
| // |
| // Each bit in the bitfield corresponds to a channel index, |
| // from least-significant bit (channel 0) up to the bit |
| // corresponding to the maximum channel count (currently FCC_8). |
| // A '1' in the bitfield indicates that the channel should be |
| // included in the stream, while a '0' indicates that it |
| // should be excluded. For instance, a bitfield of 0x0A (binary 00001010) |
| // would define a stream that contains channels 1 and 3. (The corresponding |
| // indexed mask, after setting the SL_ANDROID_NON_POSITIONAL bit, |
| // would be 0x8000000A.) |
| #define SL_ANDROID_MAKE_INDEXED_CHANNEL_MASK(bitfield) \ |
| ((bitfield) | SL_ANDROID_SPEAKER_NON_POSITIONAL) |
| |
| // Specifying SL_ANDROID_SPEAKER_USE_DEFAULT as a channel mask in |
| // SLAndroidDataFormat_PCM_EX causes OpenSL ES to assign a default |
| // channel mask based on the number of channels requested. This |
| // value cannot be combined with SL_ANDROID_SPEAKER_NON_POSITIONAL. |
| #define SL_ANDROID_SPEAKER_USE_DEFAULT ((SLuint32)0) |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Effect interface */ |
| /*---------------------------------------------------------------------------*/ |
| |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECT; |
| |
| /** Android Effect interface methods */ |
| |
| struct SLAndroidEffectItf_; |
| typedef const struct SLAndroidEffectItf_ * const * SLAndroidEffectItf; |
| |
| struct SLAndroidEffectItf_ { |
| |
| SLresult (*CreateEffect) (SLAndroidEffectItf self, |
| SLInterfaceID effectImplementationId); |
| |
| SLresult (*ReleaseEffect) (SLAndroidEffectItf self, |
| SLInterfaceID effectImplementationId); |
| |
| SLresult (*SetEnabled) (SLAndroidEffectItf self, |
| SLInterfaceID effectImplementationId, |
| SLboolean enabled); |
| |
| SLresult (*IsEnabled) (SLAndroidEffectItf self, |
| SLInterfaceID effectImplementationId, |
| SLboolean *pEnabled); |
| |
| SLresult (*SendCommand) (SLAndroidEffectItf self, |
| SLInterfaceID effectImplementationId, |
| SLuint32 command, |
| SLuint32 commandSize, |
| void *pCommandData, |
| SLuint32 *replySize, |
| void *pReplyData); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Effect Send interface */ |
| /*---------------------------------------------------------------------------*/ |
| |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTSEND; |
| |
| /** Android Effect Send interface methods */ |
| |
| struct SLAndroidEffectSendItf_; |
| typedef const struct SLAndroidEffectSendItf_ * const * SLAndroidEffectSendItf; |
| |
| struct SLAndroidEffectSendItf_ { |
| SLresult (*EnableEffectSend) ( |
| SLAndroidEffectSendItf self, |
| SLInterfaceID effectImplementationId, |
| SLboolean enable, |
| SLmillibel initialLevel |
| ); |
| SLresult (*IsEnabled) ( |
| SLAndroidEffectSendItf self, |
| SLInterfaceID effectImplementationId, |
| SLboolean *pEnable |
| ); |
| SLresult (*SetDirectLevel) ( |
| SLAndroidEffectSendItf self, |
| SLmillibel directLevel |
| ); |
| SLresult (*GetDirectLevel) ( |
| SLAndroidEffectSendItf self, |
| SLmillibel *pDirectLevel |
| ); |
| SLresult (*SetSendLevel) ( |
| SLAndroidEffectSendItf self, |
| SLInterfaceID effectImplementationId, |
| SLmillibel sendLevel |
| ); |
| SLresult (*GetSendLevel)( |
| SLAndroidEffectSendItf self, |
| SLInterfaceID effectImplementationId, |
| SLmillibel *pSendLevel |
| ); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Effect Capabilities interface */ |
| /*---------------------------------------------------------------------------*/ |
| |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDEFFECTCAPABILITIES; |
| |
| /** Android Effect Capabilities interface methods */ |
| |
| struct SLAndroidEffectCapabilitiesItf_; |
| typedef const struct SLAndroidEffectCapabilitiesItf_ * const * SLAndroidEffectCapabilitiesItf; |
| |
| struct SLAndroidEffectCapabilitiesItf_ { |
| |
| SLresult (*QueryNumEffects) (SLAndroidEffectCapabilitiesItf self, |
| SLuint32 *pNumSupportedEffects); |
| |
| |
| SLresult (*QueryEffect) (SLAndroidEffectCapabilitiesItf self, |
| SLuint32 index, |
| SLInterfaceID *pEffectType, |
| SLInterfaceID *pEffectImplementation, |
| SLchar *pName, |
| SLuint16 *pNameSize); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Configuration interface */ |
| /*---------------------------------------------------------------------------*/ |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDCONFIGURATION; |
| |
| /** Android Configuration interface methods */ |
| |
| struct SLAndroidConfigurationItf_; |
| typedef const struct SLAndroidConfigurationItf_ * const * SLAndroidConfigurationItf; |
| |
| /* |
| * Java Proxy Type IDs |
| */ |
| #define SL_ANDROID_JAVA_PROXY_ROUTING 0x0001 |
| |
| struct SLAndroidConfigurationItf_ { |
| |
| SLresult (*SetConfiguration) (SLAndroidConfigurationItf self, |
| const SLchar *configKey, |
| const void *pConfigValue, |
| SLuint32 valueSize); |
| |
| SLresult (*GetConfiguration) (SLAndroidConfigurationItf self, |
| const SLchar *configKey, |
| SLuint32 *pValueSize, |
| void *pConfigValue |
| ); |
| |
| SLresult (*AcquireJavaProxy) (SLAndroidConfigurationItf self, |
| SLuint32 proxyType, |
| jobject *pProxyObj); |
| |
| SLresult (*ReleaseJavaProxy) (SLAndroidConfigurationItf self, |
| SLuint32 proxyType); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Simple Buffer Queue Interface */ |
| /*---------------------------------------------------------------------------*/ |
| |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDSIMPLEBUFFERQUEUE; |
| |
| struct SLAndroidSimpleBufferQueueItf_; |
| typedef const struct SLAndroidSimpleBufferQueueItf_ * const * SLAndroidSimpleBufferQueueItf; |
| |
| typedef void (SLAPIENTRY *slAndroidSimpleBufferQueueCallback)( |
| SLAndroidSimpleBufferQueueItf caller, |
| void *pContext |
| ); |
| |
| /** Android simple buffer queue state **/ |
| |
| typedef struct SLAndroidSimpleBufferQueueState_ { |
| SLuint32 count; |
| SLuint32 index; |
| } SLAndroidSimpleBufferQueueState; |
| |
| |
| struct SLAndroidSimpleBufferQueueItf_ { |
| SLresult (*Enqueue) ( |
| SLAndroidSimpleBufferQueueItf self, |
| const void *pBuffer, |
| SLuint32 size |
| ); |
| SLresult (*Clear) ( |
| SLAndroidSimpleBufferQueueItf self |
| ); |
| SLresult (*GetState) ( |
| SLAndroidSimpleBufferQueueItf self, |
| SLAndroidSimpleBufferQueueState *pState |
| ); |
| SLresult (*RegisterCallback) ( |
| SLAndroidSimpleBufferQueueItf self, |
| slAndroidSimpleBufferQueueCallback callback, |
| void* pContext |
| ); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Buffer Queue Interface */ |
| /*---------------------------------------------------------------------------*/ |
| |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDBUFFERQUEUESOURCE; |
| |
| struct SLAndroidBufferQueueItf_; |
| typedef const struct SLAndroidBufferQueueItf_ * const * SLAndroidBufferQueueItf; |
| |
| #define SL_ANDROID_ITEMKEY_NONE ((SLuint32) 0x00000000) |
| #define SL_ANDROID_ITEMKEY_EOS ((SLuint32) 0x00000001) |
| #define SL_ANDROID_ITEMKEY_DISCONTINUITY ((SLuint32) 0x00000002) |
| #define SL_ANDROID_ITEMKEY_BUFFERQUEUEEVENT ((SLuint32) 0x00000003) |
| #define SL_ANDROID_ITEMKEY_FORMAT_CHANGE ((SLuint32) 0x00000004) |
| |
| #define SL_ANDROIDBUFFERQUEUEEVENT_NONE ((SLuint32) 0x00000000) |
| #define SL_ANDROIDBUFFERQUEUEEVENT_PROCESSED ((SLuint32) 0x00000001) |
| #if 0 // reserved for future use |
| #define SL_ANDROIDBUFFERQUEUEEVENT_UNREALIZED ((SLuint32) 0x00000002) |
| #define SL_ANDROIDBUFFERQUEUEEVENT_CLEARED ((SLuint32) 0x00000004) |
| #define SL_ANDROIDBUFFERQUEUEEVENT_STOPPED ((SLuint32) 0x00000008) |
| #define SL_ANDROIDBUFFERQUEUEEVENT_ERROR ((SLuint32) 0x00000010) |
| #define SL_ANDROIDBUFFERQUEUEEVENT_CONTENT_END ((SLuint32) 0x00000020) |
| #endif |
| |
| typedef struct SLAndroidBufferItem_ { |
| SLuint32 itemKey; // identifies the item |
| SLuint32 itemSize; |
| SLuint8 itemData[0]; |
| } SLAndroidBufferItem; |
| |
| typedef SLresult (SLAPIENTRY *slAndroidBufferQueueCallback)( |
| SLAndroidBufferQueueItf caller,/* input */ |
| void *pCallbackContext, /* input */ |
| void *pBufferContext, /* input */ |
| void *pBufferData, /* input */ |
| SLuint32 dataSize, /* input */ |
| SLuint32 dataUsed, /* input */ |
| const SLAndroidBufferItem *pItems,/* input */ |
| SLuint32 itemsLength /* input */ |
| ); |
| |
| typedef struct SLAndroidBufferQueueState_ { |
| SLuint32 count; |
| SLuint32 index; |
| } SLAndroidBufferQueueState; |
| |
| struct SLAndroidBufferQueueItf_ { |
| SLresult (*RegisterCallback) ( |
| SLAndroidBufferQueueItf self, |
| slAndroidBufferQueueCallback callback, |
| void* pCallbackContext |
| ); |
| |
| SLresult (*Clear) ( |
| SLAndroidBufferQueueItf self |
| ); |
| |
| SLresult (*Enqueue) ( |
| SLAndroidBufferQueueItf self, |
| void *pBufferContext, |
| void *pData, |
| SLuint32 dataLength, |
| const SLAndroidBufferItem *pItems, |
| SLuint32 itemsLength |
| ); |
| |
| SLresult (*GetState) ( |
| SLAndroidBufferQueueItf self, |
| SLAndroidBufferQueueState *pState |
| ); |
| |
| SLresult (*SetCallbackEventsMask) ( |
| SLAndroidBufferQueueItf self, |
| SLuint32 eventFlags |
| ); |
| |
| SLresult (*GetCallbackEventsMask) ( |
| SLAndroidBufferQueueItf self, |
| SLuint32 *pEventFlags |
| ); |
| }; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android File Descriptor Data Locator */ |
| /*---------------------------------------------------------------------------*/ |
| |
| /** Addendum to Data locator macros */ |
| #define SL_DATALOCATOR_ANDROIDFD ((SLuint32) 0x800007BC) |
| |
| #define SL_DATALOCATOR_ANDROIDFD_USE_FILE_SIZE ((SLAint64) 0xFFFFFFFFFFFFFFFFll) |
| |
| /** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */ |
| typedef struct SLDataLocator_AndroidFD_ { |
| SLuint32 locatorType; |
| SLint32 fd; |
| SLAint64 offset; |
| SLAint64 length; |
| } SLDataLocator_AndroidFD; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Android Simple Buffer Queue Data Locator */ |
| /*---------------------------------------------------------------------------*/ |
| |
| /** Addendum to Data locator macros */ |
| #define SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE ((SLuint32) 0x800007BD) |
| |
| /** BufferQueue-based data locator definition where locatorType must |
| * be SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE |
| */ |
| typedef struct SLDataLocator_AndroidSimpleBufferQueue { |
| SLuint32 locatorType; |
| SLuint32 numBuffers; |
| } SLDataLocator_AndroidSimpleBufferQueue; |
| |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Android Buffer Queue Data Locator */ |
| /*---------------------------------------------------------------------------*/ |
| |
| /** Addendum to Data locator macros */ |
| #define SL_DATALOCATOR_ANDROIDBUFFERQUEUE ((SLuint32) 0x800007BE) |
| |
| /** Android Buffer Queue-based data locator definition, |
| * locatorType must be SL_DATALOCATOR_ANDROIDBUFFERQUEUE */ |
| typedef struct SLDataLocator_AndroidBufferQueue_ { |
| SLuint32 locatorType; |
| SLuint32 numBuffers; |
| } SLDataLocator_AndroidBufferQueue; |
| |
| /** |
| * MIME types required for data in Android Buffer Queues |
| */ |
| #define SL_ANDROID_MIME_AACADTS ((SLchar *) "audio/vnd.android.aac-adts") |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Acoustic Echo Cancellation (AEC) Interface */ |
| /* --------------------------------------------------------------------------*/ |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDACOUSTICECHOCANCELLATION; |
| |
| struct SLAndroidAcousticEchoCancellationItf_; |
| typedef const struct SLAndroidAcousticEchoCancellationItf_ * const * |
| SLAndroidAcousticEchoCancellationItf; |
| |
| struct SLAndroidAcousticEchoCancellationItf_ { |
| SLresult (*SetEnabled)( |
| SLAndroidAcousticEchoCancellationItf self, |
| SLboolean enabled |
| ); |
| SLresult (*IsEnabled)( |
| SLAndroidAcousticEchoCancellationItf self, |
| SLboolean *pEnabled |
| ); |
| }; |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Automatic Gain Control (ACC) Interface */ |
| /* --------------------------------------------------------------------------*/ |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDAUTOMATICGAINCONTROL; |
| |
| struct SLAndroidAutomaticGainControlItf_; |
| typedef const struct SLAndroidAutomaticGainControlItf_ * const * SLAndroidAutomaticGainControlItf; |
| |
| struct SLAndroidAutomaticGainControlItf_ { |
| SLresult (*SetEnabled)( |
| SLAndroidAutomaticGainControlItf self, |
| SLboolean enabled |
| ); |
| SLresult (*IsEnabled)( |
| SLAndroidAutomaticGainControlItf self, |
| SLboolean *pEnabled |
| ); |
| }; |
| |
| /*---------------------------------------------------------------------------*/ |
| /* Noise Suppression Interface */ |
| /* --------------------------------------------------------------------------*/ |
| extern SL_API const SLInterfaceID SL_IID_ANDROIDNOISESUPPRESSION; |
| |
| struct SLAndroidNoiseSuppressionItf_; |
| typedef const struct SLAndroidNoiseSuppressionItf_ * const * SLAndroidNoiseSuppressionItf; |
| |
| struct SLAndroidNoiseSuppressionItf_ { |
| SLresult (*SetEnabled)( |
| SLAndroidNoiseSuppressionItf self, |
| SLboolean enabled |
| ); |
| SLresult (*IsEnabled)( |
| SLAndroidNoiseSuppressionItf self, |
| SLboolean *pEnabled |
| ); |
| }; |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /* OPENSL_ES_ANDROID_H_ */ |