diff options
author | Mark Spencer <markster@digium.com> | 2004-10-14 05:15:48 +0000 |
---|---|---|
committer | Mark Spencer <markster@digium.com> | 2004-10-14 05:15:48 +0000 |
commit | d4ff9abc610add56b6c9e0ec193519f48689c0bd (patch) | |
tree | 0deebbd8647eb5799eef8ddc6f084ec945574299 /codecs/ilbc/gainquant.c | |
parent | 7c4337dc91408de2c013c29cd010db02c3524512 (diff) |
Update to new iLBC codec
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3997 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'codecs/ilbc/gainquant.c')
-rwxr-xr-x | codecs/ilbc/gainquant.c | 208 |
1 files changed, 105 insertions, 103 deletions
diff --git a/codecs/ilbc/gainquant.c b/codecs/ilbc/gainquant.c index e0085c688..a23ce05b4 100755 --- a/codecs/ilbc/gainquant.c +++ b/codecs/ilbc/gainquant.c @@ -1,104 +1,106 @@ - -/****************************************************************** - - iLBC Speech Coder ANSI-C Source Code - - gainquant.c - - Copyright (c) 2001, - Global IP Sound AB. - All rights reserved. - -******************************************************************/ - -#include <string.h> -#include <math.h> -#include "constants.h" -#include "filter.h" -#include "gainquant.h" - -/*----------------------------------------------------------------* - * quantizer for the gain in the gain-shape coding of residual - *---------------------------------------------------------------*/ - -float gainquant(/* (o) quantized gain value */ - float in, /* (i) gain value */ - float maxIn,/* (i) maximum of gain value */ - int cblen, /* (i) number of quantization indices */ - int *index /* (o) quantization index */ -){ - int i, tindex; - float minmeasure,measure, *cb, scale; - - /* ensure a lower bound on the scaling factor */ - - scale=maxIn; - - if (scale<0.1) { - scale=(float)0.1; - } - - /* select the quantization table */ - - if (cblen == 8) { - cb = gain_sq3Tbl; - } else if (cblen == 16) { - cb = gain_sq4Tbl; - } else { - cb = gain_sq5Tbl; - } - - /* select the best index in the quantization table */ - - minmeasure=10000000.0; - tindex=0; - for (i=0;i<cblen;i++) { - measure=(in-scale*cb[i])*(in-scale*cb[i]); - - if (measure<minmeasure) { - tindex=i; - minmeasure=measure; - } - } - *index=tindex; + +/****************************************************************** + + iLBC Speech Coder ANSI-C Source Code + + gainquant.c + + Copyright (C) The Internet Society (2004). + All Rights Reserved. + + + +******************************************************************/ + +#include <string.h> +#include <math.h> +#include "constants.h" +#include "filter.h" + +/*----------------------------------------------------------------* + * quantizer for the gain in the gain-shape coding of residual + *---------------------------------------------------------------*/ + +float gainquant(/* (o) quantized gain value */ + float in, /* (i) gain value */ + float maxIn,/* (i) maximum of gain value */ + int cblen, /* (i) number of quantization indices */ + int *index /* (o) quantization index */ +){ + int i, tindex; + float minmeasure,measure, *cb, scale; + + /* ensure a lower bound on the scaling factor */ + + scale=maxIn; + + if (scale<0.1) { + scale=(float)0.1; + } + + /* select the quantization table */ + + if (cblen == 8) { + cb = gain_sq3Tbl; + } else if (cblen == 16) { + cb = gain_sq4Tbl; + } else { + cb = gain_sq5Tbl; + } + + /* select the best index in the quantization table */ + + minmeasure=10000000.0; + tindex=0; + for (i=0; i<cblen; i++) { + measure=(in-scale*cb[i])*(in-scale*cb[i]); - /* return the quantized value */ - - return scale*cb[tindex]; -} - -/*----------------------------------------------------------------* - * decoder for quantized gains in the gain-shape coding of - * residual - *---------------------------------------------------------------*/ - -float gaindequant( /* (o) quantized gain value */ - int index, /* (i) quantization index */ - float maxIn,/* (i) maximum of unquantized gain */ - int cblen /* (i) number of quantization indices */ -){ - float scale; - - /* obtain correct scale factor */ - - scale=(float)fabs(maxIn); - - if (scale<0.1) { - scale=(float)0.1; - } - - /* select the quantization table and return the decoded value */ - - if (cblen==8) { - return scale*gain_sq3Tbl[index]; - } else if (cblen==16) { - return scale*gain_sq4Tbl[index]; - } - else if (cblen==32) { - return scale*gain_sq5Tbl[index]; - } - - return 0.0; -} - - + if (measure<minmeasure) { + tindex=i; + minmeasure=measure; + } + } + *index=tindex; + + /* return the quantized value */ + + + + return scale*cb[tindex]; +} + +/*----------------------------------------------------------------* + * decoder for quantized gains in the gain-shape coding of + * residual + *---------------------------------------------------------------*/ + +float gaindequant( /* (o) quantized gain value */ + int index, /* (i) quantization index */ + float maxIn,/* (i) maximum of unquantized gain */ + int cblen /* (i) number of quantization indices */ +){ + float scale; + + /* obtain correct scale factor */ + + scale=(float)fabs(maxIn); + + if (scale<0.1) { + scale=(float)0.1; + } + + /* select the quantization table and return the decoded value */ + + if (cblen==8) { + return scale*gain_sq3Tbl[index]; + } else if (cblen==16) { + return scale*gain_sq4Tbl[index]; + } + else if (cblen==32) { + return scale*gain_sq5Tbl[index]; + } + + return 0.0; +} + + |