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 MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_SOURCE_DEFINES_H_ 19 #define MODULES_AUDIO_CODING_CODECS_ILBC_MAIN_SOURCE_DEFINES_H_ 20 21 #include <string.h> 22 23 #include "common_audio/signal_processing/include/signal_processing_library.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 \ 71 3 /* 2*ENH_HL+1 is number blocks \ 72 in said second \ 73 sequence */ 74 #define ENH_SLOP \ 75 2 /* max difference estimated and \ 76 correct pitch period */ 77 #define ENH_PLOCSL \ 78 8 /* pitch-estimates and \ 79 pitch-locations buffer \ 80 length */ 81 #define ENH_OVERHANG 2 82 #define ENH_UPS0 4 /* upsampling rate */ 83 #define ENH_FL0 3 /* 2*FLO+1 is the length of each filter */ 84 #define ENH_FLO_MULT2_PLUS1 7 85 #define ENH_VECTL (ENH_BLOCKL + 2 * ENH_FL0) 86 #define ENH_CORRDIM (2 * ENH_SLOP + 1) 87 #define ENH_NBLOCKS (BLOCKL / ENH_BLOCKL) 88 #define ENH_NBLOCKS_EXTRA 5 89 #define ENH_NBLOCKS_TOT 8 /* ENH_NBLOCKS+ENH_NBLOCKS_EXTRA */ 90 #define ENH_BUFL (ENH_NBLOCKS_TOT) * ENH_BLOCKL 91 #define ENH_BUFL_FILTEROVERHEAD 3 92 #define ENH_A0 819 /* Q14 */ 93 #define ENH_A0_MINUS_A0A0DIV4 848256041 /* Q34 */ 94 #define ENH_A0DIV2 26843546 /* Q30 */ 95 96 /* PLC */ 97 98 /* Down sampling */ 99 100 #define FILTERORDER_DS_PLUS1 7 101 #define DELAY_DS 3 102 #define FACTOR_DS 2 103 104 /* bit stream defs */ 105 106 #define NO_OF_BYTES_20MS 38 107 #define NO_OF_BYTES_30MS 50 108 #define NO_OF_WORDS_20MS 19 109 #define NO_OF_WORDS_30MS 25 110 #define STATE_BITS 3 111 #define BYTE_LEN 8 112 #define ULP_CLASSES 3 113 114 /* help parameters */ 115 116 #define TWO_PI_FIX 25736 /* Q12 */ 117 118 /* Constants for codebook search and creation */ 119 120 #define ST_MEM_L_TBL 85 121 #define MEM_LF_TBL 147 122 123 /* Struct for the bits */ 124 typedef struct iLBC_bits_t_ { 125 int16_t lsf[LSF_NSPLIT * LPC_N_MAX]; 126 int16_t cb_index[CB_NSTAGES * (NASUB_MAX + 1)]; /* First CB_NSTAGES values 127 contains extra CB index */ 128 int16_t gain_index[CB_NSTAGES * (NASUB_MAX + 1)]; /* First CB_NSTAGES values 129 contains extra CB gain */ 130 size_t idxForMax; 131 int16_t state_first; 132 int16_t idxVec[STATE_SHORT_LEN_30MS]; 133 int16_t firstbits; 134 size_t startIdx; 135 } iLBC_bits; 136 137 /* type definition encoder instance */ 138 typedef struct IlbcEncoder_ { 139 /* flag for frame size mode */ 140 int16_t mode; 141 142 /* basic parameters for different frame sizes */ 143 size_t blockl; 144 size_t nsub; 145 int16_t nasub; 146 size_t no_of_bytes, no_of_words; 147 int16_t lpc_n; 148 size_t state_short_len; 149 150 /* analysis filter state */ 151 int16_t anaMem[LPC_FILTERORDER]; 152 153 /* Fix-point old lsf parameters for interpolation */ 154 int16_t lsfold[LPC_FILTERORDER]; 155 int16_t lsfdeqold[LPC_FILTERORDER]; 156 157 /* signal buffer for LP analysis */ 158 int16_t lpc_buffer[LPC_LOOKBACK + BLOCKL_MAX]; 159 160 /* state of input HP filter */ 161 int16_t hpimemx[2]; 162 int16_t hpimemy[4]; 163 164 #ifdef SPLIT_10MS 165 int16_t weightdenumbuf[66]; 166 int16_t past_samples[160]; 167 uint16_t bytes[25]; 168 int16_t section; 169 int16_t Nfor_flag; 170 int16_t Nback_flag; 171 int16_t start_pos; 172 size_t diff; 173 #endif 174 175 } IlbcEncoder; 176 177 /* type definition decoder instance */ 178 typedef struct IlbcDecoder_ { 179 /* flag for frame size mode */ 180 int16_t mode; 181 182 /* basic parameters for different frame sizes */ 183 size_t blockl; 184 size_t nsub; 185 int16_t nasub; 186 size_t no_of_bytes, no_of_words; 187 int16_t lpc_n; 188 size_t state_short_len; 189 190 /* synthesis filter state */ 191 int16_t syntMem[LPC_FILTERORDER]; 192 193 /* old LSF for interpolation */ 194 int16_t lsfdeqold[LPC_FILTERORDER]; 195 196 /* pitch lag estimated in enhancer and used in PLC */ 197 size_t last_lag; 198 199 /* PLC state information */ 200 int consPLICount, prev_enh_pl; 201 int16_t perSquare; 202 203 int16_t prevScale, prevPLI; 204 size_t prevLag; 205 int16_t prevLpc[LPC_FILTERORDER + 1]; 206 int16_t prevResidual[NSUB_MAX * SUBL]; 207 int16_t seed; 208 209 /* previous synthesis filter parameters */ 210 211 int16_t old_syntdenum[(LPC_FILTERORDER + 1) * NSUB_MAX]; 212 213 /* state of output HP filter */ 214 int16_t hpimemx[2]; 215 int16_t hpimemy[4]; 216 217 /* enhancer state information */ 218 int use_enhancer; 219 int16_t enh_buf[ENH_BUFL + ENH_BUFL_FILTEROVERHEAD]; 220 size_t enh_period[ENH_NBLOCKS_TOT]; 221 222 } IlbcDecoder; 223 224 #endif 225