annotate acelp_vectors.h @ 10948:c80f0dfbf47d libavcodec

Only calculate the second chroma qp if it differs from the firstin the main loop filter. (a little faster for the common case where they are equal)
author michael
date Wed, 20 Jan 2010 01:49:24 +0000
parents 2da0262d550b
children 00fcecde822b
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];
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
33 int pitch_lag;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
34 float pitch_fac;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
35 } AMRFixed;
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
36
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
37 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
38 * Track|Pulse| Positions
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 | 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
41 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
42 * 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
43 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
44 * 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
45 * -------------------------------------------------------------------------
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 * Table contains only first the pulse indexes.
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 * 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
50 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
51 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
52
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
53 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
54 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
55 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
56 * 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
57 * | | 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
58 * -------------------------------------------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
59 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
60 * @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
61 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
62 * 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
63 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
64 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
65
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
66 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
67 * Track|Pulse| Positions
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 * 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
70 * | | 3, 8, 13, 18, 23, 28, 33, 38
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 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
73 * @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
74 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
75 * @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
76 * 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
77 *
7248
37dd0809921a Correct a couple of typos
superdump
parents: 7044
diff changeset
78 * 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
79 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
80 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
81 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
82
7656
bf3f37d70597 Make comments doxygen compatible.
michael
parents: 7248
diff changeset
83 /**
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
84 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
85 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
86 * 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
87 * | | 2, 9, 15, 22, 29, 35, 6, 26
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
88 * | | 4,10, 17, 24, 30, 37, 11, 31
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
89 * | | 5,12, 19, 25, 32, 39, 16, 36
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 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
92 * @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
93 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
94 * @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
95 * the specification.
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
96 * The specification contains the following table:
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 * Track|Pulse| Positions
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
99 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
100 * 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
101 * | | 1, 6, 11, 16, 21, 26, 31, 36
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
102 * | | 2, 7, 12, 17, 22, 27, 32, 37
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
103 * | | 4, 9, 14, 19, 24, 29, 34, 39
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 * -----------------------------------------
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
106 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
107 * @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
108 * 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
109 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
110 * Used in G.729 @6.4k (with gray coding)
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
111 */
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
112 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
113
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
114 /**
10698
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
115 * b60 hamming windowed sinc function coefficients
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
116 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
117 extern const float ff_b60_sinc[61];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
118
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 * Table of pow(0.7,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
121 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
122 extern const float ff_pow_0_7[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
123
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 * Table of pow(0.75,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
126 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
127 extern const float ff_pow_0_75[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
128
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 * Table of pow(0.55,n)
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
131 */
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
132 extern const float ff_pow_0_55[10];
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
133
608d19b30fa3 Add tables used by both AMR-NB and SIPR
vitor
parents: 10676
diff changeset
134 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
135 * 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
136 * @param fc_v [out] decoded fixed codebook vector (2.13)
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
137 * @param tab1 table used for first pulse_count pulses
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
138 * @param tab2 table used for last pulse
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
139 * @param pulse_indexes fixed codebook indexes
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
140 * @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
141 * means negative sign)
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
142 * @param bits number of bits per one pulse index
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
143 * @param pulse_count number of pulses decoded using first table
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
144 * @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
145 *
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
146 * 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
147 */
10708
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
148 void ff_acelp_fc_pulse_per_track(int16_t* fc_v,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
149 const uint8_t *tab1,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
150 const uint8_t *tab2,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
151 int pulse_indexes,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
152 int pulse_signs,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
153 int pulse_count,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
154 int bits);
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
155
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
156 /**
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
157 * 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
158 * construct the algebraic codebook vector for MODE_12k2.
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
159 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
160 * @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
161 *
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
162 * @param fixed_index positions of the ten pulses
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
163 * @param fixed_sparse pointer to the algebraic codebook vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
164 * @param gray_decode gray decoding table
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
165 * @param half_pulse_count number of couples of pulses
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
166 * @param bits length of one pulse index in bits
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
167 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
168 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
169 AMRFixed *fixed_sparse,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
170 const uint8_t *gray_decode,
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
171 int half_pulse_count, int bits);
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
172
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 /**
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
175 * weighted sum of two vectors with rounding.
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
176 * @param out [out] result of addition
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
177 * @param in_a first vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
178 * @param in_b second vector
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
179 * @param weight_coeff_a first vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
180 * @param weight_coeff_a second vector weight coefficient
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
181 * @param rounder this value will be added to the sum of the two vectors
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
182 * @param shift result will be shifted to right by this value
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
183 * @param length vectors length
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
184 *
7657
c44919224bcd doxygen consistency
michael
parents: 7656
diff changeset
185 * @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
186 *
7658
152d97e263f5 Make equation in doxy of ff_acelp_weighted_vector_sum() more readable by
michael
parents: 7657
diff changeset
187 * 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
188 */
10708
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
189 void ff_acelp_weighted_vector_sum(int16_t* out,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
190 const int16_t *in_a,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
191 const int16_t *in_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
192 int16_t weight_coeff_a,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
193 int16_t weight_coeff_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
194 int16_t rounder,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
195 int shift,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
196 int length);
6846
4346441afca6 adaptive and fixed codebook vector operations for ACELP-based codecs
voroshil
parents:
diff changeset
197
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
198 /**
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
199 * float implementation of weighted sum of two vectors.
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
200 * @param out [out] result of addition
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
201 * @param in_a first vector
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
202 * @param in_b second vector
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
203 * @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
204 * @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
205 * @param length vectors length
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
206 *
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
207 * @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
208 */
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
209 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
210 float weight_coeff_a, float weight_coeff_b,
2da0262d550b cosmetics: Reformat some function declarations.
diego
parents: 10698
diff changeset
211 int length);
9156
139d30c8c274 Functional part Kenan Gillet's 'extract and share weighted_vector_sumf'
reynaldo
parents: 7760
diff changeset
212
10463
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
213 /**
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
214 * Adaptative gain control (as used in AMR postfiltering)
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
215 *
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
216 * @param buf_out the input speech buffer
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
217 * @param speech_energ input energy
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
218 * @param size the input buffer size
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
219 * @param alpha exponential filter factor
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
220 * @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
221 */
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
222 void ff_adaptative_gain_control(float *buf_out, float speech_energ,
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
223 int size, float alpha, float *gain_mem);
9f35b262d3f0 Commit some functions that are used by both SIPR and AMR.
vitor
parents: 9156
diff changeset
224
10493
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
225 /**
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
226 * 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
227 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
228 * @param out output samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
229 * @param in input samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
230 * @param sum_of_squares new sum of squares
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
231 * @param n number of samples
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
232 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
233 * @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
234 * 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
235 * reference decoder seems to have undefined behavior.
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
236 *
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
237 * 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
238 * 3GPP TS 26.090 6.1 (6)
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
239 */
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
240 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
241 float sum_of_squares, const int n);
5f2ced30548b Implement ff_scale_vector_to_given_sum_of_squares()
reynaldo
parents: 10463
diff changeset
242
10676
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
243 /**
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
244 * Add fixed vector to an array from a sparse representation
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 * @param out fixed vector with pitch sharpening
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
247 * @param in sparse fixed vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
248 * @param scale number to multiply the fixed vector by
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
249 * @param size the output vector size
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
250 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
251 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
252
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
253 /**
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
254 * Clear array values set by set_fixed_vector
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 * @param out fixed vector to be cleared
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
257 * @param in sparse fixed vector
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
258 * @param size the output vector size
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
259 */
8ee37f5571dc Commit functions used by both AMRNB and SIPR
vitor
parents: 10493
diff changeset
260 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
261
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7658
diff changeset
262 #endif /* AVCODEC_ACELP_VECTORS_H */