Mercurial > libavcodec.hg
annotate sbr.h @ 12266:48d6738904a9 libavcodec
Fix SPLATB_REG mess. Used to be a if/elseif/elseif/elseif spaghetti, so this
splits it into small optimization-specific macros which are selected for each
DSP function. The advantage of this approach is that the sse4 functions now
use the ssse3 codepath also without needing an explicit sse4 codepath.
author | rbultje |
---|---|
date | Sat, 24 Jul 2010 19:33:05 +0000 |
parents | fe1a6abe310a |
children |
rev | line source |
---|---|
11401 | 1 /* |
2 * Spectral Band Replication definitions and structures | |
3 * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl ) | |
4 * Copyright (c) 2010 Alex Converse <alex.converse@gmail.com> | |
5 * | |
6 * This file is part of FFmpeg. | |
7 * | |
8 * FFmpeg is free software; you can redistribute it and/or | |
9 * modify it under the terms of the GNU Lesser General Public | |
10 * License as published by the Free Software Foundation; either | |
11 * version 2.1 of the License, or (at your option) any later version. | |
12 * | |
13 * FFmpeg is distributed in the hope that it will be useful, | |
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
16 * Lesser General Public License for more details. | |
17 * | |
18 * You should have received a copy of the GNU Lesser General Public | |
19 * License along with FFmpeg; if not, write to the Free Software | |
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
21 */ | |
22 | |
23 /** | |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
11446
diff
changeset
|
24 * @file |
11401 | 25 * Spectral Band Replication definitions and structures |
26 * @author Robert Swain ( rob opendot cl ) | |
27 */ | |
28 | |
29 #ifndef AVCODEC_SBR_H | |
30 #define AVCODEC_SBR_H | |
31 | |
32 #include <stdint.h> | |
33 #include "fft.h" | |
11922
8c657be75c11
Move Parametric Stereo related ps* files to aacps*.
alexc
parents:
11886
diff
changeset
|
34 #include "aacps.h" |
11401 | 35 |
36 /** | |
37 * Spectral Band Replication header - spectrum parameters that invoke a reset if they differ from the previous header. | |
38 */ | |
39 typedef struct { | |
40 uint8_t bs_start_freq; | |
41 uint8_t bs_stop_freq; | |
42 uint8_t bs_xover_band; | |
43 | |
44 /** | |
45 * @defgroup bs_header_extra_1 Variables associated with bs_header_extra_1 | |
46 * @{ | |
47 */ | |
48 uint8_t bs_freq_scale; | |
49 uint8_t bs_alter_scale; | |
50 uint8_t bs_noise_bands; | |
51 /** @} */ | |
52 } SpectrumParameters; | |
53 | |
54 #define SBR_SYNTHESIS_BUF_SIZE ((1280-128)*2) | |
55 | |
56 /** | |
57 * Spectral Band Replication per channel data | |
58 */ | |
59 typedef struct { | |
60 /** | |
12074
fe1a6abe310a
Disambiguate bitstream groups for AAC and RV30/RV40.
diego
parents:
11922
diff
changeset
|
61 * @defgroup aac_bitstream Main bitstream data variables |
11401 | 62 * @{ |
63 */ | |
64 unsigned bs_frame_class; | |
65 unsigned bs_add_harmonic_flag; | |
11446
806dc446061d
aacsbr: Make the previous value of bs_num_env local to read_sbr_data().
alexc
parents:
11437
diff
changeset
|
66 unsigned bs_num_env; |
11401 | 67 uint8_t bs_freq_res[7]; |
68 unsigned bs_num_noise; | |
69 uint8_t bs_df_env[5]; | |
70 uint8_t bs_df_noise[2]; | |
71 uint8_t bs_invf_mode[2][5]; | |
72 uint8_t bs_add_harmonic[48]; | |
73 unsigned bs_amp_res; | |
74 /** @} */ | |
75 | |
76 /** | |
77 * @defgroup state State variables | |
78 * @{ | |
79 */ | |
80 DECLARE_ALIGNED(16, float, synthesis_filterbank_samples)[SBR_SYNTHESIS_BUF_SIZE]; | |
81 DECLARE_ALIGNED(16, float, analysis_filterbank_samples) [1312]; | |
82 int synthesis_filterbank_samples_offset; | |
83 ///l_APrev and l_A | |
84 int e_a[2]; | |
85 ///Chirp factors | |
86 float bw_array[5]; | |
87 ///QMF values of the original signal | |
88 float W[2][32][32][2]; | |
89 ///QMF output of the HF adjustor | |
90 float Y[2][38][64][2]; | |
91 float g_temp[42][48]; | |
92 float q_temp[42][48]; | |
93 uint8_t s_indexmapped[8][48]; | |
94 ///Envelope scalefactors | |
95 float env_facs[6][48]; | |
96 ///Noise scalefactors | |
97 float noise_facs[3][5]; | |
98 ///Envelope time borders | |
99 uint8_t t_env[8]; | |
100 ///Envelope time border of the last envelope of the previous frame | |
101 uint8_t t_env_num_env_old; | |
102 ///Noise time borders | |
103 uint8_t t_q[3]; | |
104 unsigned f_indexnoise; | |
105 unsigned f_indexsine; | |
106 /** @} */ | |
107 } SBRData; | |
108 | |
109 /** | |
110 * Spectral Band Replication | |
111 */ | |
112 typedef struct { | |
113 int sample_rate; | |
114 int start; | |
115 int reset; | |
116 SpectrumParameters spectrum_params; | |
117 int bs_amp_res_header; | |
118 /** | |
119 * @defgroup bs_header_extra_2 variables associated with bs_header_extra_2 | |
120 * @{ | |
121 */ | |
122 unsigned bs_limiter_bands; | |
123 unsigned bs_limiter_gains; | |
124 unsigned bs_interpol_freq; | |
125 unsigned bs_smoothing_mode; | |
126 /** @} */ | |
127 unsigned bs_coupling; | |
128 unsigned k[5]; ///< k0, k1, k2 | |
129 ///kx', and kx respectively, kx is the first QMF subband where SBR is used. | |
130 ///kx' is its value from the previous frame | |
131 unsigned kx[2]; | |
132 ///M' and M respectively, M is the number of QMF subbands that use SBR. | |
133 unsigned m[2]; | |
134 ///The number of frequency bands in f_master | |
135 unsigned n_master; | |
136 SBRData data[2]; | |
11886 | 137 PSContext ps; |
11401 | 138 ///N_Low and N_High respectively, the number of frequency bands for low and high resolution |
139 unsigned n[2]; | |
140 ///Number of noise floor bands | |
141 unsigned n_q; | |
142 ///Number of limiter bands | |
143 unsigned n_lim; | |
144 ///The master QMF frequency grouping | |
145 uint16_t f_master[49]; | |
146 ///Frequency borders for low resolution SBR | |
147 uint16_t f_tablelow[25]; | |
148 ///Frequency borders for high resolution SBR | |
149 uint16_t f_tablehigh[49]; | |
150 ///Frequency borders for noise floors | |
151 uint16_t f_tablenoise[6]; | |
152 ///Frequency borders for the limiter | |
153 uint16_t f_tablelim[29]; | |
154 unsigned num_patches; | |
155 uint8_t patch_num_subbands[6]; | |
156 uint8_t patch_start_subband[6]; | |
157 ///QMF low frequency input to the HF generator | |
158 float X_low[32][40][2]; | |
159 ///QMF output of the HF generator | |
160 float X_high[64][40][2]; | |
161 ///QMF values of the reconstructed signal | |
11886 | 162 DECLARE_ALIGNED(16, float, X)[2][2][38][64]; |
11401 | 163 ///Zeroth coefficient used to filter the subband signals |
164 float alpha0[64][2]; | |
165 ///First coefficient used to filter the subband signals | |
166 float alpha1[64][2]; | |
167 ///Dequantized envelope scalefactors, remapped | |
168 float e_origmapped[7][48]; | |
169 ///Dequantized noise scalefactors, remapped | |
170 float q_mapped[7][48]; | |
171 ///Sinusoidal presence, remapped | |
172 uint8_t s_mapped[7][48]; | |
173 ///Estimated envelope | |
174 float e_curr[7][48]; | |
175 ///Amplitude adjusted noise scalefactors | |
176 float q_m[7][48]; | |
177 ///Sinusoidal levels | |
178 float s_m[7][48]; | |
179 float gain[7][48]; | |
180 DECLARE_ALIGNED(16, float, qmf_filter_scratch)[5][64]; | |
11847
67206bbbab10
Rewrite the SBR decoder QMF analysis filter on top of the IMDCT instead of the RDFT.
alexc
parents:
11677
diff
changeset
|
181 FFTContext mdct_ana; |
11401 | 182 FFTContext mdct; |
183 } SpectralBandReplication; | |
184 | |
185 #endif /* AVCODEC_SBR_H */ |