annotate acelp_vectors.c @ 10483:afad312b9989 libavcodec

Implement AMR gain function that is used by both AMR and SIPR. Based on AMR SoC code by Robert Swain and Colin McQuillan.
author vitor
date Sat, 31 Oct 2009 02:02:30 +0000
parents 9f35b262d3f0
children 5f2ced30548b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
1 /*
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
2 * adaptive and fixed codebook vector operations for ACELP-based codecs
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
3 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
4 * Copyright (c) 2008 Vladimir Voroshilov
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
5 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
6 * This file is part of FFmpeg.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
7 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
12 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
16 * Lesser General Public License for more details.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
17 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
21 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
22
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
23 #include <inttypes.h>
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
24 #include "avcodec.h"
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
25 #include "acelp_vectors.h"
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
26 #include "celp_math.h"
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
27
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
28 const uint8_t ff_fc_2pulses_9bits_track1[16] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
29 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
30 1, 3,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
31 6, 8,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
32 11, 13,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
33 16, 18,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
34 21, 23,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
35 26, 28,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
36 31, 33,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
37 36, 38
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
38 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
39 const uint8_t ff_fc_2pulses_9bits_track1_gray[16] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
40 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
41 1, 3,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
42 8, 6,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
43 18, 16,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
44 11, 13,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
45 38, 36,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
46 31, 33,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
47 21, 23,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
48 28, 26,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
49 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
50
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
51 const uint8_t ff_fc_2pulses_9bits_track2_gray[32] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
52 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
53 0, 2,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
54 5, 4,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
55 12, 10,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
56 7, 9,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
57 25, 24,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
58 20, 22,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
59 14, 15,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
60 19, 17,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
61 36, 31,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
62 21, 26,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
63 1, 6,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
64 16, 11,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
65 27, 29,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
66 32, 30,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
67 39, 37,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
68 34, 35,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
69 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
70
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
71 const uint8_t ff_fc_4pulses_8bits_tracks_13[16] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
72 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
73 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
74 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
75
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
76 const uint8_t ff_fc_4pulses_8bits_track_4[32] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
77 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
78 3, 4,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
79 8, 9,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
80 13, 14,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
81 18, 19,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
82 23, 24,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
83 28, 29,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
84 33, 34,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
85 38, 39,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
86 43, 44,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
87 48, 49,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
88 53, 54,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
89 58, 59,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
90 63, 64,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
91 68, 69,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
92 73, 74,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
93 78, 79,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
94 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
95
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
96 #if 0
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
97 static uint8_t gray_decode[32] =
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
98 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
99 0, 1, 3, 2, 7, 6, 4, 5,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
100 15, 14, 12, 13, 8, 9, 11, 10,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
101 31, 30, 28, 29, 24, 25, 27, 26,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
102 16, 17, 19, 18, 23, 22, 20, 21
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
103 };
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
104 #endif
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
105
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
106 void ff_acelp_fc_pulse_per_track(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
107 int16_t* fc_v,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
108 const uint8_t *tab1,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
109 const uint8_t *tab2,
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
110 int pulse_indexes,
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
111 int pulse_signs,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
112 int pulse_count,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
113 int bits)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
114 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
115 int mask = (1 << bits) - 1;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
116 int i;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
117
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
118 for(i=0; i<pulse_count; i++)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
119 {
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
120 fc_v[i + tab1[pulse_indexes & mask]] +=
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
121 (pulse_signs & 1) ? 8191 : -8192; // +/-1 in (2.13)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
122
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
123 pulse_indexes >>= bits;
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
124 pulse_signs >>= 1;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
125 }
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
126
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
127 fc_v[tab2[pulse_indexes]] += (pulse_signs & 1) ? 8191 : -8192;
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
128 }
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
129
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
130 void ff_acelp_weighted_vector_sum(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
131 int16_t* out,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
132 const int16_t *in_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
133 const int16_t *in_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
134 int16_t weight_coeff_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
135 int16_t weight_coeff_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
136 int16_t rounder,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
137 int shift,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
138 int length)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
139 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
140 int i;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
141
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
142 // Clipping required here; breaks OVERFLOW test.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
143 for(i=0; i<length; i++)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
144 out[i] = av_clip_int16((
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
145 in_a[i] * weight_coeff_a +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
146 in_b[i] * weight_coeff_b +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
147 rounder) >> shift);
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
148 }
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
149
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
150 void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
151 float weight_coeff_a, float weight_coeff_b, int length)
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
152 {
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
153 int i;
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
154
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
155 for(i=0; i<length; i++)
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
156 out[i] = weight_coeff_a * in_a[i]
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
157 + weight_coeff_b * in_b[i];
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
158 }
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
159
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
160 void ff_adaptative_gain_control(float *buf_out, float speech_energ,
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
161 int size, float alpha, float *gain_mem)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
162 {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
163 int i;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
164 float postfilter_energ = ff_dot_productf(buf_out, buf_out, size);
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
165 float gain_scale_factor = 1.0;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
166 float mem = *gain_mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
167
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
168 if (postfilter_energ)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
169 gain_scale_factor = sqrt(speech_energ / postfilter_energ);
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
170
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
171 gain_scale_factor *= 1.0 - alpha;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
172
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
173 for (i = 0; i < size; i++) {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
174 mem = alpha * mem + gain_scale_factor;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
175 buf_out[i] *= mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
176 }
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
177
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
178 *gain_mem = mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
179 }