Mercurial > libavcodec.hg
annotate acelp_vectors.c @ 7352:c2318e551ff5 libavcodec
When picking a "high utility centroid" do not pick one
that has no corresponding points. Not only it is the
worst possible pick, but also the code was written
without this case in mind.
author | vitor |
---|---|
date | Wed, 23 Jul 2008 03:55:37 +0000 |
parents | d163c4f3f4ab |
children | 139d30c8c274 |
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" |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
26 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
27 const uint8_t ff_fc_2pulses_9bits_track1[16] = |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
28 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
29 1, 3, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
30 6, 8, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
31 11, 13, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
32 16, 18, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
33 21, 23, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
34 26, 28, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
35 31, 33, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
36 36, 38 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
37 }; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
38 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
|
39 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
40 1, 3, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
41 8, 6, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
42 18, 16, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
43 11, 13, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
44 38, 36, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
45 31, 33, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
46 21, 23, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
47 28, 26, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
48 }; |
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 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
|
51 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
52 0, 2, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
53 5, 4, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
54 12, 10, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
55 7, 9, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
56 25, 24, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
57 20, 22, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
58 14, 15, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
59 19, 17, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
60 36, 31, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
61 21, 26, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
62 1, 6, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
63 16, 11, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
64 27, 29, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
65 32, 30, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
66 39, 37, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
67 34, 35, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
68 }; |
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 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
|
71 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
72 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
|
73 }; |
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 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
|
76 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
77 3, 4, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
78 8, 9, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
79 13, 14, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
80 18, 19, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
81 23, 24, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
82 28, 29, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
83 33, 34, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
84 38, 39, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
85 43, 44, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
86 48, 49, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
87 53, 54, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
88 58, 59, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
89 63, 64, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
90 68, 69, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
91 73, 74, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
92 78, 79, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
93 }; |
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 #if 0 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
96 static uint8_t gray_decode[32] = |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
97 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
98 0, 1, 3, 2, 7, 6, 4, 5, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
99 15, 14, 12, 13, 8, 9, 11, 10, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
100 31, 30, 28, 29, 24, 25, 27, 26, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
101 16, 17, 19, 18, 23, 22, 20, 21 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
102 }; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
103 #endif |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
104 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
105 void ff_acelp_fc_pulse_per_track( |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
106 int16_t* fc_v, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
107 const uint8_t *tab1, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
108 const uint8_t *tab2, |
6905
d163c4f3f4ab
consistency cosmetics: indices --> indexes in variable names
diego
parents:
6846
diff
changeset
|
109 int pulse_indexes, |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
110 int pulse_signs, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
111 int pulse_count, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
112 int bits) |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
113 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
114 int mask = (1 << bits) - 1; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
115 int i; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
116 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
117 for(i=0; i<pulse_count; i++) |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
118 { |
6905
d163c4f3f4ab
consistency cosmetics: indices --> indexes in variable names
diego
parents:
6846
diff
changeset
|
119 fc_v[i + tab1[pulse_indexes & mask]] += |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
120 (pulse_signs & 1) ? 8191 : -8192; // +/-1 in (2.13) |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
121 |
6905
d163c4f3f4ab
consistency cosmetics: indices --> indexes in variable names
diego
parents:
6846
diff
changeset
|
122 pulse_indexes >>= bits; |
6846
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
123 pulse_signs >>= 1; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
124 } |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
125 |
6905
d163c4f3f4ab
consistency cosmetics: indices --> indexes in variable names
diego
parents:
6846
diff
changeset
|
126 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
|
127 } |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
128 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
129 void ff_acelp_weighted_vector_sum( |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
130 int16_t* out, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
131 const int16_t *in_a, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
132 const int16_t *in_b, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
133 int16_t weight_coeff_a, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
134 int16_t weight_coeff_b, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
135 int16_t rounder, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
136 int shift, |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
137 int length) |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
138 { |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
139 int i; |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
140 |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
141 // Clipping required here; breaks OVERFLOW test. |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
142 for(i=0; i<length; i++) |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
143 out[i] = av_clip_int16(( |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
144 in_a[i] * weight_coeff_a + |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
145 in_b[i] * weight_coeff_b + |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
146 rounder) >> shift); |
4346441afca6
adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff
changeset
|
147 } |