annotate acelp_vectors.h @ 8520:a0164882aa38 libavcodec

Generic metadata API. avi is updated as example. No version bump, the API still might change slightly ... No update to ffmpeg.c as requested by aurel.
author michael
date Sun, 04 Jan 2009 18:48:37 +0000
parents c4a4495715dd
children 139d30c8c274
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
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7658
diff changeset
23 #ifndef AVCODEC_ACELP_VECTORS_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7658
diff changeset
24 #define AVCODEC_ACELP_VECTORS_H
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
25
7044
ab9533fb9335 Add missing #includes to fix 'make checkheaders'.
diego
parents: 6905
diff changeset
26 #include <stdint.h>
ab9533fb9335 Add missing #includes to fix 'make checkheaders'.
diego
parents: 6905
diff changeset
27
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
28 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
29 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
30 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
31 * 1 | 0 | 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
32 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
33 * 2 | 1 | 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
34 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
35 * 3 | 2 | 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 72, 77
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
36 * -------------------------------------------------------------------------
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 * Table contains only first the pulse indexes.
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 * Used in G.729 @8k, G.729 @4.4k, AMR @7.95k, AMR @7.40k
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
41 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
42 extern const uint8_t ff_fc_4pulses_8bits_tracks_13[16];
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
43
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
44 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
45 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
46 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
47 * 4 | 3 | 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
48 * | | 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
49 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
50 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
51 * @remark Track in the table should be read top-to-bottom, left-to-right.
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
52 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
53 * Used in G.729 @8k, G.729 @4.4k, AMR @7.95k, AMR @7.40k
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
54 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
55 extern const uint8_t ff_fc_4pulses_8bits_track_4[32];
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
56
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
57 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
58 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
59 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
60 * 1 | 0 | 1, 6, 11, 16, 21, 26, 31, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
61 * | | 3, 8, 13, 18, 23, 28, 33, 38
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
62 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
63 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
64 * @remark Track in the table should be read top-to-bottom, left-to-right.
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
65 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
66 * @note (EE) Reference G.729D code also uses gray decoding for each
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
67 * pulse index before looking up the value in the table.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
68 *
7248
37dd0809921a Correct a couple of typos
superdump
parents: 7044
diff changeset
69 * Used in G.729 @6.4k (with gray coding), AMR @5.9k (without gray coding)
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
70 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
71 extern const uint8_t ff_fc_2pulses_9bits_track1[16];
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
72 extern const uint8_t ff_fc_2pulses_9bits_track1_gray[16];
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
73
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
74 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
75 * Track|Pulse| Positions
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 * 2 | 1 | 0, 7, 14, 20, 27, 34, 1, 21
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
78 * | | 2, 9, 15, 22, 29, 35, 6, 26
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
79 * | | 4,10, 17, 24, 30, 37, 11, 31
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
80 * | | 5,12, 19, 25, 32, 39, 16, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
81 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
82 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
83 * @remark Track in the table should be read top-to-bottom, left-to-right.
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
84 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
85 * @note (EE.1) This table (from the reference code) does not comply with
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
86 * the specification.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
87 * The specification contains the following table:
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
88 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
89 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
90 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
91 * 2 | 1 | 0, 5, 10, 15, 20, 25, 30, 35
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
92 * | | 1, 6, 11, 16, 21, 26, 31, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
93 * | | 2, 7, 12, 17, 22, 27, 32, 37
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
94 * | | 4, 9, 14, 19, 24, 29, 34, 39
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 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
97 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
98 * @note (EE.2) Reference G.729D code also uses gray decoding for each
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
99 * pulse index before looking up the value in the table.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
100 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
101 * Used in G.729 @6.4k (with gray coding)
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 extern const uint8_t ff_fc_2pulses_9bits_track2_gray[32];
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
104
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
105 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
106 * Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR).
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
107 * @param fc_v [out] decoded fixed codebook vector (2.13)
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
108 * @param tab1 table used for first pulse_count pulses
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
109 * @param tab2 table used for last pulse
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
110 * @param pulse_indexes fixed codebook indexes
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
111 * @param pulse_signs signs of the excitation pulses (0 bit value
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
112 * means negative sign)
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
113 * @param bits number of bits per one pulse index
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
114 * @param pulse_count number of pulses decoded using first table
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
115 * @param bits length of one pulse index in bits
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
116 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
117 * Used in G.729 @8k, G.729 @4.4k, G.729 @6.4k, AMR @7.95k, AMR @7.40k
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
118 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
119 void ff_acelp_fc_pulse_per_track(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
120 int16_t* fc_v,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
121 const uint8_t *tab1,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
122 const uint8_t *tab2,
6905
d163c4f3f4ab consistency cosmetics: indices --> indexes in variable names
diego
parents: 6903
diff changeset
123 int pulse_indexes,
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
124 int pulse_signs,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
125 int pulse_count,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
126 int bits);
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 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
129 * weighted sum of two vectors with rounding.
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
130 * @param out [out] result of addition
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
131 * @param in_a first vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
132 * @param in_b second vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
133 * @param weight_coeff_a first vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
134 * @param weight_coeff_a second vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
135 * @param rounder this value will be added to the sum of the two vectors
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
136 * @param shift result will be shifted to right by this value
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
137 * @param length vectors length
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
138 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
139 * @note It is safe to pass the same buffer for out and in_a or in_b.
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
140 *
7658
152d97e263f5 Make equation in doxy of ff_acelp_weighted_vector_sum() more readable by
michael
parents: 7657
diff changeset
141 * out[i] = (in_a[i]*weight_a + in_b[i]*weight_b + rounder) >> shift
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
142 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
143 void ff_acelp_weighted_vector_sum(
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
144 int16_t* out,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
145 const int16_t *in_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
146 const int16_t *in_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
147 int16_t weight_coeff_a,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
148 int16_t weight_coeff_b,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
149 int16_t rounder,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
150 int shift,
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
151 int length);
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
152
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7658
diff changeset
153 #endif /* AVCODEC_ACELP_VECTORS_H */