/* * Copyright (C) 2011 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. */ /** ****************************************************************************** * @file M4ENCODER_AudioCommon.h * @brief VES audio encoders shell interface. * @note This file defines the types internally used by the VES to abstract audio encoders ****************************************************************************** */ #ifndef __M4ENCODER_AUDIOCOMMON_H__ #define __M4ENCODER_AUDIOCOMMON_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include "M4OSA_OptionID.h" /* for M4OSA_OPTION_ID_CREATE() */ #include "M4OSA_CoreID.h" #define M4ENCODER_AUDIO_NB_CHANNELS_MAX 2 /* WARNING: this value must be equal to the number of samples grabbed */ //#define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 960 /* imposed by the AAC encoder. */ #define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 1024 /* imposed by the AAC encoder. */ /** ****************************************************************************** * enumeration M4ENCODER_Audio_OptionID * @brief This enum defines the core AAC shell encoder options ****************************************************************************** */ typedef enum { /* Maximum generated AU size */ M4ENCODER_Audio_maxAUsize = M4OSA_OPTION_ID_CREATE(M4_READ,M4ENCODER_AUDIO, 0x01) } M4ENCODER_Audio_OptionID; /** ****************************************************************************** * enum M4ENCODER_SamplingFrequency * @brief Thie enum defines the audio sampling frequency. ****************************************************************************** */ typedef enum { M4ENCODER_k8000Hz = 8000, M4ENCODER_k11025Hz = 11025, M4ENCODER_k12000Hz = 12000, M4ENCODER_k16000Hz = 16000, M4ENCODER_k22050Hz = 22050, M4ENCODER_k24000Hz = 24000, M4ENCODER_k32000Hz = 32000, M4ENCODER_k44100Hz = 44100, M4ENCODER_k48000Hz = 48000 } M4ENCODER_SamplingFrequency; /** ****************************************************************************** * enum M4ENCODER_AudioFormat * @brief This enum defines the audio compression formats. ****************************************************************************** */ typedef enum { M4ENCODER_kAMRNB = 0, M4ENCODER_kAAC, M4ENCODER_kAudioNULL, /**< No compression */ M4ENCODER_kMP3, M4ENCODER_kAudio_NB /* number of encoders, keep it as last enum entry */ } M4ENCODER_AudioFormat; /** ****************************************************************************** * enum M4ENCODER_ChannelNumber * @brief Thie enum defines the number of audio channels. ****************************************************************************** */ typedef enum { M4ENCODER_kMono = 0, M4ENCODER_kStereo, M4ENCODER_kStereoNoInterleave } M4ENCODER_ChannelNumber; /** ****************************************************************************** * enum M4ENCODER_AudioBitrate * @brief Thie enum defines the avalaible bitrates. ****************************************************************************** */ typedef enum { M4ENCODER_kAudio_4_75_KBPS = 4750, M4ENCODER_kAudio_5_15_KBPS = 5150, M4ENCODER_kAudio_5_9_KBPS = 5900, M4ENCODER_kAudio_6_7_KBPS = 6700, M4ENCODER_kAudio_7_4_KBPS = 7400, M4ENCODER_kAudio_7_95_KBPS = 7950, M4ENCODER_kAudio_8_KBPS = 8000, M4ENCODER_kAudio_10_2_KBPS = 10200, M4ENCODER_kAudio_12_2_KBPS = 12200, M4ENCODER_kAudio_16_KBPS = 16000, M4ENCODER_kAudio_24_KBPS = 24000, M4ENCODER_kAudio_32_KBPS = 32000, M4ENCODER_kAudio_40_KBPS = 40000, M4ENCODER_kAudio_48_KBPS = 48000, M4ENCODER_kAudio_56_KBPS = 56000, M4ENCODER_kAudio_64_KBPS = 64000, M4ENCODER_kAudio_80_KBPS = 80000, M4ENCODER_kAudio_96_KBPS = 96000, M4ENCODER_kAudio_112_KBPS = 112000, M4ENCODER_kAudio_128_KBPS = 128000, M4ENCODER_kAudio_144_KBPS = 144000, M4ENCODER_kAudio_160_KBPS = 160000, M4ENCODER_kAudio_192_KBPS = 192000, M4ENCODER_kAudio_224_KBPS = 224000, M4ENCODER_kAudio_256_KBPS = 256000, M4ENCODER_kAudio_320_KBPS = 320000 } M4ENCODER_AudioBitrate; /** ****************************************************************************** * enum M4ENCODER_AacRegulation * @brief The current mode of the bitrate regulation. ****************************************************************************** */ typedef enum { M4ENCODER_kAacRegulNone = 0, /**< no bitrate regulation */ M4ENCODER_kAacBitReservoir /**< better quality, but more CPU consumed */ } M4ENCODER_AacRegulation; /** ****************************************************************************** * enum M4ENCODER_AmrSID * @brief This enum defines the SID of the AMR encoder. ****************************************************************************** */ typedef enum { M4ENCODER_kAmrNoSID = 0 /**< no SID */ } M4ENCODER_AmrSID; /** ****************************************************************************** * struct M4ENCODER_AacParams * @brief This structure defines all the settings specific to the AAC encoder. ****************************************************************************** */ typedef struct { M4ENCODER_AacRegulation Regulation; M4OSA_Bool bHighSpeed; M4OSA_Bool bTNS; M4OSA_Bool bPNS; M4OSA_Bool bIS; M4OSA_Bool bMS; } M4ENCODER_AacParams; /** ****************************************************************************** * struct M4ENCODER_AudioParams * @brief This structure defines all the settings avalaible when encoding audio. ****************************************************************************** */ typedef struct s_M4ENCODER_AudioParams { M4ENCODER_SamplingFrequency Frequency; /**< the sampling frequency */ M4ENCODER_ChannelNumber ChannelNum; /**< the numbe of channels (mono, stereo, ..) */ M4ENCODER_AudioBitrate Bitrate; /**< bitrate, see enum */ M4ENCODER_AudioFormat Format; /**< audio compression format, AMR, AAC ... */ union { M4ENCODER_AacParams AacParam; M4ENCODER_AmrSID AmrSID; } SpecifParam; /**< the audio encoder specific parameters */ } M4ENCODER_AudioParams; /** ****************************************************************************** * struct M4ENCODER_AudioDecSpecificInfo * @brief This structure describes the decoder specific info buffer. ****************************************************************************** */ typedef struct { M4OSA_MemAddr8 pInfo; /**< the buffer adress */ M4OSA_UInt32 infoSize; /**< the buffer size in bytes */ } M4ENCODER_AudioDecSpecificInfo; /** ****************************************************************************** * struct M4ENCODER_AudioBuffer * @brief This structure defines the data buffer. ****************************************************************************** */ typedef struct { /**< the table of buffers (unused buffers are set to NULL) */ M4OSA_MemAddr8 pTableBuffer[M4ENCODER_AUDIO_NB_CHANNELS_MAX]; /**< the table of the size of corresponding buffer at same index */ M4OSA_UInt32 pTableBufferSize[M4ENCODER_AUDIO_NB_CHANNELS_MAX]; } M4ENCODER_AudioBuffer; typedef M4OSA_ERR (M4AE_init) (M4OSA_Context* hContext, M4OSA_Void* pUserData); typedef M4OSA_ERR (M4AE_cleanUp) (M4OSA_Context pContext); typedef M4OSA_ERR (M4AE_open) (M4OSA_Context pContext, M4ENCODER_AudioParams *params, M4ENCODER_AudioDecSpecificInfo *decSpecInfo, M4OSA_Context grabberContext); typedef M4OSA_ERR (M4AE_close) (M4OSA_Context pContext); typedef M4OSA_ERR (M4AE_step) (M4OSA_Context pContext, M4ENCODER_AudioBuffer *inBuffer, M4ENCODER_AudioBuffer *outBuffer); typedef M4OSA_ERR (M4AE_getOption) (M4OSA_Context pContext, M4OSA_OptionID option, M4OSA_DataOption *valuePtr); /** ****************************************************************************** * struct M4ENCODER_AudioGlobalInterface * @brief Defines all the functions required for an audio encoder shell. ****************************************************************************** */ typedef struct _M4ENCODER_AudioGlobalInterface { M4AE_init* pFctInit; M4AE_cleanUp* pFctCleanUp; M4AE_open* pFctOpen; M4AE_close* pFctClose; M4AE_step* pFctStep; M4AE_getOption* pFctGetOption; } M4ENCODER_AudioGlobalInterface; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /*__M4ENCODER_AUDIOCOMMON_H__*/