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 13 iLBC Speech Coder ANSI-C Source Code 14 15 define.h 16 17 ******************************************************************/ 18 #ifndef WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_SOURCE_DEFINES_H_ 19 #define WEBRTC_MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_SOURCE_DEFINES_H_ 20 21 #include <string.h> 22 #include "signal_processing_library.h" 23 #include "webrtc/typedefs.h" 24 25 /* general codec settings */ 26 27 #define FS 8000 28 #define BLOCKL_20MS 160 29 #define BLOCKL_30MS 240 30 #define BLOCKL_MAX 240 31 #define NSUB_20MS 4 32 #define NSUB_30MS 6 33 #define NSUB_MAX 6 34 #define NASUB_20MS 2 35 #define NASUB_30MS 4 36 #define NASUB_MAX 4 37 #define SUBL 40 38 #define STATE_LEN 80 39 #define STATE_SHORT_LEN_30MS 58 40 #define STATE_SHORT_LEN_20MS 57 41 42 /* LPC settings */ 43 44 #define LPC_FILTERORDER 10 45 #define LPC_LOOKBACK 60 46 #define LPC_N_20MS 1 47 #define LPC_N_30MS 2 48 #define LPC_N_MAX 2 49 #define LPC_ASYMDIFF 20 50 #define LSF_NSPLIT 3 51 #define LSF_NUMBER_OF_STEPS 4 52 #define LPC_HALFORDER 5 53 #define COS_GRID_POINTS 60 54 55 /* cb settings */ 56 57 #define CB_NSTAGES 3 58 #define CB_EXPAND 2 59 #define CB_MEML 147 60 #define CB_FILTERLEN (2*4) 61 #define CB_HALFFILTERLEN 4 62 #define CB_RESRANGE 34 63 #define CB_MAXGAIN_FIXQ6 83 /* error = -0.24% */ 64 #define CB_MAXGAIN_FIXQ14 21299 65 66 /* enhancer */ 67 68 #define ENH_BLOCKL 80 /* block length */ 69 #define ENH_BLOCKL_HALF (ENH_BLOCKL/2) 70 #define ENH_HL 3 /* 2*ENH_HL+1 is number blocks 71 in said second sequence */ 72 #define ENH_SLOP 2 /* max difference estimated and 73 correct pitch period */ 74 #define ENH_PLOCSL 8 /* pitch-estimates and 75 pitch-locations buffer length */ 76 #define ENH_OVERHANG 2 77 #define ENH_UPS0 4 /* upsampling rate */ 78 #define ENH_FL0 3 /* 2*FLO+1 is the length of each filter */ 79 #define ENH_FLO_MULT2_PLUS1 7 80 #define ENH_VECTL (ENH_BLOCKL+2*ENH_FL0) 81 #define ENH_CORRDIM (2*ENH_SLOP+1) 82 #define ENH_NBLOCKS (BLOCKL/ENH_BLOCKL) 83 #define ENH_NBLOCKS_EXTRA 5 84 #define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS+ENH_NBLOCKS_EXTRA */ 85 #define ENH_BUFL (ENH_NBLOCKS_TOT)*ENH_BLOCKL 86 #define ENH_BUFL_FILTEROVERHEAD 3 87 #define ENH_A0 819 /* Q14 */ 88 #define ENH_A0_MINUS_A0A0DIV4 848256041 /* Q34 */ 89 #define ENH_A0DIV2 26843546 /* Q30 */ 90 91 /* PLC */ 92 93 /* Down sampling */ 94 95 #define FILTERORDER_DS_PLUS1 7 96 #define DELAY_DS 3 97 #define FACTOR_DS 2 98 99 /* bit stream defs */ 100 101 #define NO_OF_BYTES_20MS 38 102 #define NO_OF_BYTES_30MS 50 103 #define NO_OF_WORDS_20MS 19 104 #define NO_OF_WORDS_30MS 25 105 #define STATE_BITS 3 106 #define BYTE_LEN 8 107 #define ULP_CLASSES 3 108 109 /* help parameters */ 110 111 #define TWO_PI_FIX 25736 /* Q12 */ 112 113 /* Constants for codebook search and creation */ 114 115 #define ST_MEM_L_TBL 85 116 #define MEM_LF_TBL 147 117 118 119 /* Struct for the bits */ 120 typedef struct iLBC_bits_t_ { 121 int16_t lsf[LSF_NSPLIT*LPC_N_MAX]; 122 int16_t cb_index[CB_NSTAGES*(NASUB_MAX+1)]; /* First CB_NSTAGES values contains extra CB index */ 123 int16_t gain_index[CB_NSTAGES*(NASUB_MAX+1)]; /* First CB_NSTAGES values contains extra CB gain */ 124 size_t idxForMax; 125 int16_t state_first; 126 int16_t idxVec[STATE_SHORT_LEN_30MS]; 127 int16_t firstbits; 128 size_t startIdx; 129 } iLBC_bits; 130 131 /* type definition encoder instance */ 132 typedef struct IlbcEncoder_ { 133 134 /* flag for frame size mode */ 135 int16_t mode; 136 137 /* basic parameters for different frame sizes */ 138 size_t blockl; 139 size_t nsub; 140 int16_t nasub; 141 size_t no_of_bytes, no_of_words; 142 int16_t lpc_n; 143 size_t state_short_len; 144 145 /* analysis filter state */ 146 int16_t anaMem[LPC_FILTERORDER]; 147 148 /* Fix-point old lsf parameters for interpolation */ 149 int16_t lsfold[LPC_FILTERORDER]; 150 int16_t lsfdeqold[LPC_FILTERORDER]; 151 152 /* signal buffer for LP analysis */ 153 int16_t lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX]; 154 155 /* state of input HP filter */ 156 int16_t hpimemx[2]; 157 int16_t hpimemy[4]; 158 159 #ifdef SPLIT_10MS 160 int16_t weightdenumbuf[66]; 161 int16_t past_samples[160]; 162 uint16_t bytes[25]; 163 int16_t section; 164 int16_t Nfor_flag; 165 int16_t Nback_flag; 166 int16_t start_pos; 167 size_t diff; 168 #endif 169 170 } IlbcEncoder; 171 172 /* type definition decoder instance */ 173 typedef struct IlbcDecoder_ { 174 175 /* flag for frame size mode */ 176 int16_t mode; 177 178 /* basic parameters for different frame sizes */ 179 size_t blockl; 180 size_t nsub; 181 int16_t nasub; 182 size_t no_of_bytes, no_of_words; 183 int16_t lpc_n; 184 size_t state_short_len; 185 186 /* synthesis filter state */ 187 int16_t syntMem[LPC_FILTERORDER]; 188 189 /* old LSF for interpolation */ 190 int16_t lsfdeqold[LPC_FILTERORDER]; 191 192 /* pitch lag estimated in enhancer and used in PLC */ 193 size_t last_lag; 194 195 /* PLC state information */ 196 int consPLICount, prev_enh_pl; 197 int16_t perSquare; 198 199 int16_t prevScale, prevPLI; 200 size_t prevLag; 201 int16_t prevLpc[LPC_FILTERORDER+1]; 202 int16_t prevResidual[NSUB_MAX*SUBL]; 203 int16_t seed; 204 205 /* previous synthesis filter parameters */ 206 207 int16_t old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX]; 208 209 /* state of output HP filter */ 210 int16_t hpimemx[2]; 211 int16_t hpimemy[4]; 212 213 /* enhancer state information */ 214 int use_enhancer; 215 int16_t enh_buf[ENH_BUFL+ENH_BUFL_FILTEROVERHEAD]; 216 size_t enh_period[ENH_NBLOCKS_TOT]; 217 218 } IlbcDecoder; 219 220 #endif 221