Home | History | Annotate | Download | only in source
      1 /*
      2  *  Copyright (c) 2011 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  * entropy_coding.h
     13  *
     14  * This header file contains all of the functions used to arithmetically
     15  * encode the iSAC bistream
     16  *
     17  */
     18 
     19 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_
     20 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_
     21 
     22 #include "structs.h"
     23 
     24 /* decode complex spectrum (return number of bytes in stream) */
     25 int WebRtcIsacfix_DecodeSpec(Bitstr_dec  *streamdata,
     26                              int16_t *frQ7,
     27                              int16_t *fiQ7,
     28                              int16_t AvgPitchGain_Q12);
     29 
     30 /* encode complex spectrum */
     31 int WebRtcIsacfix_EncodeSpec(const int16_t *fr,
     32                              const int16_t *fi,
     33                              Bitstr_enc *streamdata,
     34                              int16_t AvgPitchGain_Q12);
     35 
     36 
     37 /* decode & dequantize LPC Coef */
     38 int WebRtcIsacfix_DecodeLpcCoef(Bitstr_dec  *streamdata,
     39                                 int32_t *LPCCoefQ17,
     40                                 int32_t *gain_lo_hiQ17,
     41                                 int16_t *outmodel);
     42 
     43 int WebRtcIsacfix_DecodeLpc(int32_t *gain_lo_hiQ17,
     44                             int16_t *LPCCoef_loQ15,
     45                             int16_t *LPCCoef_hiQ15,
     46                             Bitstr_dec  *streamdata,
     47                             int16_t *outmodel);
     48 
     49 /* quantize & code LPC Coef */
     50 int WebRtcIsacfix_EncodeLpc(int32_t *gain_lo_hiQ17,
     51                             int16_t *LPCCoef_loQ15,
     52                             int16_t *LPCCoef_hiQ15,
     53                             int16_t *model,
     54                             int32_t *sizeQ11,
     55                             Bitstr_enc *streamdata,
     56                             IsacSaveEncoderData* encData,
     57                             transcode_obj *transcodeParam);
     58 
     59 int WebRtcIsacfix_EstCodeLpcGain(int32_t *gain_lo_hiQ17,
     60                                  Bitstr_enc *streamdata,
     61                                  IsacSaveEncoderData* encData);
     62 /* decode & dequantize RC */
     63 int WebRtcIsacfix_DecodeRcCoef(Bitstr_dec *streamdata,
     64                                int16_t *RCQ15);
     65 
     66 /* quantize & code RC */
     67 int WebRtcIsacfix_EncodeRcCoef(int16_t *RCQ15,
     68                                Bitstr_enc *streamdata);
     69 
     70 /* decode & dequantize squared Gain */
     71 int WebRtcIsacfix_DecodeGain2(Bitstr_dec *streamdata,
     72                               int32_t *Gain2);
     73 
     74 /* quantize & code squared Gain (input is squared gain) */
     75 int WebRtcIsacfix_EncodeGain2(int32_t *gain2,
     76                               Bitstr_enc *streamdata);
     77 
     78 int WebRtcIsacfix_EncodePitchGain(int16_t *PitchGains_Q12,
     79                                   Bitstr_enc *streamdata,
     80                                   IsacSaveEncoderData* encData);
     81 
     82 int WebRtcIsacfix_EncodePitchLag(int16_t *PitchLagQ7,
     83                                  int16_t *PitchGain_Q12,
     84                                  Bitstr_enc *streamdata,
     85                                  IsacSaveEncoderData* encData);
     86 
     87 int WebRtcIsacfix_DecodePitchGain(Bitstr_dec *streamdata,
     88                                   int16_t *PitchGain_Q12);
     89 
     90 int WebRtcIsacfix_DecodePitchLag(Bitstr_dec *streamdata,
     91                                  int16_t *PitchGain_Q12,
     92                                  int16_t *PitchLagQ7);
     93 
     94 int WebRtcIsacfix_DecodeFrameLen(Bitstr_dec *streamdata,
     95                                  size_t *framelength);
     96 
     97 
     98 int WebRtcIsacfix_EncodeFrameLen(int16_t framelength,
     99                                  Bitstr_enc *streamdata);
    100 
    101 int WebRtcIsacfix_DecodeSendBandwidth(Bitstr_dec *streamdata,
    102                                       int16_t *BWno);
    103 
    104 
    105 int WebRtcIsacfix_EncodeReceiveBandwidth(int16_t *BWno,
    106                                          Bitstr_enc *streamdata);
    107 
    108 void WebRtcIsacfix_TranscodeLpcCoef(int32_t *tmpcoeffs_gQ6,
    109                                     int16_t *index_gQQ);
    110 
    111 // Pointer functions for LPC transforms.
    112 
    113 typedef void (*MatrixProduct1)(const int16_t matrix0[],
    114                                const int32_t matrix1[],
    115                                int32_t matrix_product[],
    116                                const int matrix1_index_factor1,
    117                                const int matrix0_index_factor1,
    118                                const int matrix1_index_init_case,
    119                                const int matrix1_index_step,
    120                                const int matrix0_index_step,
    121                                const int inner_loop_count,
    122                                const int mid_loop_count,
    123                                const int shift);
    124 typedef void (*MatrixProduct2)(const int16_t matrix0[],
    125                                const int32_t matrix1[],
    126                                int32_t matrix_product[],
    127                                const int matrix0_index_factor,
    128                                const int matrix0_index_step);
    129 
    130 extern MatrixProduct1 WebRtcIsacfix_MatrixProduct1;
    131 extern MatrixProduct2 WebRtcIsacfix_MatrixProduct2;
    132 
    133 void WebRtcIsacfix_MatrixProduct1C(const int16_t matrix0[],
    134                                    const int32_t matrix1[],
    135                                    int32_t matrix_product[],
    136                                    const int matrix1_index_factor1,
    137                                    const int matrix0_index_factor1,
    138                                    const int matrix1_index_init_case,
    139                                    const int matrix1_index_step,
    140                                    const int matrix0_index_step,
    141                                    const int inner_loop_count,
    142                                    const int mid_loop_count,
    143                                    const int shift);
    144 void WebRtcIsacfix_MatrixProduct2C(const int16_t matrix0[],
    145                                    const int32_t matrix1[],
    146                                    int32_t matrix_product[],
    147                                    const int matrix0_index_factor,
    148                                    const int matrix0_index_step);
    149 
    150 #if (defined WEBRTC_DETECT_NEON) || (defined WEBRTC_HAS_NEON)
    151 void WebRtcIsacfix_MatrixProduct1Neon(const int16_t matrix0[],
    152                                       const int32_t matrix1[],
    153                                       int32_t matrix_product[],
    154                                       const int matrix1_index_factor1,
    155                                       const int matrix0_index_factor1,
    156                                       const int matrix1_index_init_case,
    157                                       const int matrix1_index_step,
    158                                       const int matrix0_index_step,
    159                                       const int inner_loop_count,
    160                                       const int mid_loop_count,
    161                                       const int shift);
    162 void WebRtcIsacfix_MatrixProduct2Neon(const int16_t matrix0[],
    163                                       const int32_t matrix1[],
    164                                       int32_t matrix_product[],
    165                                       const int matrix0_index_factor,
    166                                       const int matrix0_index_step);
    167 #endif
    168 
    169 #if defined(MIPS32_LE)
    170 void WebRtcIsacfix_MatrixProduct1MIPS(const int16_t matrix0[],
    171                                       const int32_t matrix1[],
    172                                       int32_t matrix_product[],
    173                                       const int matrix1_index_factor1,
    174                                       const int matrix0_index_factor1,
    175                                       const int matrix1_index_init_case,
    176                                       const int matrix1_index_step,
    177                                       const int matrix0_index_step,
    178                                       const int inner_loop_count,
    179                                       const int mid_loop_count,
    180                                       const int shift);
    181 
    182 void WebRtcIsacfix_MatrixProduct2MIPS(const int16_t matrix0[],
    183                                       const int32_t matrix1[],
    184                                       int32_t matrix_product[],
    185                                       const int matrix0_index_factor,
    186                                       const int matrix0_index_step);
    187 #endif
    188 
    189 #endif  // WEBRTC_MODULES_AUDIO_CODING_CODECS_ISAC_FIX_SOURCE_ENTROPY_CODING_H_
    190