2 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
3 ** Copyright (C) 2003-2004 M. Bakker, Ahead Software 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 ** Commercial non-GPL licensing of this software is possible.
23 ** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
25 ** Initially modified for use with MPlayer by Arpad Gereöffy on 2003/08/30
26 ** $Id: structs.h,v 1.3 2004/06/02 22:59:04 diego Exp $
27 ** detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
42 #define MAX_CHANNELS 64
43 #define MAX_SYNTAX_ELEMENTS 48
44 #define MAX_WINDOW_GROUPS 8
46 #define MAX_LTP_SFB 40
47 #define MAX_LTP_SFB_S 8
49 /* used to save the prediction state */
68 const real_t
*long_window
[2];
69 const real_t
*short_window
[2];
71 const real_t
*ld_window
[2];
83 void (*if_func
)(void *a
, uint8_t b
, uint8_t c
, uint8_t d
, real_t
*e
, real_t
*f
, uint8_t g
, uint16_t h
);
92 uint8_t pce_instance_tag
;
93 uint8_t excluded_chns_present
;
95 uint8_t prog_ref_level
;
96 uint8_t dyn_rng_sgn
[17];
97 uint8_t dyn_rng_ctl
[17];
98 uint8_t exclude_mask
[MAX_CHANNELS
];
99 uint8_t additional_excluded_chns
[MAX_CHANNELS
];
107 uint8_t element_instance_tag
;
110 uint8_t num_front_channel_elements
;
111 uint8_t num_side_channel_elements
;
112 uint8_t num_back_channel_elements
;
113 uint8_t num_lfe_channel_elements
;
114 uint8_t num_assoc_data_elements
;
115 uint8_t num_valid_cc_elements
;
116 uint8_t mono_mixdown_present
;
117 uint8_t mono_mixdown_element_number
;
118 uint8_t stereo_mixdown_present
;
119 uint8_t stereo_mixdown_element_number
;
120 uint8_t matrix_mixdown_idx_present
;
121 uint8_t pseudo_surround_enable
;
122 uint8_t matrix_mixdown_idx
;
123 uint8_t front_element_is_cpe
[16];
124 uint8_t front_element_tag_select
[16];
125 uint8_t side_element_is_cpe
[16];
126 uint8_t side_element_tag_select
[16];
127 uint8_t back_element_is_cpe
[16];
128 uint8_t back_element_tag_select
[16];
129 uint8_t lfe_element_tag_select
[16];
130 uint8_t assoc_data_element_tag_select
[16];
131 uint8_t cc_element_is_ind_sw
[16];
132 uint8_t valid_cc_element_tag_select
[16];
136 uint8_t comment_field_bytes
;
137 uint8_t comment_field_data
[257];
139 /* extra added values */
140 uint8_t num_front_channels
;
141 uint8_t num_side_channels
;
142 uint8_t num_back_channels
;
143 uint8_t num_lfe_channels
;
144 uint8_t sce_channel
[16];
145 uint8_t cpe_channel
[16];
153 uint8_t protection_absent
;
157 uint8_t channel_configuration
;
161 uint8_t copyright_identification_bit
;
162 uint8_t copyright_identification_start
;
163 uint16_t aac_frame_length
;
164 uint16_t adts_buffer_fullness
;
165 uint8_t no_raw_data_blocks_in_frame
;
174 uint8_t copyright_id_present
;
175 int8_t copyright_id
[10];
176 uint8_t original_copy
;
178 uint8_t bitstream_type
;
180 uint8_t num_program_config_elements
;
181 uint32_t adif_buffer_fullness
;
183 /* maximum of 16 PCEs */
184 program_config pce
[16];
190 uint8_t data_present
;
194 uint8_t long_used
[MAX_SFB
];
195 uint8_t short_used
[8];
196 uint8_t short_lag_present
[8];
197 uint8_t short_lag
[8];
203 uint8_t predictor_reset
;
204 uint8_t predictor_reset_group_number
;
205 uint8_t prediction_used
[MAX_SFB
];
210 uint8_t number_pulse
;
211 uint8_t pulse_start_sfb
;
212 uint8_t pulse_offset
[4];
213 uint8_t pulse_amp
[4];
220 uint8_t length
[8][4];
222 uint8_t direction
[8][4];
223 uint8_t coef_compress
[8][4];
224 uint8_t coef
[8][4][32];
232 uint8_t adjust_num
[4][8];
233 uint8_t alevcode
[4][8][8];
234 uint8_t aloccode
[4][8][8];
243 uint8_t num_window_groups
;
245 uint8_t window_sequence
;
246 uint8_t window_group_length
[8];
247 uint8_t window_shape
;
248 uint8_t scale_factor_grouping
;
249 uint16_t sect_sfb_offset
[8][15*8];
250 uint16_t swb_offset
[52];
252 uint8_t sect_cb
[8][15*8];
253 uint16_t sect_start
[8][15*8];
254 uint16_t sect_end
[8][15*8];
255 uint8_t sfb_cb
[8][8*15];
256 uint8_t num_sec
[8]; /* number of sections in a group */
259 int16_t scale_factors
[8][51]; /* [0..255] */
261 uint8_t ms_mask_present
;
262 uint8_t ms_used
[MAX_WINDOW_GROUPS
][MAX_SFB
];
266 uint8_t pulse_data_present
;
267 uint8_t tns_data_present
;
268 uint8_t gain_control_data_present
;
269 uint8_t predictor_data_present
;
280 #ifdef ERROR_RESILIENCE
282 uint16_t length_of_reordered_spectral_data
;
283 uint8_t length_of_longest_codeword
;
285 uint8_t sf_concealment
;
286 uint8_t rev_global_gain
;
287 uint16_t length_of_rvlc_sf
;
288 uint16_t dpcm_noise_nrg
;
289 uint8_t sf_escapes_present
;
290 uint8_t length_of_rvlc_escapes
;
291 uint16_t dpcm_noise_last_position
;
293 } ic_stream
; /* individual channel stream */
300 int16_t paired_channel
;
302 uint8_t element_instance_tag
;
303 uint8_t common_window
;
307 } element
; /* syntax element (SCE, CPE, LFE) */
309 typedef struct mp4AudioSpecificConfig
311 /* Audio Specific Info */
312 uint8_t objectTypeIndex
;
313 uint8_t samplingFrequencyIndex
;
314 uint32_t samplingFrequency
;
315 uint8_t channelsConfiguration
;
317 /* GA Specific Info */
318 uint8_t frameLengthFlag
;
319 uint8_t dependsOnCoreCoder
;
320 uint16_t coreCoderDelay
;
321 uint8_t extensionFlag
;
322 uint8_t aacSectionDataResilienceFlag
;
323 uint8_t aacScalefactorDataResilienceFlag
;
324 uint8_t aacSpectralDataResilienceFlag
;
327 int8_t sbr_present_flag
;
328 int8_t forceUpSampling
;
329 } mp4AudioSpecificConfig
;
331 typedef struct faacDecConfiguration
333 uint8_t defObjectType
;
334 uint32_t defSampleRate
;
335 uint8_t outputFormat
;
337 uint8_t useOldADTSFormat
;
338 uint8_t dontUpSampleImplicitSBR
;
339 } faacDecConfiguration
, *faacDecConfigurationPtr
;
341 typedef struct faacDecFrameInfo
343 uint32_t bytesconsumed
;
349 /* SBR: 0: off, 1: on; normal, 2: on; downsampled */
352 /* MPEG-4 ObjectType */
355 /* AAC header type; MP4 will be signalled as RAW also */
358 /* multichannel configuration */
359 uint8_t num_front_channels
;
360 uint8_t num_side_channels
;
361 uint8_t num_back_channels
;
362 uint8_t num_lfe_channels
;
363 uint8_t channel_position
[MAX_CHANNELS
];
368 uint8_t adts_header_present
;
369 uint8_t adif_header_present
;
372 uint8_t channelConfiguration
;
373 #ifdef ERROR_RESILIENCE
374 uint8_t aacSectionDataResilienceFlag
;
375 uint8_t aacScalefactorDataResilienceFlag
;
376 uint8_t aacSpectralDataResilienceFlag
;
378 uint16_t frameLength
;
379 uint8_t postSeekResetFlag
;
384 uint8_t first_syn_ele
;
386 /* number of channels in current frame */
388 /* number of elements in current frame */
391 /* element_output_channels:
392 determines the number of channels the element will output
394 uint8_t element_output_channels
[MAX_SYNTAX_ELEMENTS
];
396 determines whether the data needed for the element is allocated or not
398 uint8_t element_alloced
[MAX_SYNTAX_ELEMENTS
];
400 determines the number of channels where output data is allocated for
402 uint8_t alloced_channels
;
404 /* output data buffer */
407 uint8_t window_shape_prev
[MAX_CHANNELS
];
409 uint16_t ltp_lag
[MAX_CHANNELS
];
414 real_t
*time_out
[MAX_CHANNELS
];
415 real_t
*fb_intermed
[MAX_CHANNELS
];
418 int8_t sbr_present_flag
;
419 int8_t forceUpSampling
;
420 /* determines whether SBR data is allocated for the gives element */
421 uint8_t sbr_alloced
[MAX_SYNTAX_ELEMENTS
];
423 sbr_info
*sbr
[MAX_SYNTAX_ELEMENTS
];
425 int8_t lcstereo_flag
;
428 #if (defined(PS_DEC) || defined(DRM_PS))
429 uint8_t ps_used
[MAX_SYNTAX_ELEMENTS
];
433 real_t
*ssr_overlap
[MAX_CHANNELS
];
434 real_t
*prev_fmd
[MAX_CHANNELS
];
435 real_t ipqf_buffer
[MAX_CHANNELS
][4][96/4];
439 pred_state
*pred_stat
[MAX_CHANNELS
];
442 int16_t *lt_pred_stat
[MAX_CHANNELS
];
445 /* Program Config Element */
448 uint8_t element_id
[MAX_CHANNELS
];
449 uint8_t internal_channel
[MAX_CHANNELS
];
451 /* Configuration data */
452 faacDecConfiguration config
;
455 void (*apply_sf_func
)(void *a
, void *b
, void *c
, uint16_t d
);
460 int64_t spectral_cycles
;
461 int64_t output_cycles
;
462 int64_t scalefac_cycles
;
463 int64_t requant_cycles
;
465 } faacDecStruct
, *faacDecHandle
;