annotate acelp_vectors.c @ 10893:2aafcafbe1f0 libavcodec

Replace cabac checks in inline functions from h264.h with constants. No benchmark because its just replacing variables with litteral constants (so no risk for slowdown outside gcc silliness) and i need sleep.
author michael
date Sat, 16 Jan 2010 05:41:33 +0000
parents 608d19b30fa3
children 3f66d1d80e03
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
10698
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
106 const float ff_pow_0_7[10] = {
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
107 0.700000, 0.490000, 0.343000, 0.240100, 0.168070,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
108 0.117649, 0.082354, 0.057648, 0.040354, 0.028248
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
109 };
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
110
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
111 const float ff_pow_0_75[10] = {
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
112 0.750000, 0.562500, 0.421875, 0.316406, 0.237305,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
113 0.177979, 0.133484, 0.100113, 0.075085, 0.056314
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
114 };
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
115
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
116 const float ff_pow_0_55[10] = {
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
117 0.550000, 0.302500, 0.166375, 0.091506, 0.050328,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
118 0.027681, 0.015224, 0.008373, 0.004605, 0.002533
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
119 };
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
120
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
121 const float ff_b60_sinc[61] = {
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
122 0.898529 , 0.865051 , 0.769257 , 0.624054 , 0.448639 , 0.265289 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
123 0.0959167 , -0.0412598 , -0.134338 , -0.178986 , -0.178528 , -0.142609 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
124 -0.0849304 , -0.0205078 , 0.0369568 , 0.0773926 , 0.0955200 , 0.0912781 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
125 0.0689392 , 0.0357056 , 0. , -0.0305481 , -0.0504150 , -0.0570068 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
126 -0.0508423 , -0.0350037 , -0.0141602 , 0.00665283, 0.0230713 , 0.0323486 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
127 0.0335388 , 0.0275879 , 0.0167847 , 0.00411987, -0.00747681, -0.0156860 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
128 -0.0193481 , -0.0183716 , -0.0137634 , -0.00704956, 0. , 0.00582886 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
129 0.00939941, 0.0103760 , 0.00903320, 0.00604248, 0.00238037, -0.00109863 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
130 -0.00366211, -0.00497437, -0.00503540, -0.00402832, -0.00241089, -0.000579834,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
131 0.00103760, 0.00222778, 0.00277710, 0.00271606, 0.00213623, 0.00115967 ,
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
132 0.
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
133 };
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
134
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
135 void ff_acelp_fc_pulse_per_track(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
136 int16_t* fc_v,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
137 const uint8_t *tab1,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
138 const uint8_t *tab2,
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
139 int pulse_indexes,
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
140 int pulse_signs,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
141 int pulse_count,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
142 int bits)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
143 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
144 int mask = (1 << bits) - 1;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
145 int i;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
146
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
147 for(i=0; i<pulse_count; i++)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
148 {
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
149 fc_v[i + tab1[pulse_indexes & mask]] +=
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
150 (pulse_signs & 1) ? 8191 : -8192; // +/-1 in (2.13)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
151
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
152 pulse_indexes >>= bits;
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
153 pulse_signs >>= 1;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
154 }
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
155
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6846
diff changeset
156 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
157 }
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
158
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
159 void ff_decode_10_pulses_35bits(const int16_t *fixed_index,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
160 AMRFixed *fixed_sparse,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
161 const uint8_t *gray_decode,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
162 int half_pulse_count, int bits)
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
163 {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
164 int i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
165 int mask = (1 << bits) - 1;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
166
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
167 fixed_sparse->n = 2 * half_pulse_count;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
168 for (i = 0; i < half_pulse_count; i++) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
169 const int pos1 = gray_decode[fixed_index[2*i+1] & mask] + i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
170 const int pos2 = gray_decode[fixed_index[2*i ] & mask] + i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
171 const float sign = (fixed_index[2*i+1] & (1 << bits)) ? -1.0 : 1.0;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
172 fixed_sparse->x[2*i+1] = pos1;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
173 fixed_sparse->x[2*i ] = pos2;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
174 fixed_sparse->y[2*i+1] = sign;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
175 fixed_sparse->y[2*i ] = pos2 < pos1 ? -sign : sign;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
176 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
177 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
178
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
179 void ff_acelp_weighted_vector_sum(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
180 int16_t* out,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
181 const int16_t *in_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
182 const int16_t *in_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
183 int16_t weight_coeff_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
184 int16_t weight_coeff_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
185 int16_t rounder,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
186 int shift,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
187 int length)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
188 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
189 int i;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
190
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
191 // Clipping required here; breaks OVERFLOW test.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
192 for(i=0; i<length; i++)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
193 out[i] = av_clip_int16((
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
194 in_a[i] * weight_coeff_a +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
195 in_b[i] * weight_coeff_b +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
196 rounder) >> shift);
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
197 }
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
198
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
199 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
200 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
201 {
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
202 int i;
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
203
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
204 for(i=0; i<length; i++)
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
205 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
206 + weight_coeff_b * in_b[i];
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
207 }
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
208
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
209 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
210 int size, float alpha, float *gain_mem)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
211 {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
212 int i;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
213 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
214 float gain_scale_factor = 1.0;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
215 float mem = *gain_mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
216
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
217 if (postfilter_energ)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
218 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
219
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
220 gain_scale_factor *= 1.0 - alpha;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
221
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
222 for (i = 0; i < size; i++) {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
223 mem = alpha * mem + gain_scale_factor;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
224 buf_out[i] *= mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
225 }
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
226
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
227 *gain_mem = mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
228 }
10493
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 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
231 float sum_of_squares, const int n)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
232 {
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
233 int i;
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
234 float scalefactor = ff_dot_productf(in, in, n);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
235 if (scalefactor)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
236 scalefactor = sqrt(sum_of_squares / scalefactor);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
237 for (i = 0; i < n; i++)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
238 out[i] = in[i] * scalefactor;
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
239 }
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
240
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
241 void ff_set_fixed_vector(float *out, const AMRFixed *in, float scale, int size)
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
242 {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
243 int i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
244
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
245 for (i=0; i < in->n; i++) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
246 int x = in->x[i];
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
247 float y = in->y[i] * scale;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
248 out[x] += y;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
249
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
250 x += in->pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
251 while (x < size) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
252 y *= in->pitch_fac;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
253 out[x] += y;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
254 x += in->pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
255 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
256 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
257 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
258
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
259 void ff_clear_fixed_vector(float *out, const AMRFixed *in, int size)
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
260 {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
261 int i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
262
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
263 for (i=0; i < in->n; i++) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
264 int x = in->x[i];
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
265 out[x] = 0.0;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
266
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
267 x += in->pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
268 while (x < size) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
269 out[x] = 0.0;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
270 x += in->pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
271 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
272 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
273 }