2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3 ** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
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.
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.
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.
19 ** Any non-GPL usage of this software or parts of this software is strictly
22 ** The "appropriate copyright message" mentioned in section 2c of the GPLv2
23 ** must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
25 ** Commercial non-GPL licensing of this software is possible.
26 ** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
28 ** $Id: sbr_dec.h,v 1.39 2007/11/01 12:33:34 menno Exp $
45 /* MAX_NTSRHFG: maximum of number_time_slots * rate + HFGen. 16*2+8 */
46 #define MAX_NTSRHFG 40
47 #define MAX_NTSR 32 /* max number_time_slots * rate, ok for DRM and not DRM mode */
49 /* MAX_M: maximum value for M */
51 /* MAX_L_E: maximum value for L_E */
88 uint8_t f_table_res[2][64];
89 uint8_t f_table_noise[64];
90 uint8_t f_table_lim[4][64];
92 uint8_t f_group[5][64];
96 uint8_t table_map_k_to_g[64];
98 uint8_t abs_bord_lead[2];
99 uint8_t abs_bord_trail[2];
100 uint8_t n_rel_lead[2];
101 uint8_t n_rel_trail[2];
107 uint8_t t_E[2][MAX_L_E+1];
109 uint8_t f[2][MAX_L_E+1];
112 real_t *G_temp_prev[2][5];
113 real_t *Q_temp_prev[2][5];
114 int8_t GQ_ringbuf_index[2];
116 int16_t E[2][64][MAX_L_E];
117 int16_t E_prev[2][64];
119 real_t E_orig[2][64][MAX_L_E];
121 real_t E_curr[2][64][MAX_L_E];
124 real_t Q_div[2][64][2];
125 real_t Q_div2[2][64][2];
127 int32_t Q_prev[2][64];
132 uint8_t bs_invf_mode[2][MAX_L_E];
133 uint8_t bs_invf_mode_prev[2][MAX_L_E];
134 real_t bwArray[2][64];
135 real_t bwArray_prev[2][64];
138 uint8_t patchNoSubbands[64];
139 uint8_t patchStartSubband[64];
141 uint8_t bs_add_harmonic[2][64];
142 uint8_t bs_add_harmonic_prev[2][64];
144 uint16_t index_noise_prev[2];
145 uint8_t psi_is_prev[2];
147 uint8_t bs_start_freq_prev;
148 uint8_t bs_stop_freq_prev;
149 uint8_t bs_xover_band_prev;
150 uint8_t bs_freq_scale_prev;
151 uint8_t bs_alter_scale_prev;
152 uint8_t bs_noise_bands_prev;
154 int8_t prevEnvIsShort[2];
164 uint32_t header_count;
170 qmf_t Xsbr[2][MAX_NTSRHFG][64];
179 uint8_t numTimeSlotsRate;
180 uint8_t numTimeSlots;
187 #if (defined(PS_DEC) || defined(DRM_PS))
192 /* to get it compiling */
193 /* we'll see during the coding of all the tools, whether
194 these are all used or not.
196 uint8_t bs_header_flag;
198 uint16_t bs_sbr_crc_bits;
199 uint8_t bs_protocol_version;
201 uint8_t bs_start_freq;
202 uint8_t bs_stop_freq;
203 uint8_t bs_xover_band;
204 uint8_t bs_freq_scale;
205 uint8_t bs_alter_scale;
206 uint8_t bs_noise_bands;
207 uint8_t bs_limiter_bands;
208 uint8_t bs_limiter_gains;
209 uint8_t bs_interpol_freq;
210 uint8_t bs_smoothing_mode;
211 uint8_t bs_samplerate_mode;
212 uint8_t bs_add_harmonic_flag[2];
213 uint8_t bs_add_harmonic_flag_prev[2];
214 uint8_t bs_extended_data;
215 uint8_t bs_extension_id;
216 uint8_t bs_extension_data;
218 uint8_t bs_frame_class[2];
219 uint8_t bs_rel_bord[2][9];
220 uint8_t bs_rel_bord_0[2][9];
221 uint8_t bs_rel_bord_1[2][9];
222 uint8_t bs_pointer[2];
223 uint8_t bs_abs_bord_0[2];
224 uint8_t bs_abs_bord_1[2];
225 uint8_t bs_num_rel_0[2];
226 uint8_t bs_num_rel_1[2];
227 uint8_t bs_df_env[2][9];
228 uint8_t bs_df_noise[2][3];
231 sbr_info *sbrDecodeInit(uint16_t framelength, uint8_t id_aac,
232 uint32_t sample_rate, uint8_t downSampledSBR
237 void sbrDecodeEnd(sbr_info *sbr);
238 void sbrReset(sbr_info *sbr);
240 uint8_t sbrDecodeCoupleFrame(sbr_info *sbr, real_t *left_chan, real_t *right_chan,
241 const uint8_t just_seeked, const uint8_t downSampledSBR);
242 uint8_t sbrDecodeSingleFrame(sbr_info *sbr, real_t *channel,
243 const uint8_t just_seeked, const uint8_t downSampledSBR);
244 #if (defined(PS_DEC) || defined(DRM_PS))
245 uint8_t sbrDecodeSingleFramePS(sbr_info *sbr, real_t *left_channel, real_t *right_channel,
246 const uint8_t just_seeked, const uint8_t downSampledSBR);