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 */ 120typedef 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 int16_t idxForMax; 125 int16_t state_first; 126 int16_t idxVec[STATE_SHORT_LEN_30MS]; 127 int16_t firstbits; 128 int16_t startIdx; 129} iLBC_bits; 130 131/* type definition encoder instance */ 132typedef struct iLBC_Enc_Inst_t_ { 133 134 /* flag for frame size mode */ 135 int16_t mode; 136 137 /* basic parameters for different frame sizes */ 138 int16_t blockl; 139 int16_t nsub; 140 int16_t nasub; 141 int16_t no_of_bytes, no_of_words; 142 int16_t lpc_n; 143 int16_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 int16_t diff; 168#endif 169 170} iLBC_Enc_Inst_t; 171 172/* type definition decoder instance */ 173typedef struct iLBC_Dec_Inst_t_ { 174 175 /* flag for frame size mode */ 176 int16_t mode; 177 178 /* basic parameters for different frame sizes */ 179 int16_t blockl; 180 int16_t nsub; 181 int16_t nasub; 182 int16_t no_of_bytes, no_of_words; 183 int16_t lpc_n; 184 int16_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 int last_lag; 194 195 /* PLC state information */ 196 int consPLICount, prev_enh_pl; 197 int16_t perSquare; 198 199 int16_t prevScale, prevPLI; 200 int16_t prevLag, prevLpc[LPC_FILTERORDER+1]; 201 int16_t prevResidual[NSUB_MAX*SUBL]; 202 int16_t seed; 203 204 /* previous synthesis filter parameters */ 205 206 int16_t old_syntdenum[(LPC_FILTERORDER + 1)*NSUB_MAX]; 207 208 /* state of output HP filter */ 209 int16_t hpimemx[2]; 210 int16_t hpimemy[4]; 211 212 /* enhancer state information */ 213 int use_enhancer; 214 int16_t enh_buf[ENH_BUFL+ENH_BUFL_FILTEROVERHEAD]; 215 int16_t enh_period[ENH_NBLOCKS_TOT]; 216 217} iLBC_Dec_Inst_t; 218 219#endif 220