• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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