annotate acelp_vectors.c @ 12197:fbf4d5b1b664 libavcodec

Remove FF_MM_SSE2/3 flags for CPUs where this is generally not faster than regular MMX code. Examples of this are the Core1 CPU. Instead, set a new flag, FF_MM_SSE2/3SLOW, which can be checked for particular SSE2/3 functions that have been checked specifically on such CPUs and are actually faster than their MMX counterparts. In addition, use this flag to enable particular VP8 and LPC SSE2 functions that are faster than their MMX counterparts. Based on a patch by Loren Merritt <lorenm AT u washington edu>.
author rbultje
date Mon, 19 Jul 2010 22:38:23 +0000
parents 26aabf52f578
children
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
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 11044
diff changeset
167 fixed_sparse->no_repeat_mask = 0;
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
168 fixed_sparse->n = 2 * half_pulse_count;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
169 for (i = 0; i < half_pulse_count; i++) {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
170 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
171 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
172 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
173 fixed_sparse->x[2*i+1] = pos1;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
174 fixed_sparse->x[2*i ] = pos2;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
175 fixed_sparse->y[2*i+1] = sign;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
176 fixed_sparse->y[2*i ] = pos2 < pos1 ? -sign : sign;
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 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
179
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
180 void ff_acelp_weighted_vector_sum(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
181 int16_t* out,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
182 const int16_t *in_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
183 const int16_t *in_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
184 int16_t weight_coeff_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
185 int16_t weight_coeff_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
186 int16_t rounder,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
187 int shift,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
188 int length)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
189 {
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
190 int i;
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
191
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
192 // Clipping required here; breaks OVERFLOW test.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
193 for(i=0; i<length; i++)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
194 out[i] = av_clip_int16((
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
195 in_a[i] * weight_coeff_a +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
196 in_b[i] * weight_coeff_b +
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
197 rounder) >> shift);
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: 6905
diff changeset
199
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
200 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
201 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
202 {
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
203 int i;
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
204
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
205 for(i=0; i<length; i++)
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
206 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
207 + weight_coeff_b * in_b[i];
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
208 }
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
209
11647
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
210 void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
11462
c2e19a511e26 Fix spelling.
rbultje
parents: 11052
diff changeset
211 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
212 {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
213 int i;
11647
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
214 float postfilter_energ = ff_dot_productf(in, in, size);
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
215 float gain_scale_factor = 1.0;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
216 float mem = *gain_mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
217
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
218 if (postfilter_energ)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
219 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
220
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
221 gain_scale_factor *= 1.0 - alpha;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
222
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
223 for (i = 0; i < size; i++) {
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
224 mem = alpha * mem + gain_scale_factor;
11647
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
225 out[i] = in[i] * mem;
10463
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
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
228 *gain_mem = mem;
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
229 }
10493
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
230
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
231 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
232 float sum_of_squares, const int n)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
233 {
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
234 int i;
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
235 float scalefactor = ff_dot_productf(in, in, n);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
236 if (scalefactor)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
237 scalefactor = sqrt(sum_of_squares / scalefactor);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
238 for (i = 0; i < n; i++)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
239 out[i] = in[i] * scalefactor;
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
240 }
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
241
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
242 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
243 {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
244 int i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
245
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
246 for (i=0; i < in->n; i++) {
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 11044
diff changeset
247 int x = in->x[i], repeats = !((in->no_repeat_mask >> i) & 1);
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
248 float y = in->y[i] * scale;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
249
11044
3f66d1d80e03 Simplify. See "[PATCH] simplify ff_set_fixed_vector()" thread on mailinglist.
rbultje
parents: 10698
diff changeset
250 do {
3f66d1d80e03 Simplify. See "[PATCH] simplify ff_set_fixed_vector()" thread on mailinglist.
rbultje
parents: 10698
diff changeset
251 out[x] += y;
10676
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 x += in->pitch_lag;
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 11044
diff changeset
254 } while (x < size && repeats);
10676
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 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
259 {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
260 int i;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
261
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
262 for (i=0; i < in->n; i++) {
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 11044
diff changeset
263 int x = in->x[i], repeats = !((in->no_repeat_mask >> i) & 1);
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
264
11044
3f66d1d80e03 Simplify. See "[PATCH] simplify ff_set_fixed_vector()" thread on mailinglist.
rbultje
parents: 10698
diff changeset
265 do {
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
266 out[x] = 0.0;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
267 x += in->pitch_lag;
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 11044
diff changeset
268 } while (x < size && repeats);
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
269 }
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10495
diff changeset
270 }