Mercurial > libavcodec.hg
annotate acelp_vectors.h @ 12483:0159a19bfff7 libavcodec
aacdec: Rework channel mapping compatibility hacks.
For a PCE based configuration map the channels solely based on tags.
For an indexed configuration map the channels solely based on position.
This works with all known exotic samples including al17, elem_id0, bad_concat,
and lfe_is_sce.
author | alexc |
---|---|
date | Fri, 10 Sep 2010 18:01:48 +0000 |
parents | 0885e7a93ed4 |
children |
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 |
7760 | 23 #ifndef AVCODEC_ACELP_VECTORS_H |
24 #define AVCODEC_ACELP_VECTORS_H | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
25 |
7044 | 26 #include <stdint.h> |
27 | |
10676 | 28 /** Sparse representation for the algebraic codebook (fixed) vector */ |
29 typedef struct { | |
30 int n; | |
31 int x[10]; | |
32 float y[10]; | |
11052
00fcecde822b
Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents:
10708
diff
changeset
|
33 int no_repeat_mask; |
10676 | 34 int pitch_lag; |
35 float pitch_fac; | |
36 } AMRFixed; | |
37 | |
7656 | 38 /** |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
39 * Track|Pulse| Positions |
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 | 0 | 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
|
42 * ------------------------------------------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
43 * 2 | 1 | 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
44 * ------------------------------------------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
45 * 3 | 2 | 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 72, 77 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
46 * ------------------------------------------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
47 * |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
48 * Table contains only first the pulse indexes. |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
49 * |
12058
dc394a1cc943
Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents:
11647
diff
changeset
|
50 * Used in G.729 @@8k, G.729 @@4.4k, AMR @@7.95k, AMR @@7.40k |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
51 */ |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
52 extern 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
|
53 |
7656 | 54 /** |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
55 * Track|Pulse| Positions |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
56 * ------------------------------------------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
57 * 4 | 3 | 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
58 * | | 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
59 * ------------------------------------------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
60 * |
7657 | 61 * @remark Track in the table should be read top-to-bottom, left-to-right. |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
62 * |
12058
dc394a1cc943
Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents:
11647
diff
changeset
|
63 * Used in G.729 @@8k, G.729 @@4.4k, AMR @@7.95k, AMR @@7.40k |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
64 */ |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
65 extern 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
|
66 |
7656 | 67 /** |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
68 * Track|Pulse| Positions |
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 * 1 | 0 | 1, 6, 11, 16, 21, 26, 31, 36 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
71 * | | 3, 8, 13, 18, 23, 28, 33, 38 |
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 * |
7657 | 74 * @remark Track in the table should be read top-to-bottom, left-to-right. |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
75 * |
7657 | 76 * @note (EE) Reference G.729D code also uses gray decoding for each |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
77 * pulse index before looking up the value in the table. |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
78 * |
12058
dc394a1cc943
Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents:
11647
diff
changeset
|
79 * Used in G.729 @@6.4k (with gray coding), AMR @@5.9k (without gray coding) |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
80 */ |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
81 extern const uint8_t ff_fc_2pulses_9bits_track1[16]; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
82 extern 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
|
83 |
7656 | 84 /** |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
85 * Track|Pulse| Positions |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
86 * ----------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
87 * 2 | 1 | 0, 7, 14, 20, 27, 34, 1, 21 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
88 * | | 2, 9, 15, 22, 29, 35, 6, 26 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
89 * | | 4,10, 17, 24, 30, 37, 11, 31 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
90 * | | 5,12, 19, 25, 32, 39, 16, 36 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
91 * ----------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
92 * |
7657 | 93 * @remark Track in the table should be read top-to-bottom, left-to-right. |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
94 * |
7657 | 95 * @note (EE.1) This table (from the reference code) does not comply with |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
96 * the specification. |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
97 * The specification contains the following table: |
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 * Track|Pulse| Positions |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
100 * ----------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
101 * 2 | 1 | 0, 5, 10, 15, 20, 25, 30, 35 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
102 * | | 1, 6, 11, 16, 21, 26, 31, 36 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
103 * | | 2, 7, 12, 17, 22, 27, 32, 37 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
104 * | | 4, 9, 14, 19, 24, 29, 34, 39 |
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 * ----------------------------------------- |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
107 * |
7657 | 108 * @note (EE.2) Reference G.729D code also uses gray decoding for each |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
109 * pulse index before looking up the value in the table. |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
110 * |
12058
dc394a1cc943
Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents:
11647
diff
changeset
|
111 * Used in G.729 @@6.4k (with gray coding) |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
112 */ |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
113 extern 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
|
114 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
115 /** |
10698 | 116 * b60 hamming windowed sinc function coefficients |
117 */ | |
118 extern const float ff_b60_sinc[61]; | |
119 | |
120 /** | |
121 * Table of pow(0.7,n) | |
122 */ | |
123 extern const float ff_pow_0_7[10]; | |
124 | |
125 /** | |
126 * Table of pow(0.75,n) | |
127 */ | |
128 extern const float ff_pow_0_75[10]; | |
129 | |
130 /** | |
131 * Table of pow(0.55,n) | |
132 */ | |
133 extern const float ff_pow_0_55[10]; | |
134 | |
135 /** | |
7657 | 136 * Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR). |
12181 | 137 * @param[out] fc_v decoded fixed codebook vector (2.13) |
7657 | 138 * @param tab1 table used for first pulse_count pulses |
139 * @param tab2 table used for last pulse | |
140 * @param pulse_indexes fixed codebook indexes | |
141 * @param pulse_signs signs of the excitation pulses (0 bit value | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
142 * means negative sign) |
7657 | 143 * @param bits number of bits per one pulse index |
144 * @param pulse_count number of pulses decoded using first table | |
145 * @param bits length of one pulse index in bits | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
146 * |
12058
dc394a1cc943
Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents:
11647
diff
changeset
|
147 * Used in G.729 @@8k, G.729 @@4.4k, G.729 @@6.4k, AMR @@7.95k, AMR @@7.40k |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
148 */ |
10708 | 149 void ff_acelp_fc_pulse_per_track(int16_t* fc_v, |
150 const uint8_t *tab1, | |
151 const uint8_t *tab2, | |
152 int pulse_indexes, | |
153 int pulse_signs, | |
154 int pulse_count, | |
155 int bits); | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
156 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
157 /** |
10676 | 158 * Decode the algebraic codebook index to pulse positions and signs and |
159 * construct the algebraic codebook vector for MODE_12k2. | |
160 * | |
161 * @note: The positions and signs are explicitly coded in MODE_12k2. | |
162 * | |
163 * @param fixed_index positions of the ten pulses | |
164 * @param fixed_sparse pointer to the algebraic codebook vector | |
165 * @param gray_decode gray decoding table | |
166 * @param half_pulse_count number of couples of pulses | |
167 * @param bits length of one pulse index in bits | |
168 */ | |
169 void ff_decode_10_pulses_35bits(const int16_t *fixed_index, | |
170 AMRFixed *fixed_sparse, | |
171 const uint8_t *gray_decode, | |
172 int half_pulse_count, int bits); | |
173 | |
174 | |
175 /** | |
7657 | 176 * weighted sum of two vectors with rounding. |
12181 | 177 * @param[out] out result of addition |
7657 | 178 * @param in_a first vector |
179 * @param in_b second vector | |
180 * @param weight_coeff_a first vector weight coefficient | |
181 * @param weight_coeff_a second vector weight coefficient | |
182 * @param rounder this value will be added to the sum of the two vectors | |
183 * @param shift result will be shifted to right by this value | |
184 * @param length vectors length | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
185 * |
7657 | 186 * @note It is safe to pass the same buffer for out and in_a or in_b. |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
187 * |
7658
152d97e263f5
Make equation in doxy of ff_acelp_weighted_vector_sum() more readable by
michael
parents:
7657
diff
changeset
|
188 * out[i] = (in_a[i]*weight_a + in_b[i]*weight_b + rounder) >> shift |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
189 */ |
10708 | 190 void ff_acelp_weighted_vector_sum(int16_t* out, |
191 const int16_t *in_a, | |
192 const int16_t *in_b, | |
193 int16_t weight_coeff_a, | |
194 int16_t weight_coeff_b, | |
195 int16_t rounder, | |
196 int shift, | |
197 int length); | |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
198 |
9156
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
199 /** |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
200 * float implementation of weighted sum of two vectors. |
12181 | 201 * @param[out] out result of addition |
9156
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
202 * @param in_a first vector |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
203 * @param in_b second vector |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
204 * @param weight_coeff_a first vector weight coefficient |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
205 * @param weight_coeff_a second vector weight coefficient |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
206 * @param length vectors length |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
207 * |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
208 * @note It is safe to pass the same buffer for out and in_a or in_b. |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
209 */ |
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
210 void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b, |
10708 | 211 float weight_coeff_a, float weight_coeff_b, |
212 int length); | |
9156
139d30c8c274
Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents:
7760
diff
changeset
|
213 |
10463
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
214 /** |
11462 | 215 * Adaptive gain control (as used in AMR postfiltering) |
10463
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
216 * |
11647
26aabf52f578
Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents:
11462
diff
changeset
|
217 * @param out output buffer for filtered speech data |
26aabf52f578
Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents:
11462
diff
changeset
|
218 * @param in the input speech buffer (may be the same as out) |
10463
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
219 * @param speech_energ input energy |
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
220 * @param size the input buffer size |
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
221 * @param alpha exponential filter factor |
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
222 * @param gain_mem a pointer to the filter memory (single float of size) |
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
223 */ |
11647
26aabf52f578
Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents:
11462
diff
changeset
|
224 void ff_adaptive_gain_control(float *out, const float *in, float speech_energ, |
11462 | 225 int size, float alpha, float *gain_mem); |
10463
9f35b262d3f0
Commit some functions that are used by both SIPR and AMR.
vitor
parents:
9156
diff
changeset
|
226 |
10493
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
227 /** |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
228 * Set the sum of squares of a signal by scaling |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
229 * |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
230 * @param out output samples |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
231 * @param in input samples |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
232 * @param sum_of_squares new sum of squares |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
233 * @param n number of samples |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
234 * |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
235 * @note If the input is zero (or its energy underflows), the output is zero. |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
236 * This is the behavior of AGC in the AMR reference decoder. The QCELP |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
237 * reference decoder seems to have undefined behavior. |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
238 * |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
239 * TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6 |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
240 * 3GPP TS 26.090 6.1 (6) |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
241 */ |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
242 void ff_scale_vector_to_given_sum_of_squares(float *out, const float *in, |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
243 float sum_of_squares, const int n); |
5f2ced30548b
Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents:
10463
diff
changeset
|
244 |
10676 | 245 /** |
246 * Add fixed vector to an array from a sparse representation | |
247 * | |
248 * @param out fixed vector with pitch sharpening | |
249 * @param in sparse fixed vector | |
250 * @param scale number to multiply the fixed vector by | |
251 * @param size the output vector size | |
252 */ | |
253 void ff_set_fixed_vector(float *out, const AMRFixed *in, float scale, int size); | |
254 | |
255 /** | |
256 * Clear array values set by set_fixed_vector | |
257 * | |
258 * @param out fixed vector to be cleared | |
259 * @param in sparse fixed vector | |
260 * @param size the output vector size | |
261 */ | |
262 void ff_clear_fixed_vector(float *out, const AMRFixed *in, int size); | |
263 | |
7760 | 264 #endif /* AVCODEC_ACELP_VECTORS_H */ |