1 /* 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 /* 12 * codec.h 13 * 14 * This header file contains the calls to the internal encoder 15 * and decoder functions. 16 * 17 */ 18 19 #ifndef MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ 20 #define MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ 21 22 #include "modules/audio_coding/codecs/isac/fix/source/structs.h" 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 int WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr* bwest_str, 29 Bitstr_dec* streamdata, 30 size_t packet_size, 31 uint16_t rtp_seq_number, 32 uint32_t send_ts, 33 uint32_t arr_ts); 34 35 int WebRtcIsacfix_DecodeImpl(int16_t* signal_out16, 36 IsacFixDecoderInstance* ISACdec_obj, 37 size_t* current_framesamples); 38 39 void WebRtcIsacfix_DecodePlcImpl(int16_t* decoded, 40 IsacFixDecoderInstance* ISACdec_obj, 41 size_t* current_framesample); 42 43 int WebRtcIsacfix_EncodeImpl(int16_t* in, 44 IsacFixEncoderInstance* ISACenc_obj, 45 BwEstimatorstr* bw_estimatordata, 46 int16_t CodingMode); 47 48 int WebRtcIsacfix_EncodeStoredData(IsacFixEncoderInstance* ISACenc_obj, 49 int BWnumber, 50 float scale); 51 52 /* initialization functions */ 53 54 void WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc* maskdata); 55 void WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec* maskdata); 56 57 void WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr* prefiltdata); 58 59 void WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr* postfiltdata); 60 61 void WebRtcIsacfix_InitPitchFilter(PitchFiltstr* pitchfiltdata); 62 63 void WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct* State); 64 65 void WebRtcIsacfix_InitPlc(PLCstr* State); 66 67 /* transform functions */ 68 69 void WebRtcIsacfix_InitTransform(void); 70 71 typedef void (*Time2Spec)(int16_t* inre1Q9, 72 int16_t* inre2Q9, 73 int16_t* outre, 74 int16_t* outim); 75 typedef void (*Spec2Time)(int16_t* inreQ7, 76 int16_t* inimQ7, 77 int32_t* outre1Q16, 78 int32_t* outre2Q16); 79 80 extern Time2Spec WebRtcIsacfix_Time2Spec; 81 extern Spec2Time WebRtcIsacfix_Spec2Time; 82 83 void WebRtcIsacfix_Time2SpecC(int16_t* inre1Q9, 84 int16_t* inre2Q9, 85 int16_t* outre, 86 int16_t* outim); 87 void WebRtcIsacfix_Spec2TimeC(int16_t* inreQ7, 88 int16_t* inimQ7, 89 int32_t* outre1Q16, 90 int32_t* outre2Q16); 91 92 #if defined(WEBRTC_HAS_NEON) 93 void WebRtcIsacfix_Time2SpecNeon(int16_t* inre1Q9, 94 int16_t* inre2Q9, 95 int16_t* outre, 96 int16_t* outim); 97 void WebRtcIsacfix_Spec2TimeNeon(int16_t* inreQ7, 98 int16_t* inimQ7, 99 int32_t* outre1Q16, 100 int32_t* outre2Q16); 101 #endif 102 103 #if defined(MIPS32_LE) 104 void WebRtcIsacfix_Time2SpecMIPS(int16_t* inre1Q9, 105 int16_t* inre2Q9, 106 int16_t* outre, 107 int16_t* outim); 108 void WebRtcIsacfix_Spec2TimeMIPS(int16_t* inreQ7, 109 int16_t* inimQ7, 110 int32_t* outre1Q16, 111 int32_t* outre2Q16); 112 #endif 113 114 /* filterbank functions */ 115 116 void WebRtcIsacfix_SplitAndFilter1(int16_t* in, 117 int16_t* LP16, 118 int16_t* HP16, 119 PreFiltBankstr* prefiltdata); 120 121 void WebRtcIsacfix_FilterAndCombine1(int16_t* tempin_ch1, 122 int16_t* tempin_ch2, 123 int16_t* out16, 124 PostFiltBankstr* postfiltdata); 125 126 /* normalized lattice filters */ 127 128 void WebRtcIsacfix_NormLatticeFilterMa(size_t orderCoef, 129 int32_t* stateGQ15, 130 int16_t* lat_inQ0, 131 int16_t* filt_coefQ15, 132 int32_t* gain_lo_hiQ17, 133 int16_t lo_hi, 134 int16_t* lat_outQ9); 135 136 void WebRtcIsacfix_NormLatticeFilterAr(size_t orderCoef, 137 int16_t* stateGQ0, 138 int32_t* lat_inQ25, 139 int16_t* filt_coefQ15, 140 int32_t* gain_lo_hiQ17, 141 int16_t lo_hi, 142 int16_t* lat_outQ0); 143 144 /* TODO(kma): Remove the following functions into individual header files. */ 145 146 /* Internal functions in both C and ARM Neon versions */ 147 148 int WebRtcIsacfix_AutocorrC(int32_t* __restrict r, 149 const int16_t* __restrict x, 150 int16_t N, 151 int16_t order, 152 int16_t* __restrict scale); 153 154 void WebRtcIsacfix_FilterMaLoopC(int16_t input0, 155 int16_t input1, 156 int32_t input2, 157 int32_t* ptr0, 158 int32_t* ptr1, 159 int32_t* ptr2); 160 161 #if defined(WEBRTC_HAS_NEON) 162 int WebRtcIsacfix_AutocorrNeon(int32_t* __restrict r, 163 const int16_t* __restrict x, 164 int16_t N, 165 int16_t order, 166 int16_t* __restrict scale); 167 168 void WebRtcIsacfix_FilterMaLoopNeon(int16_t input0, 169 int16_t input1, 170 int32_t input2, 171 int32_t* ptr0, 172 int32_t* ptr1, 173 int32_t* ptr2); 174 #endif 175 176 #if defined(MIPS32_LE) 177 int WebRtcIsacfix_AutocorrMIPS(int32_t* __restrict r, 178 const int16_t* __restrict x, 179 int16_t N, 180 int16_t order, 181 int16_t* __restrict scale); 182 183 void WebRtcIsacfix_FilterMaLoopMIPS(int16_t input0, 184 int16_t input1, 185 int32_t input2, 186 int32_t* ptr0, 187 int32_t* ptr1, 188 int32_t* ptr2); 189 #endif 190 191 /* Function pointers associated with the above functions. */ 192 193 typedef int (*AutocorrFix)(int32_t* __restrict r, 194 const int16_t* __restrict x, 195 int16_t N, 196 int16_t order, 197 int16_t* __restrict scale); 198 extern AutocorrFix WebRtcIsacfix_AutocorrFix; 199 200 typedef void (*FilterMaLoopFix)(int16_t input0, 201 int16_t input1, 202 int32_t input2, 203 int32_t* ptr0, 204 int32_t* ptr1, 205 int32_t* ptr2); 206 extern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix; 207 208 #ifdef __cplusplus 209 } // extern "C" 210 #endif 211 212 #endif /* MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */ 213