Home | History | Annotate | Download | only in source
      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 WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
     20 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_
     21 
     22 #include "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 
     68 /* transform functions */
     69 
     70 void WebRtcIsacfix_InitTransform();
     71 
     72 typedef void (*Time2Spec)(int16_t* inre1Q9,
     73                           int16_t* inre2Q9,
     74                           int16_t* outre,
     75                           int16_t* outim);
     76 typedef void (*Spec2Time)(int16_t* inreQ7,
     77                           int16_t* inimQ7,
     78                           int32_t* outre1Q16,
     79                           int32_t* outre2Q16);
     80 
     81 extern Time2Spec WebRtcIsacfix_Time2Spec;
     82 extern Spec2Time WebRtcIsacfix_Spec2Time;
     83 
     84 void WebRtcIsacfix_Time2SpecC(int16_t* inre1Q9,
     85                               int16_t* inre2Q9,
     86                               int16_t* outre,
     87                               int16_t* outim);
     88 void WebRtcIsacfix_Spec2TimeC(int16_t* inreQ7,
     89                               int16_t* inimQ7,
     90                               int32_t* outre1Q16,
     91                               int32_t* outre2Q16);
     92 
     93 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
     94 void WebRtcIsacfix_Time2SpecNeon(int16_t* inre1Q9,
     95                                  int16_t* inre2Q9,
     96                                  int16_t* outre,
     97                                  int16_t* outim);
     98 void WebRtcIsacfix_Spec2TimeNeon(int16_t* inreQ7,
     99                                  int16_t* inimQ7,
    100                                  int32_t* outre1Q16,
    101                                  int32_t* outre2Q16);
    102 #endif
    103 
    104 #if defined(MIPS32_LE)
    105 void WebRtcIsacfix_Time2SpecMIPS(int16_t* inre1Q9,
    106                                  int16_t* inre2Q9,
    107                                  int16_t* outre,
    108                                  int16_t* outim);
    109 void WebRtcIsacfix_Spec2TimeMIPS(int16_t* inreQ7,
    110                                  int16_t* inimQ7,
    111                                  int32_t* outre1Q16,
    112                                  int32_t* outre2Q16);
    113 #endif
    114 
    115 /* filterbank functions */
    116 
    117 void WebRtcIsacfix_SplitAndFilter1(int16_t* in,
    118                                    int16_t* LP16,
    119                                    int16_t* HP16,
    120                                    PreFiltBankstr* prefiltdata);
    121 
    122 void WebRtcIsacfix_FilterAndCombine1(int16_t* tempin_ch1,
    123                                      int16_t* tempin_ch2,
    124                                      int16_t* out16,
    125                                      PostFiltBankstr* postfiltdata);
    126 
    127 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
    128 
    129 void WebRtcIsacfix_SplitAndFilter2(int16_t* in,
    130                                    int16_t* LP16,
    131                                    int16_t* HP16,
    132                                    PreFiltBankstr* prefiltdata);
    133 
    134 void WebRtcIsacfix_FilterAndCombine2(int16_t* tempin_ch1,
    135                                      int16_t* tempin_ch2,
    136                                      int16_t* out16,
    137                                      PostFiltBankstr* postfiltdata,
    138                                      int16_t len);
    139 
    140 #endif
    141 
    142 /* normalized lattice filters */
    143 
    144 void WebRtcIsacfix_NormLatticeFilterMa(size_t orderCoef,
    145                                        int32_t* stateGQ15,
    146                                        int16_t* lat_inQ0,
    147                                        int16_t* filt_coefQ15,
    148                                        int32_t* gain_lo_hiQ17,
    149                                        int16_t lo_hi,
    150                                        int16_t* lat_outQ9);
    151 
    152 void WebRtcIsacfix_NormLatticeFilterAr(size_t orderCoef,
    153                                        int16_t* stateGQ0,
    154                                        int32_t* lat_inQ25,
    155                                        int16_t* filt_coefQ15,
    156                                        int32_t* gain_lo_hiQ17,
    157                                        int16_t lo_hi,
    158                                        int16_t* lat_outQ0);
    159 
    160 /* TODO(kma): Remove the following functions into individual header files. */
    161 
    162 /* Internal functions in both C and ARM Neon versions */
    163 
    164 int WebRtcIsacfix_AutocorrC(int32_t* __restrict r,
    165                             const int16_t* __restrict x,
    166                             int16_t N,
    167                             int16_t order,
    168                             int16_t* __restrict scale);
    169 
    170 void WebRtcIsacfix_FilterMaLoopC(int16_t input0,
    171                                  int16_t input1,
    172                                  int32_t input2,
    173                                  int32_t* ptr0,
    174                                  int32_t* ptr1,
    175                                  int32_t* ptr2);
    176 
    177 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
    178 int WebRtcIsacfix_AutocorrNeon(int32_t* __restrict r,
    179                                const int16_t* __restrict x,
    180                                int16_t N,
    181                                int16_t order,
    182                                int16_t* __restrict scale);
    183 
    184 void WebRtcIsacfix_FilterMaLoopNeon(int16_t input0,
    185                                     int16_t input1,
    186                                     int32_t input2,
    187                                     int32_t* ptr0,
    188                                     int32_t* ptr1,
    189                                     int32_t* ptr2);
    190 #endif
    191 
    192 #if defined(MIPS32_LE)
    193 int WebRtcIsacfix_AutocorrMIPS(int32_t* __restrict r,
    194                                const int16_t* __restrict x,
    195                                int16_t N,
    196                                int16_t order,
    197                                int16_t* __restrict scale);
    198 
    199 void WebRtcIsacfix_FilterMaLoopMIPS(int16_t input0,
    200                                     int16_t input1,
    201                                     int32_t input2,
    202                                     int32_t* ptr0,
    203                                     int32_t* ptr1,
    204                                     int32_t* ptr2);
    205 #endif
    206 
    207 /* Function pointers associated with the above functions. */
    208 
    209 typedef int (*AutocorrFix)(int32_t* __restrict r,
    210                            const int16_t* __restrict x,
    211                            int16_t N,
    212                            int16_t order,
    213                            int16_t* __restrict scale);
    214 extern AutocorrFix WebRtcIsacfix_AutocorrFix;
    215 
    216 typedef void (*FilterMaLoopFix)(int16_t input0,
    217                                 int16_t input1,
    218                                 int32_t input2,
    219                                 int32_t* ptr0,
    220                                 int32_t* ptr1,
    221                                 int32_t* ptr2);
    222 extern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix;
    223 
    224 #ifdef __cplusplus
    225 }  // extern "C"
    226 #endif
    227 
    228 #endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */
    229