comparison libfaad2/sbr_dec.h @ 10725:e989150f8216

libfaad2 v2.0rc1 imported
author arpi
date Sat, 30 Aug 2003 22:30:28 +0000
parents
children 3185f64f6350
comparison
equal deleted inserted replaced
10724:adf5697b9d83 10725:e989150f8216
1 /*
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3 ** Copyright (C) 2003 M. Bakker, Ahead Software AG, http://www.nero.com
4 **
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
9 **
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
14 **
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 **
19 ** Any non-GPL usage of this software or parts of this software is strictly
20 ** forbidden.
21 **
22 ** Commercial non-GPL licensing of this software is possible.
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
24 **
25 ** $Id: sbr_dec.h,v 1.4 2003/07/29 08:20:13 menno Exp $
26 **/
27
28 #ifndef __SBR_DEC_H__
29 #define __SBR_DEC_H__
30
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34
35 typedef struct {
36 #if 0
37 real_t post_exp_re[64];
38 real_t post_exp_im[64];
39 #endif
40 real_t *x;
41 uint8_t channels;
42 } qmfa_info;
43
44 typedef struct {
45 real_t *v;
46 uint8_t channels;
47 } qmfs_info;
48
49 typedef struct
50 {
51 uint32_t sample_rate;
52
53 uint8_t rate;
54 uint8_t just_seeked;
55
56 uint8_t amp_res[2];
57
58 uint8_t k0;
59 uint8_t kx;
60 uint8_t M;
61 uint8_t N_master;
62 uint8_t N_high;
63 uint8_t N_low;
64 uint8_t N_Q;
65 uint8_t N_L[4];
66 uint8_t n[2];
67
68 uint8_t f_master[64];
69 uint8_t f_table_res[2][64];
70 uint8_t f_table_noise[64];
71 uint8_t f_table_lim[4][64];
72 #ifdef SBR_LOW_POWER
73 uint8_t f_group[5][64];
74 uint8_t N_G[5];
75 #endif
76
77 uint8_t table_map_k_to_g[64];
78
79 uint8_t abs_bord_lead[2];
80 uint8_t abs_bord_trail[2];
81 uint8_t n_rel_lead[2];
82 uint8_t n_rel_trail[2];
83
84 uint8_t L_E[2];
85 uint8_t L_E_prev[2];
86 uint8_t L_Q[2];
87
88 uint8_t t_E[2][6];
89 uint8_t t_Q[2][3];
90 uint8_t f[2][6];
91 uint8_t f_prev[2];
92
93 real_t *G_temp_prev[2][5];
94 real_t *Q_temp_prev[2][5];
95
96 int16_t E[2][64][5];
97 int16_t E_prev[2][64];
98 real_t E_orig[2][64][5];
99 real_t E_curr[2][64][5];
100 int32_t Q[2][64][2];
101 int32_t Q_prev[2][64];
102 real_t Q_orig[2][64][2];
103
104 int8_t l_A[2];
105 int8_t l_A_prev[2];
106
107 uint8_t bs_invf_mode[2][5];
108 uint8_t bs_invf_mode_prev[2][5];
109 real_t bwArray[2][64];
110 real_t bwArray_prev[2][64];
111
112 uint8_t noPatches;
113 uint8_t patchNoSubbands[64];
114 uint8_t patchStartSubband[64];
115
116 uint8_t bs_add_harmonic[2][64];
117 uint8_t bs_add_harmonic_prev[2][64];
118
119 uint16_t index_noise_prev[2];
120 uint8_t psi_is_prev[2];
121
122 uint8_t bs_start_freq_prev;
123 uint8_t bs_stop_freq_prev;
124 uint8_t bs_xover_band_prev;
125 uint8_t bs_freq_scale_prev;
126 uint8_t bs_alter_scale_prev;
127 uint8_t bs_noise_bands_prev;
128
129 int8_t prevEnvIsShort[2];
130
131 int8_t kx_prev;
132
133 uint8_t Reset;
134 uint32_t frame;
135 uint32_t header_count;
136
137 uint8_t *data;
138 uint16_t data_size;
139
140 uint8_t id_aac;
141 qmfa_info *qmfa[2];
142 qmfs_info *qmfs[2];
143
144 qmf_t *Xsbr[2];
145 qmf_t *Xcodec[2];
146
147
148 /* to get it compiling */
149 /* we'll see during the coding of all the tools, whether
150 these are all used or not.
151 */
152 uint8_t bs_header_flag;
153 uint8_t bs_crc_flag;
154 uint16_t bs_sbr_crc_bits;
155 uint8_t bs_protocol_version;
156 uint8_t bs_amp_res;
157 uint8_t bs_start_freq;
158 uint8_t bs_stop_freq;
159 uint8_t bs_xover_band;
160 uint8_t bs_freq_scale;
161 uint8_t bs_alter_scale;
162 uint8_t bs_noise_bands;
163 uint8_t bs_limiter_bands;
164 uint8_t bs_limiter_gains;
165 uint8_t bs_interpol_freq;
166 uint8_t bs_smoothing_mode;
167 uint8_t bs_samplerate_mode;
168 uint8_t bs_add_harmonic_flag[2];
169 uint8_t bs_add_harmonic_flag_prev[2];
170 uint8_t bs_extended_data;
171 uint8_t bs_extension_id;
172 uint8_t bs_extension_data;
173 uint8_t bs_coupling;
174 uint8_t bs_frame_class[2];
175 uint8_t bs_rel_bord[2][9];
176 uint8_t bs_rel_bord_0[2][9];
177 uint8_t bs_rel_bord_1[2][9];
178 uint8_t bs_pointer[2];
179 uint8_t bs_abs_bord_0[2];
180 uint8_t bs_abs_bord_1[2];
181 uint8_t bs_num_rel_0[2];
182 uint8_t bs_num_rel_1[2];
183 uint8_t bs_df_env[2][9];
184 uint8_t bs_df_noise[2][3];
185 } sbr_info;
186
187 sbr_info *sbrDecodeInit();
188 void sbrDecodeEnd(sbr_info *sbr);
189
190 void sbrDecodeFrame(sbr_info *sbr, real_t *left_channel,
191 real_t *right_channel, uint8_t id_aac,
192 uint8_t just_seeked);
193
194
195 #ifdef __cplusplus
196 }
197 #endif
198 #endif
199