Make file access in cdr_custom similar to cdr_csv.
[asterisk-bristuff.git] / codecs / ilbc / gainquant.c
blob33dc194744b29ef8a6c9afa5ac3d60cdba6d1ee0
2 /******************************************************************
4 iLBC Speech Coder ANSI-C Source Code
6 gainquant.c
8 Copyright (C) The Internet Society (2004).
9 All Rights Reserved.
13 ******************************************************************/
15 #include <string.h>
16 #include <math.h>
17 #include "constants.h"
18 #include "gainquant.h"
19 #include "filter.h"
21 /*----------------------------------------------------------------*
22 * quantizer for the gain in the gain-shape coding of residual
23 *---------------------------------------------------------------*/
25 float gainquant(/* (o) quantized gain value */
26 float in, /* (i) gain value */
27 float maxIn,/* (i) maximum of gain value */
28 int cblen, /* (i) number of quantization indices */
29 int *index /* (o) quantization index */
31 int i, tindex;
32 float minmeasure,measure, *cb, scale;
34 /* ensure a lower bound on the scaling factor */
36 scale=maxIn;
38 if (scale<0.1) {
39 scale=(float)0.1;
42 /* select the quantization table */
44 if (cblen == 8) {
45 cb = gain_sq3Tbl;
46 } else if (cblen == 16) {
47 cb = gain_sq4Tbl;
48 } else {
49 cb = gain_sq5Tbl;
52 /* select the best index in the quantization table */
54 minmeasure=10000000.0;
55 tindex=0;
56 for (i=0; i<cblen; i++) {
57 measure=(in-scale*cb[i])*(in-scale*cb[i]);
59 if (measure<minmeasure) {
60 tindex=i;
61 minmeasure=measure;
64 *index=tindex;
66 /* return the quantized value */
70 return scale*cb[tindex];
73 /*----------------------------------------------------------------*
74 * decoder for quantized gains in the gain-shape coding of
75 * residual
76 *---------------------------------------------------------------*/
78 float gaindequant( /* (o) quantized gain value */
79 int index, /* (i) quantization index */
80 float maxIn,/* (i) maximum of unquantized gain */
81 int cblen /* (i) number of quantization indices */
83 float scale;
85 /* obtain correct scale factor */
87 scale=(float)fabs(maxIn);
89 if (scale<0.1) {
90 scale=(float)0.1;
93 /* select the quantization table and return the decoded value */
95 if (cblen==8) {
96 return scale*gain_sq3Tbl[index];
97 } else if (cblen==16) {
98 return scale*gain_sq4Tbl[index];
100 else if (cblen==32) {
101 return scale*gain_sq5Tbl[index];
104 return 0.0;