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 
     25 int WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr   *bwest_str,
     26                                     Bitstr_dec       *streamdata,
     27                                     WebRtc_Word32      packet_size,
     28                                     WebRtc_UWord16     rtp_seq_number,
     29                                     WebRtc_UWord32     send_ts,
     30                                     WebRtc_UWord32     arr_ts);
     31 
     32 WebRtc_Word16 WebRtcIsacfix_DecodeImpl(WebRtc_Word16   *signal_out16,
     33                                        ISACFIX_DecInst_t  *ISACdec_obj,
     34                                        WebRtc_Word16        *current_framesamples);
     35 
     36 WebRtc_Word16 WebRtcIsacfix_DecodePlcImpl(WebRtc_Word16       *decoded,
     37                                           ISACFIX_DecInst_t *ISACdec_obj,
     38                                           WebRtc_Word16       *current_framesample );
     39 
     40 int WebRtcIsacfix_EncodeImpl(WebRtc_Word16      *in,
     41                              ISACFIX_EncInst_t  *ISACenc_obj,
     42                              BwEstimatorstr      *bw_estimatordata,
     43                              WebRtc_Word16         CodingMode);
     44 
     45 int WebRtcIsacfix_EncodeStoredData(ISACFIX_EncInst_t  *ISACenc_obj,
     46                                    int     BWnumber,
     47                                    float              scale);
     48 
     49 /* initialization functions */
     50 
     51 void WebRtcIsacfix_InitMaskingEnc(MaskFiltstr_enc *maskdata);
     52 void WebRtcIsacfix_InitMaskingDec(MaskFiltstr_dec *maskdata);
     53 
     54 void WebRtcIsacfix_InitPreFilterbank(PreFiltBankstr *prefiltdata);
     55 
     56 void WebRtcIsacfix_InitPostFilterbank(PostFiltBankstr *postfiltdata);
     57 
     58 void WebRtcIsacfix_InitPitchFilter(PitchFiltstr *pitchfiltdata);
     59 
     60 void WebRtcIsacfix_InitPitchAnalysis(PitchAnalysisStruct *State);
     61 
     62 void WebRtcIsacfix_InitPlc( PLCstr *State );
     63 
     64 
     65 /* transform functions */
     66 
     67 void WebRtcIsacfix_InitTransform();
     68 
     69 
     70 void WebRtcIsacfix_Time2Spec(WebRtc_Word16 *inre1Q9,
     71                              WebRtc_Word16 *inre2Q9,
     72                              WebRtc_Word16 *outre,
     73                              WebRtc_Word16 *outim);
     74 
     75 
     76 
     77 void WebRtcIsacfix_Spec2Time(WebRtc_Word16 *inreQ7,
     78                              WebRtc_Word16 *inimQ7,
     79                              WebRtc_Word32 *outre1Q16,
     80                              WebRtc_Word32 *outre2Q16);
     81 
     82 
     83 
     84 
     85 /* filterbank functions */
     86 
     87 void WebRtcIsacfix_SplitAndFilter1(WebRtc_Word16    *in,
     88                                    WebRtc_Word16    *LP16,
     89                                    WebRtc_Word16    *HP16,
     90                                    PreFiltBankstr *prefiltdata);
     91 
     92 void WebRtcIsacfix_FilterAndCombine1(WebRtc_Word16     *tempin_ch1,
     93                                      WebRtc_Word16     *tempin_ch2,
     94                                      WebRtc_Word16     *out16,
     95                                      PostFiltBankstr *postfiltdata);
     96 
     97 #ifdef WEBRTC_ISAC_FIX_NB_CALLS_ENABLED
     98 
     99 void WebRtcIsacfix_SplitAndFilter2(WebRtc_Word16    *in,
    100                                    WebRtc_Word16    *LP16,
    101                                    WebRtc_Word16    *HP16,
    102                                    PreFiltBankstr *prefiltdata);
    103 
    104 void WebRtcIsacfix_FilterAndCombine2(WebRtc_Word16     *tempin_ch1,
    105                                      WebRtc_Word16     *tempin_ch2,
    106                                      WebRtc_Word16     *out16,
    107                                      PostFiltBankstr *postfiltdata,
    108                                      WebRtc_Word16     len);
    109 
    110 #endif
    111 
    112 /* normalized lattice filters */
    113 
    114 void WebRtcIsacfix_NormLatticeFilterMa(WebRtc_Word16 orderCoef,
    115                                        WebRtc_Word32 *stateGQ15,
    116                                        WebRtc_Word16 *lat_inQ0,
    117                                        WebRtc_Word16 *filt_coefQ15,
    118                                        WebRtc_Word32 *gain_lo_hiQ17,
    119                                        WebRtc_Word16 lo_hi,
    120                                        WebRtc_Word16 *lat_outQ9);
    121 
    122 void WebRtcIsacfix_NormLatticeFilterAr(WebRtc_Word16 orderCoef,
    123                                        WebRtc_Word16 *stateGQ0,
    124                                        WebRtc_Word32 *lat_inQ25,
    125                                        WebRtc_Word16 *filt_coefQ15,
    126                                        WebRtc_Word32 *gain_lo_hiQ17,
    127                                        WebRtc_Word16 lo_hi,
    128                                        WebRtc_Word16 *lat_outQ0);
    129 
    130 /* TODO(kma): Remove the following functions into individual header files. */
    131 
    132 /* Internal functions in both C and ARM Neon versions */
    133 
    134 int WebRtcIsacfix_AutocorrC(WebRtc_Word32* __restrict r,
    135                             const WebRtc_Word16* __restrict x,
    136                             WebRtc_Word16 N,
    137                             WebRtc_Word16 order,
    138                             WebRtc_Word16* __restrict scale);
    139 
    140 void WebRtcIsacfix_FilterMaLoopC(int16_t input0,
    141                                  int16_t input1,
    142                                  int32_t input2,
    143                                  int32_t* ptr0,
    144                                  int32_t* ptr1,
    145                                  int32_t* ptr2);
    146 
    147 #if (defined WEBRTC_DETECT_ARM_NEON) || (defined WEBRTC_ARCH_ARM_NEON)
    148 int WebRtcIsacfix_AutocorrNeon(WebRtc_Word32* __restrict r,
    149                                const WebRtc_Word16* __restrict x,
    150                                WebRtc_Word16 N,
    151                                WebRtc_Word16 order,
    152                                WebRtc_Word16* __restrict scale);
    153 
    154 void WebRtcIsacfix_FilterMaLoopNeon(int16_t input0,
    155                                     int16_t input1,
    156                                     int32_t input2,
    157                                     int32_t* ptr0,
    158                                     int32_t* ptr1,
    159                                     int32_t* ptr2);
    160 #endif
    161 
    162 /* Function pointers associated with the above functions. */
    163 
    164 typedef int (*AutocorrFix)(WebRtc_Word32* __restrict r,
    165                            const WebRtc_Word16* __restrict x,
    166                            WebRtc_Word16 N,
    167                            WebRtc_Word16 order,
    168                            WebRtc_Word16* __restrict scale);
    169 extern AutocorrFix WebRtcIsacfix_AutocorrFix;
    170 
    171 typedef void (*FilterMaLoopFix)(int16_t input0,
    172                                 int16_t input1,
    173                                 int32_t input2,
    174                                 int32_t* ptr0,
    175                                 int32_t* ptr1,
    176                                 int32_t* ptr2);
    177 extern FilterMaLoopFix WebRtcIsacfix_FilterMaLoopFix;
    178 
    179 #endif /* WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_CODEC_H_ */
    180