annotate acelp_vectors.h @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 0885e7a93ed4
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
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
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
28 /** Sparse representation for the algebraic codebook (fixed) vector */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
29 typedef struct {
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
30 int n;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
31 int x[10];
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
32 float y[10];
11052
00fcecde822b Add no_repeat_mask option, so that single-pulse vectors can also be
rbultje
parents: 10708
diff changeset
33 int no_repeat_mask;
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
34 int pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
35 float pitch_fac;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
36 } AMRFixed;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
37
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
38 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
39 * Track|Pulse| Positions
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 | 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
42 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
43 * 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
44 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
45 * 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
46 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
47 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
48 * Table contains only first the pulse indexes.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
49 *
12058
dc394a1cc943 Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents: 11647
diff changeset
50 * Used in G.729 @@8k, G.729 @@4.4k, AMR @@7.95k, AMR @@7.40k
6846
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 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
53
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
54 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
55 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
56 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
57 * 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
58 * | | 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
59 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
60 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
61 * @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
62 *
12058
dc394a1cc943 Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents: 11647
diff changeset
63 * Used in G.729 @@8k, G.729 @@4.4k, AMR @@7.95k, AMR @@7.40k
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
64 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
65 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
66
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
67 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
68 * Track|Pulse| Positions
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 * 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
71 * | | 3, 8, 13, 18, 23, 28, 33, 38
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 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
74 * @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
75 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
76 * @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
77 * 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
78 *
12058
dc394a1cc943 Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents: 11647
diff changeset
79 * 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
80 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
81 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
82 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
83
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
84 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
85 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
86 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
87 * 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
88 * | | 2, 9, 15, 22, 29, 35, 6, 26
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
89 * | | 4,10, 17, 24, 30, 37, 11, 31
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
90 * | | 5,12, 19, 25, 32, 39, 16, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
91 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
92 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
93 * @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
94 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
95 * @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
96 * the specification.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
97 * The specification contains the following table:
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 * Track|Pulse| Positions
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 * 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
102 * | | 1, 6, 11, 16, 21, 26, 31, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
103 * | | 2, 7, 12, 17, 22, 27, 32, 37
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
104 * | | 4, 9, 14, 19, 24, 29, 34, 39
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
105 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
106 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
107 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
108 * @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
109 * 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
110 *
12058
dc394a1cc943 Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents: 11647
diff changeset
111 * Used in G.729 @@6.4k (with gray coding)
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
112 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
113 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
114
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
115 /**
10698
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
116 * b60 hamming windowed sinc function coefficients
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
117 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
118 extern const float ff_b60_sinc[61];
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 * Table of pow(0.7,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
122 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
123 extern const float ff_pow_0_7[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
124
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
125 /**
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
126 * Table of pow(0.75,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
127 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
128 extern const float ff_pow_0_75[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
129
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
130 /**
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
131 * Table of pow(0.55,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
132 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
133 extern const float ff_pow_0_55[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
134
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
135 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
136 * Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR).
12181
0885e7a93ed4 Fix Doxygen @param command attribute syntax.
diego
parents: 12058
diff changeset
137 * @param[out] fc_v decoded fixed codebook vector (2.13)
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
138 * @param tab1 table used for first pulse_count pulses
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
139 * @param tab2 table used for last pulse
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
140 * @param pulse_indexes fixed codebook indexes
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
141 * @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
142 * means negative sign)
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
143 * @param bits number of bits per one pulse index
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
144 * @param pulse_count number of pulses decoded using first table
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
145 * @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
146 *
12058
dc394a1cc943 Fix printing of '@' symbols in Doxygen comments; the correct syntax is '@@'.
diego
parents: 11647
diff changeset
147 * Used in G.729 @@8k, G.729 @@4.4k, G.729 @@6.4k, AMR @@7.95k, AMR @@7.40k
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
148 */
10708
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
149 void ff_acelp_fc_pulse_per_track(int16_t* fc_v,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
150 const uint8_t *tab1,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
151 const uint8_t *tab2,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
152 int pulse_indexes,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
153 int pulse_signs,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
154 int pulse_count,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
155 int bits);
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
156
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
157 /**
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
158 * Decode the algebraic codebook index to pulse positions and signs and
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
159 * construct the algebraic codebook vector for MODE_12k2.
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
160 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
161 * @note: The positions and signs are explicitly coded in MODE_12k2.
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
162 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
163 * @param fixed_index positions of the ten pulses
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
164 * @param fixed_sparse pointer to the algebraic codebook vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
165 * @param gray_decode gray decoding table
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
166 * @param half_pulse_count number of couples of pulses
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
167 * @param bits length of one pulse index in bits
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
168 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
169 void ff_decode_10_pulses_35bits(const int16_t *fixed_index,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
170 AMRFixed *fixed_sparse,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
171 const uint8_t *gray_decode,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
172 int half_pulse_count, int bits);
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
173
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
174
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
175 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
176 * weighted sum of two vectors with rounding.
12181
0885e7a93ed4 Fix Doxygen @param command attribute syntax.
diego
parents: 12058
diff changeset
177 * @param[out] out result of addition
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
178 * @param in_a first vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
179 * @param in_b second vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
180 * @param weight_coeff_a first vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
181 * @param weight_coeff_a second vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
182 * @param rounder this value will be added to the sum of the two vectors
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
183 * @param shift result will be shifted to right by this value
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
184 * @param length vectors length
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
185 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
186 * @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
187 *
7658
152d97e263f5 Make equation in doxy of ff_acelp_weighted_vector_sum() more readable by
michael
parents: 7657
diff changeset
188 * 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
189 */
10708
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
190 void ff_acelp_weighted_vector_sum(int16_t* out,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
191 const int16_t *in_a,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
192 const int16_t *in_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
193 int16_t weight_coeff_a,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
194 int16_t weight_coeff_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
195 int16_t rounder,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
196 int shift,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
197 int length);
6846
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: 7760
diff changeset
199 /**
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
200 * float implementation of weighted sum of two vectors.
12181
0885e7a93ed4 Fix Doxygen @param command attribute syntax.
diego
parents: 12058
diff changeset
201 * @param[out] out result of addition
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
202 * @param in_a first vector
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
203 * @param in_b second vector
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
204 * @param weight_coeff_a first vector weight coefficient
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
205 * @param weight_coeff_a second vector weight coefficient
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
206 * @param length vectors length
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
207 *
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
208 * @note It is safe to pass the same buffer for out and in_a or in_b.
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
209 */
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
210 void ff_weighted_vector_sumf(float *out, const float *in_a, const float *in_b,
10708
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
211 float weight_coeff_a, float weight_coeff_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
212 int length);
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
213
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
214 /**
11462
c2e19a511e26 Fix spelling.
rbultje
parents: 11052
diff changeset
215 * Adaptive gain control (as used in AMR postfiltering)
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
216 *
11647
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
217 * @param out output buffer for filtered speech data
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
218 * @param in the input speech buffer (may be the same as out)
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
219 * @param speech_energ input energy
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
220 * @param size the input buffer size
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
221 * @param alpha exponential filter factor
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
222 * @param gain_mem a pointer to the filter memory (single float of size)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
223 */
11647
26aabf52f578 Split the input/output data arguments to ff_adaptive_gain_control().
rbultje
parents: 11462
diff changeset
224 void ff_adaptive_gain_control(float *out, const float *in, float speech_energ,
11462
c2e19a511e26 Fix spelling.
rbultje
parents: 11052
diff changeset
225 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
226
10493
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
227 /**
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
228 * Set the sum of squares of a signal by scaling
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
229 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
230 * @param out output samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
231 * @param in input samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
232 * @param sum_of_squares new sum of squares
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
233 * @param n number of samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
234 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
235 * @note If the input is zero (or its energy underflows), the output is zero.
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
236 * This is the behavior of AGC in the AMR reference decoder. The QCELP
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
237 * reference decoder seems to have undefined behavior.
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
238 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
239 * TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
240 * 3GPP TS 26.090 6.1 (6)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
241 */
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
242 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
243 float sum_of_squares, const int n);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
244
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
245 /**
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
246 * Add fixed vector to an array from a sparse representation
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
247 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
248 * @param out fixed vector with pitch sharpening
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
249 * @param in sparse fixed vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
250 * @param scale number to multiply the fixed vector by
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
251 * @param size the output vector size
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
252 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
253 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: 10493
diff changeset
254
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
255 /**
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
256 * Clear array values set by set_fixed_vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
257 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
258 * @param out fixed vector to be cleared
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
259 * @param in sparse fixed vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
260 * @param size the output vector size
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
261 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
262 void ff_clear_fixed_vector(float *out, const AMRFixed *in, int size);
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
263
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7658
diff changeset
264 #endif /* AVCODEC_ACELP_VECTORS_H */