Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (C) 2011 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  ******************************************************************************
     18  * @file    M4ENCODER_AudioCommon.h
     19  * @brief    VES audio encoders shell interface.
     20  * @note    This file defines the types internally used by the VES to abstract audio encoders
     21  ******************************************************************************
     22 */
     23 #ifndef __M4ENCODER_AUDIOCOMMON_H__
     24 #define __M4ENCODER_AUDIOCOMMON_H__
     25 
     26 #ifdef __cplusplus
     27 extern "C" {
     28 #endif /* __cplusplus */
     29 
     30 #include "M4OSA_OptionID.h"     /* for M4OSA_OPTION_ID_CREATE() */
     31 #include "M4OSA_CoreID.h"
     32 
     33 #define M4ENCODER_AUDIO_NB_CHANNELS_MAX 2
     34 /* WARNING: this value must be equal to the number of samples grabbed */
     35 //#define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 960    /* imposed by the AAC encoder. */
     36 #define M4ENCODER_AUDIO_PCM_SAMPLE_NUMBER 1024    /* imposed by the AAC encoder. */
     37 
     38 
     39 /**
     40  ******************************************************************************
     41  * enumeration    M4ENCODER_Audio_OptionID
     42  * @brief        This enum defines the core AAC shell encoder options
     43  ******************************************************************************
     44 */
     45 typedef enum
     46 {
     47  /* Maximum generated AU size */
     48     M4ENCODER_Audio_maxAUsize     = M4OSA_OPTION_ID_CREATE(M4_READ,M4ENCODER_AUDIO, 0x01)
     49 
     50 } M4ENCODER_Audio_OptionID;
     51 
     52 
     53  /**
     54  ******************************************************************************
     55  * enum        M4ENCODER_SamplingFrequency
     56  * @brief    Thie enum defines the audio sampling frequency.
     57  ******************************************************************************
     58 */
     59 typedef enum
     60 {
     61     M4ENCODER_k8000Hz = 8000,
     62     M4ENCODER_k11025Hz = 11025,
     63     M4ENCODER_k12000Hz = 12000,
     64     M4ENCODER_k16000Hz = 16000,
     65     M4ENCODER_k22050Hz = 22050,
     66     M4ENCODER_k24000Hz = 24000,
     67     M4ENCODER_k32000Hz = 32000,
     68     M4ENCODER_k44100Hz = 44100,
     69     M4ENCODER_k48000Hz = 48000
     70 } M4ENCODER_SamplingFrequency;
     71 
     72 
     73 /**
     74  ******************************************************************************
     75  * enum        M4ENCODER_AudioFormat
     76  * @brief    This enum defines the audio compression formats.
     77  ******************************************************************************
     78 */
     79 typedef enum
     80 {
     81     M4ENCODER_kAMRNB = 0,
     82     M4ENCODER_kAAC,
     83     M4ENCODER_kAudioNULL,    /**< No compression */
     84     M4ENCODER_kMP3,
     85     M4ENCODER_kAudio_NB        /* number of encoders, keep it as last enum entry */
     86 
     87 } M4ENCODER_AudioFormat;
     88 
     89 /**
     90  ******************************************************************************
     91  * enum        M4ENCODER_ChannelNumber
     92  * @brief    Thie enum defines the number of audio channels.
     93  ******************************************************************************
     94 */
     95 typedef enum
     96 {
     97     M4ENCODER_kMono  = 0,
     98     M4ENCODER_kStereo,
     99     M4ENCODER_kStereoNoInterleave
    100 } M4ENCODER_ChannelNumber;
    101 
    102 /**
    103  ******************************************************************************
    104  * enum        M4ENCODER_AudioBitrate
    105  * @brief    Thie enum defines the avalaible bitrates.
    106  ******************************************************************************
    107 */
    108 typedef enum
    109 {
    110     M4ENCODER_kAudio_4_75_KBPS    = 4750,
    111     M4ENCODER_kAudio_5_15_KBPS    = 5150,
    112     M4ENCODER_kAudio_5_9_KBPS    = 5900,
    113     M4ENCODER_kAudio_6_7_KBPS    = 6700,
    114     M4ENCODER_kAudio_7_4_KBPS    = 7400,
    115     M4ENCODER_kAudio_7_95_KBPS    = 7950,
    116     M4ENCODER_kAudio_8_KBPS        = 8000,
    117     M4ENCODER_kAudio_10_2_KBPS    = 10200,
    118     M4ENCODER_kAudio_12_2_KBPS    = 12200,
    119     M4ENCODER_kAudio_16_KBPS    = 16000,
    120     M4ENCODER_kAudio_24_KBPS    = 24000,
    121     M4ENCODER_kAudio_32_KBPS    = 32000,
    122     M4ENCODER_kAudio_40_KBPS    = 40000,
    123     M4ENCODER_kAudio_48_KBPS    = 48000,
    124     M4ENCODER_kAudio_56_KBPS    = 56000,
    125     M4ENCODER_kAudio_64_KBPS    = 64000,
    126     M4ENCODER_kAudio_80_KBPS    = 80000,
    127     M4ENCODER_kAudio_96_KBPS    = 96000,
    128     M4ENCODER_kAudio_112_KBPS    = 112000,
    129     M4ENCODER_kAudio_128_KBPS    = 128000,
    130     M4ENCODER_kAudio_144_KBPS    = 144000,
    131     M4ENCODER_kAudio_160_KBPS    = 160000,
    132     M4ENCODER_kAudio_192_KBPS    = 192000,
    133     M4ENCODER_kAudio_224_KBPS    = 224000,
    134     M4ENCODER_kAudio_256_KBPS    = 256000,
    135     M4ENCODER_kAudio_320_KBPS    = 320000
    136 } M4ENCODER_AudioBitrate;
    137 
    138 
    139 /**
    140  ******************************************************************************
    141  * enum            M4ENCODER_AacRegulation
    142  * @brief        The current mode of the bitrate regulation.
    143  ******************************************************************************
    144 */
    145 typedef enum
    146 {
    147     M4ENCODER_kAacRegulNone = 0,    /**< no bitrate regulation */
    148     M4ENCODER_kAacBitReservoir        /**< better quality, but more CPU consumed */
    149 } M4ENCODER_AacRegulation;
    150 
    151 /**
    152  ******************************************************************************
    153  * enum        M4ENCODER_AmrSID
    154  * @brief    This enum defines the SID of the AMR encoder.
    155  ******************************************************************************
    156 */
    157 typedef enum
    158 {
    159     M4ENCODER_kAmrNoSID = 0     /**< no SID */
    160 } M4ENCODER_AmrSID;
    161 
    162 /**
    163  ******************************************************************************
    164  * struct    M4ENCODER_AacParams
    165  * @brief    This structure defines all the settings specific to the AAC encoder.
    166  ******************************************************************************
    167 */
    168 typedef struct
    169 {
    170     M4ENCODER_AacRegulation    Regulation;
    171     M4OSA_Bool                bHighSpeed;
    172     M4OSA_Bool                bTNS;
    173     M4OSA_Bool                bPNS;
    174     M4OSA_Bool                bIS;
    175     M4OSA_Bool                bMS;
    176 } M4ENCODER_AacParams;
    177 
    178 /**
    179  ******************************************************************************
    180  * struct    M4ENCODER_AudioParams
    181  * @brief    This structure defines all the settings avalaible when encoding audio.
    182  ******************************************************************************
    183 */
    184 typedef struct s_M4ENCODER_AudioParams
    185 {
    186     M4ENCODER_SamplingFrequency    Frequency;    /**< the sampling frequency */
    187     M4ENCODER_ChannelNumber        ChannelNum;    /**< the numbe of channels (mono, stereo, ..) */
    188     M4ENCODER_AudioBitrate        Bitrate;    /**<  bitrate, see enum  */
    189     M4ENCODER_AudioFormat        Format;        /**<  audio compression format, AMR, AAC ...  */
    190     union {
    191         M4ENCODER_AacParams        AacParam;
    192         M4ENCODER_AmrSID        AmrSID;
    193     } SpecifParam;                            /**< the audio encoder specific parameters */
    194 } M4ENCODER_AudioParams;
    195 
    196 /**
    197  ******************************************************************************
    198  * struct    M4ENCODER_AudioDecSpecificInfo
    199  * @brief    This structure describes the decoder specific info buffer.
    200  ******************************************************************************
    201 */
    202 typedef struct
    203 {
    204     M4OSA_MemAddr8    pInfo;        /**< the buffer adress */
    205     M4OSA_UInt32    infoSize;    /**< the buffer size in bytes */
    206 } M4ENCODER_AudioDecSpecificInfo;
    207 
    208 /**
    209  ******************************************************************************
    210  * struct    M4ENCODER_AudioBuffer
    211  * @brief    This structure defines the data buffer.
    212  ******************************************************************************
    213 */
    214 typedef struct
    215 {
    216     /**< the table of buffers (unused buffers are set to NULL) */
    217     M4OSA_MemAddr8    pTableBuffer[M4ENCODER_AUDIO_NB_CHANNELS_MAX];
    218     /**< the table of the size of corresponding buffer at same index */
    219     M4OSA_UInt32    pTableBufferSize[M4ENCODER_AUDIO_NB_CHANNELS_MAX];
    220 } M4ENCODER_AudioBuffer;
    221 
    222 typedef M4OSA_ERR (M4AE_init)        (M4OSA_Context* hContext, M4OSA_Void* pUserData);
    223 typedef M4OSA_ERR (M4AE_cleanUp)    (M4OSA_Context pContext);
    224 typedef M4OSA_ERR (M4AE_open)        (M4OSA_Context pContext, M4ENCODER_AudioParams *params,
    225                                         M4ENCODER_AudioDecSpecificInfo *decSpecInfo,
    226                                         M4OSA_Context grabberContext);
    227 typedef M4OSA_ERR (M4AE_close)        (M4OSA_Context pContext);
    228 typedef M4OSA_ERR (M4AE_step)         (M4OSA_Context pContext, M4ENCODER_AudioBuffer *inBuffer,
    229                                         M4ENCODER_AudioBuffer *outBuffer);
    230 typedef M4OSA_ERR (M4AE_getOption)    (M4OSA_Context pContext, M4OSA_OptionID    option,
    231                                         M4OSA_DataOption *valuePtr);
    232 /**
    233  ******************************************************************************
    234  * struct    M4ENCODER_AudioGlobalInterface
    235  * @brief    Defines all the functions required for an audio encoder shell.
    236  ******************************************************************************
    237 */
    238 typedef struct _M4ENCODER_AudioGlobalInterface
    239 {
    240     M4AE_init*        pFctInit;
    241     M4AE_cleanUp*    pFctCleanUp;
    242     M4AE_open*        pFctOpen;
    243     M4AE_close*        pFctClose;
    244     M4AE_step*        pFctStep;
    245     M4AE_getOption*    pFctGetOption;
    246 } M4ENCODER_AudioGlobalInterface;
    247 
    248 
    249 #ifdef __cplusplus
    250 }
    251 #endif /* __cplusplus */
    252 
    253 #endif /*__M4ENCODER_AUDIOCOMMON_H__*/
    254 
    255