text: /*
   * 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_AndroidConfiguration.h"
  #include "OpenSLES_AndroidMetadata.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 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;
  
  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
         );
  };
  
  
  /*---------------------------------------------------------------------------*/
  /* 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;
  // FIXME temporary definition to be removed
  #define SL_IID_ANDROIDBUFFERQUEUE 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)
  #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)
  
  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;
  
  #ifdef __cplusplus
  }
  #endif /* __cplusplus */
  
  #endif /* OPENSL_ES_ANDROID_H_ */
  