diff options
Diffstat (limited to 'codecs/ilbc/iCBConstruct.c')
-rwxr-xr-x | codecs/ilbc/iCBConstruct.c | 212 |
1 files changed, 107 insertions, 105 deletions
diff --git a/codecs/ilbc/iCBConstruct.c b/codecs/ilbc/iCBConstruct.c index acbf54e3c..384e75df6 100755 --- a/codecs/ilbc/iCBConstruct.c +++ b/codecs/ilbc/iCBConstruct.c @@ -1,105 +1,107 @@ - -/****************************************************************** - - iLBC Speech Coder ANSI-C Source Code - - iCBConstruct.c - - Copyright (c) 2001, - Global IP Sound AB. - All rights reserved. - -******************************************************************/ - -#include <math.h> - -#include "iLBC_define.h" -#include "gainquant.h" -#include "getCBvec.h" -#include "iCBConstruct.h" - -/*----------------------------------------------------------------* - * Convert the codebook indexes to make the search easier - *---------------------------------------------------------------*/ - -void index_conv_enc( - int *index /* (i/o) Codebook indexes */ -){ - int k; - - for (k=1;k<CB_NSTAGES;k++) { - - if ((index[k]>=108)&&(index[k]<172)) { - index[k]-=64; - } else if (index[k]>=236) { - index[k]-=128; - } else { - /* ERROR */ - } - } -} - -void index_conv_dec( - int *index /* (i/o) Codebook indexes */ -){ - int k; - - for (k=1;k<CB_NSTAGES;k++) { - - if ((index[k]>=44)&&(index[k]<108)) { - index[k]+=64; - } else if ((index[k]>=108)&&(index[k]<128)) { - index[k]+=128; - } else { - /* ERROR */ - } - } -} - -/*----------------------------------------------------------------* - * Construct decoded vector from codebook and gains. - *---------------------------------------------------------------*/ - -void iCBConstruct( - float *decvector, /* (o) Decoded vector */ - int *index, /* (i) Codebook indices */ - int *gain_index,/* (i) Gain quantization indices */ - float *mem, /* (i) Buffer for codevector construction */ - int lMem, /* (i) Length of buffer */ - int veclen, /* (i) Length of vector */ - int nStages /* (i) Number of codebook stages */ -){ - int j,k; - float gain[CB_NSTAGES]; - float cbvec[SUBL]; - - /* gain de-quantization */ - - gain[0] = gaindequant(gain_index[0], 1.0, 32); - if (nStages > 1) { - gain[1] = gaindequant(gain_index[1], - (float)fabs(gain[0]), 16); - } - if (nStages > 2) { - gain[2] = gaindequant(gain_index[2], - (float)fabs(gain[1]), 8); - } - - /* codebook vector construction and construction of - total vector */ - - getCBvec(cbvec, mem, index[0], lMem, veclen); - for (j=0;j<veclen;j++){ - decvector[j] = gain[0]*cbvec[j]; - } - if (nStages > 1) { - for (k=1; k<nStages; k++) { - getCBvec(cbvec, mem, index[k], lMem, veclen); - for (j=0;j<veclen;j++) { - decvector[j] += gain[k]*cbvec[j]; - } - } - } -} - - + +/****************************************************************** + + iLBC Speech Coder ANSI-C Source Code + + iCBConstruct.c + + Copyright (C) The Internet Society (2004). + All Rights Reserved. + +******************************************************************/ + +#include <math.h> + +#include "iLBC_define.h" +#include "gainquant.h" +#include "getCBvec.h" + +/*----------------------------------------------------------------* + * Convert the codebook indexes to make the search easier + *---------------------------------------------------------------*/ + + + +void index_conv_enc( + int *index /* (i/o) Codebook indexes */ +){ + int k; + + for (k=1; k<CB_NSTAGES; k++) { + + if ((index[k]>=108)&&(index[k]<172)) { + index[k]-=64; + } else if (index[k]>=236) { + index[k]-=128; + } else { + /* ERROR */ + } + } +} + +void index_conv_dec( + int *index /* (i/o) Codebook indexes */ +){ + int k; + + for (k=1; k<CB_NSTAGES; k++) { + + if ((index[k]>=44)&&(index[k]<108)) { + index[k]+=64; + } else if ((index[k]>=108)&&(index[k]<128)) { + index[k]+=128; + } else { + /* ERROR */ + } + } +} + +/*----------------------------------------------------------------* + * Construct decoded vector from codebook and gains. + *---------------------------------------------------------------*/ + +void iCBConstruct( + float *decvector, /* (o) Decoded vector */ + int *index, /* (i) Codebook indices */ + int *gain_index,/* (i) Gain quantization indices */ + float *mem, /* (i) Buffer for codevector construction */ + int lMem, /* (i) Length of buffer */ + int veclen, /* (i) Length of vector */ + int nStages /* (i) Number of codebook stages */ +){ + int j,k; + float gain[CB_NSTAGES]; + float cbvec[SUBL]; + + /* gain de-quantization */ + + gain[0] = gaindequant(gain_index[0], 1.0, 32); + + + if (nStages > 1) { + gain[1] = gaindequant(gain_index[1], + (float)fabs(gain[0]), 16); + } + if (nStages > 2) { + gain[2] = gaindequant(gain_index[2], + (float)fabs(gain[1]), 8); + } + + /* codebook vector construction and construction of + total vector */ + + getCBvec(cbvec, mem, index[0], lMem, veclen); + for (j=0;j<veclen;j++){ + decvector[j] = gain[0]*cbvec[j]; + } + if (nStages > 1) { + for (k=1; k<nStages; k++) { + getCBvec(cbvec, mem, index[k], lMem, veclen); + for (j=0;j<veclen;j++) { + decvector[j] += gain[k]*cbvec[j]; + } + } + } +} + + |