]> 4ch.mooo.com Git - 16.git/blob - src/lib/doslib/ext/faad/structs.h
wwww
[16.git] / src / lib / doslib / ext / faad / structs.h
1 /*
2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3 ** Copyright (C) 2003-2005 M. Bakker, Nero 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 ** 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"
24 **
25 ** Commercial non-GPL licensing of this software is possible.
26 ** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
27 **
28 ** $Id: structs.h,v 1.49 2009/01/26 23:51:15 menno Exp $
29 **/
30
31 #ifndef __STRUCTS_H__
32 #define __STRUCTS_H__
33
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37
38 #include "cfft.h"
39 #ifdef SBR_DEC
40 #include "sbr_dec.h"
41 #endif
42
43 #define MAX_CHANNELS        64
44 #define MAX_SYNTAX_ELEMENTS 48
45 #define MAX_WINDOW_GROUPS    8
46 #define MAX_SFB             51
47 #define MAX_LTP_SFB         40
48 #define MAX_LTP_SFB_S        8
49
50 /* used to save the prediction state */
51 typedef struct {
52     int16_t r[2];
53     int16_t COR[2];
54     int16_t VAR[2];
55 } pred_state;
56
57 typedef struct {
58     uint16_t N;
59     cfft_info *cfft;
60     complex_t *sincos;
61 #ifdef PROFILE
62     int64_t cycles;
63     int64_t fft_cycles;
64 #endif
65 } mdct_info;
66
67 typedef struct
68 {
69     const real_t *long_window[2];
70     const real_t *short_window[2];
71 #ifdef LD_DEC
72     const real_t *ld_window[2];
73 #endif
74
75     mdct_info *mdct256;
76 #ifdef LD_DEC
77     mdct_info *mdct1024;
78 #endif
79     mdct_info *mdct2048;
80 #ifdef PROFILE
81     int64_t cycles;
82 #endif
83 } fb_info;
84
85 typedef struct
86 {
87     uint8_t present;
88
89     uint8_t num_bands;
90     uint8_t pce_instance_tag;
91     uint8_t excluded_chns_present;
92     uint8_t band_top[17];
93     uint8_t prog_ref_level;
94     uint8_t dyn_rng_sgn[17];
95     uint8_t dyn_rng_ctl[17];
96     uint8_t exclude_mask[MAX_CHANNELS];
97     uint8_t additional_excluded_chns[MAX_CHANNELS];
98
99     real_t ctrl1;
100     real_t ctrl2;
101 } drc_info;
102
103 typedef struct
104 {
105     uint8_t element_instance_tag;
106     uint8_t object_type;
107     uint8_t sf_index;
108     uint8_t num_front_channel_elements;
109     uint8_t num_side_channel_elements;
110     uint8_t num_back_channel_elements;
111     uint8_t num_lfe_channel_elements;
112     uint8_t num_assoc_data_elements;
113     uint8_t num_valid_cc_elements;
114     uint8_t mono_mixdown_present;
115     uint8_t mono_mixdown_element_number;
116     uint8_t stereo_mixdown_present;
117     uint8_t stereo_mixdown_element_number;
118     uint8_t matrix_mixdown_idx_present;
119     uint8_t pseudo_surround_enable;
120     uint8_t matrix_mixdown_idx;
121     uint8_t front_element_is_cpe[16];
122     uint8_t front_element_tag_select[16];
123     uint8_t side_element_is_cpe[16];
124     uint8_t side_element_tag_select[16];
125     uint8_t back_element_is_cpe[16];
126     uint8_t back_element_tag_select[16];
127     uint8_t lfe_element_tag_select[16];
128     uint8_t assoc_data_element_tag_select[16];
129     uint8_t cc_element_is_ind_sw[16];
130     uint8_t valid_cc_element_tag_select[16];
131
132     uint8_t channels;
133
134     uint8_t comment_field_bytes;
135     uint8_t comment_field_data[257];
136
137     /* extra added values */
138     uint8_t num_front_channels;
139     uint8_t num_side_channels;
140     uint8_t num_back_channels;
141     uint8_t num_lfe_channels;
142     uint8_t sce_channel[16];
143     uint8_t cpe_channel[16];
144 } program_config;
145
146 typedef struct
147 {
148     uint16_t syncword;
149     uint8_t id;
150     uint8_t layer;
151     uint8_t protection_absent;
152     uint8_t profile;
153     uint8_t sf_index;
154     uint8_t private_bit;
155     uint8_t channel_configuration;
156     uint8_t original;
157     uint8_t home;
158     uint8_t emphasis;
159     uint8_t copyright_identification_bit;
160     uint8_t copyright_identification_start;
161     uint16_t aac_frame_length;
162     uint16_t adts_buffer_fullness;
163     uint8_t no_raw_data_blocks_in_frame;
164     uint16_t crc_check;
165
166     /* control param */
167     uint8_t old_format;
168 } adts_header;
169
170 typedef struct
171 {
172     uint8_t copyright_id_present;
173     int8_t copyright_id[10];
174     uint8_t original_copy;
175     uint8_t home;
176     uint8_t bitstream_type;
177     uint32_t bitrate;
178     uint8_t num_program_config_elements;
179     uint32_t adif_buffer_fullness;
180
181     /* maximum of 16 PCEs */
182     program_config pce[16];
183 } adif_header;
184
185 #ifdef LTP_DEC
186 typedef struct
187 {
188     uint8_t last_band;
189     uint8_t data_present;
190     uint16_t lag;
191     uint8_t lag_update;
192     uint8_t coef;
193     uint8_t long_used[MAX_SFB];
194     uint8_t short_used[8];
195     uint8_t short_lag_present[8];
196     uint8_t short_lag[8];
197 } ltp_info;
198 #endif
199
200 #ifdef MAIN_DEC
201 typedef struct
202 {
203     uint8_t limit;
204     uint8_t predictor_reset;
205     uint8_t predictor_reset_group_number;
206     uint8_t prediction_used[MAX_SFB];
207 } pred_info;
208 #endif
209
210 typedef struct
211 {
212     uint8_t number_pulse;
213     uint8_t pulse_start_sfb;
214     uint8_t pulse_offset[4];
215     uint8_t pulse_amp[4];
216 } pulse_info;
217
218 typedef struct
219 {
220     uint8_t n_filt[8];
221     uint8_t coef_res[8];
222     uint8_t length[8][4];
223     uint8_t order[8][4];
224     uint8_t direction[8][4];
225     uint8_t coef_compress[8][4];
226     uint8_t coef[8][4][32];
227 } tns_info;
228
229 #ifdef SSR_DEC
230 typedef struct
231 {
232     uint8_t max_band;
233
234     uint8_t adjust_num[4][8];
235     uint8_t alevcode[4][8][8];
236     uint8_t aloccode[4][8][8];
237 } ssr_info;
238 #endif
239
240 typedef struct
241 {
242     uint8_t max_sfb;
243
244     uint8_t num_swb;
245     uint8_t num_window_groups;
246     uint8_t num_windows;
247     uint8_t window_sequence;
248     uint8_t window_group_length[8];
249     uint8_t window_shape;
250     uint8_t scale_factor_grouping;
251     uint16_t sect_sfb_offset[8][15*8];
252     uint16_t swb_offset[52];
253     uint16_t swb_offset_max;
254
255     uint8_t sect_cb[8][15*8];
256     uint16_t sect_start[8][15*8];
257     uint16_t sect_end[8][15*8];
258     uint8_t sfb_cb[8][8*15];
259     uint8_t num_sec[8]; /* number of sections in a group */
260
261     uint8_t global_gain;
262     int16_t scale_factors[8][51]; /* [0..255] */
263
264     uint8_t ms_mask_present;
265     uint8_t ms_used[MAX_WINDOW_GROUPS][MAX_SFB];
266
267     uint8_t noise_used;
268     uint8_t is_used;
269
270     uint8_t pulse_data_present;
271     uint8_t tns_data_present;
272     uint8_t gain_control_data_present;
273     uint8_t predictor_data_present;
274
275     pulse_info pul;
276     tns_info tns;
277 #ifdef MAIN_DEC
278     pred_info pred;
279 #endif
280 #ifdef LTP_DEC
281     ltp_info ltp;
282     ltp_info ltp2;
283 #endif
284 #ifdef SSR_DEC
285     ssr_info ssr;
286 #endif
287
288 #ifdef ERROR_RESILIENCE
289     /* ER HCR data */
290     uint16_t length_of_reordered_spectral_data;
291     uint8_t length_of_longest_codeword;
292     /* ER RLVC data */
293     uint8_t sf_concealment;
294     uint8_t rev_global_gain;
295     uint16_t length_of_rvlc_sf;
296     uint16_t dpcm_noise_nrg;
297     uint8_t sf_escapes_present;
298     uint8_t length_of_rvlc_escapes;
299     uint16_t dpcm_noise_last_position;
300 #endif
301 } ic_stream; /* individual channel stream */
302
303 typedef struct
304 {
305     uint8_t channel;
306     int16_t paired_channel;
307
308     uint8_t element_instance_tag;
309     uint8_t common_window;
310
311     ic_stream ics1;
312     ic_stream ics2;
313 } element; /* syntax element (SCE, CPE, LFE) */
314
315 #define MAX_ASC_BYTES 64
316 typedef struct {
317     int inited;
318     int version, versionA;
319     int framelen_type;
320     int useSameStreamMux;
321     int allStreamsSameTimeFraming;
322     int numSubFrames;
323     int numPrograms;
324     int numLayers;
325     int otherDataPresent;
326     uint32_t otherDataLenBits;
327     uint32_t frameLength;
328     uint8_t ASC[MAX_ASC_BYTES];
329     uint32_t ASCbits;
330 } latm_header;
331
332 typedef struct
333 {
334     uint8_t adts_header_present;
335     uint8_t adif_header_present;
336     uint8_t latm_header_present;
337     uint8_t sf_index;
338     uint8_t object_type;
339     uint8_t channelConfiguration;
340 #ifdef ERROR_RESILIENCE
341     uint8_t aacSectionDataResilienceFlag;
342     uint8_t aacScalefactorDataResilienceFlag;
343     uint8_t aacSpectralDataResilienceFlag;
344 #endif
345     uint16_t frameLength;
346     uint8_t postSeekResetFlag;
347
348     uint32_t frame;
349
350     uint8_t downMatrix;
351     uint8_t upMatrix;
352     uint8_t first_syn_ele;
353     uint8_t has_lfe;
354     /* number of channels in current frame */
355     uint8_t fr_channels;
356     /* number of elements in current frame */
357     uint8_t fr_ch_ele;
358
359     /* element_output_channels:
360        determines the number of channels the element will output
361     */
362     uint8_t element_output_channels[MAX_SYNTAX_ELEMENTS];
363     /* element_alloced:
364        determines whether the data needed for the element is allocated or not
365     */
366     uint8_t element_alloced[MAX_SYNTAX_ELEMENTS];
367     /* alloced_channels:
368        determines the number of channels where output data is allocated for
369     */
370     uint8_t alloced_channels;
371
372     /* output data buffer */
373     void *sample_buffer;
374
375     uint8_t window_shape_prev[MAX_CHANNELS];
376 #ifdef LTP_DEC
377     uint16_t ltp_lag[MAX_CHANNELS];
378 #endif
379     fb_info *fb;
380     drc_info *drc;
381
382     real_t *time_out[MAX_CHANNELS];
383     real_t *fb_intermed[MAX_CHANNELS];
384
385 #ifdef SBR_DEC
386     int8_t sbr_present_flag;
387     int8_t forceUpSampling;
388     int8_t downSampledSBR;
389     /* determines whether SBR data is allocated for the gives element */
390     uint8_t sbr_alloced[MAX_SYNTAX_ELEMENTS];
391
392     sbr_info *sbr[MAX_SYNTAX_ELEMENTS];
393 #endif
394 #if (defined(PS_DEC) || defined(DRM_PS))
395     uint8_t ps_used[MAX_SYNTAX_ELEMENTS];
396     uint8_t ps_used_global;
397 #endif
398
399 #ifdef SSR_DEC
400     real_t *ssr_overlap[MAX_CHANNELS];
401     real_t *prev_fmd[MAX_CHANNELS];
402     real_t ipqf_buffer[MAX_CHANNELS][4][96/4];
403 #endif
404
405 #ifdef MAIN_DEC
406     pred_state *pred_stat[MAX_CHANNELS];
407 #endif
408 #ifdef LTP_DEC
409     int16_t *lt_pred_stat[MAX_CHANNELS];
410 #endif
411
412 #ifdef DRM
413     uint8_t error_state;
414 #endif
415
416     /* RNG states */
417     uint32_t __r1;
418     uint32_t __r2;
419
420     /* Program Config Element */
421     uint8_t pce_set;
422     program_config pce;
423     uint8_t element_id[MAX_CHANNELS];
424     uint8_t internal_channel[MAX_CHANNELS];
425
426     /* Configuration data */
427     NeAACDecConfiguration config;
428
429 #ifdef PROFILE
430     int64_t cycles;
431     int64_t spectral_cycles;
432     int64_t output_cycles;
433     int64_t scalefac_cycles;
434     int64_t requant_cycles;
435 #endif
436         latm_header latm_config;
437         const unsigned char *cmes;
438 } NeAACDecStruct;
439
440
441
442 #ifdef __cplusplus
443 }
444 #endif
445 #endif