annotate acelp_vectors.c @ 9473:e38284cd69dc libavcodec

Use memcpy instead of the very inefficient bytecopy where both are correct (i.e. no overlap of src and dst is possible).
author reimar
date Fri, 17 Apr 2009 17:20:48 +0000
parents 139d30c8c274
children 9f35b262d3f0
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"
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 }
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
148
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
149 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
150 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
151 {
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
152 int i;
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
153
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
154 for(i=0; i<length; i++)
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
155 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
156 + weight_coeff_b * in_b[i];
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 6905
diff changeset
157 }