00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef __STRUCTS_H__
00034 #define __STRUCTS_H__
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00040 #include "cfft.h"
00041 #ifdef SBR_DEC
00042 #include "sbr_dec.h"
00043 #endif
00044
00045 #define MAX_CHANNELS 64
00046 #define MAX_SYNTAX_ELEMENTS 48
00047 #define MAX_WINDOW_GROUPS 8
00048 #define MAX_SFB 51
00049 #define MAX_LTP_SFB 40
00050 #define MAX_LTP_SFB_S 8
00051
00052
00053 typedef struct {
00054 int16_t r[2];
00055 int16_t COR[2];
00056 int16_t VAR[2];
00057 } pred_state;
00058
00059 typedef struct {
00060 uint16_t N;
00061 cfft_info *cfft;
00062 complex_t *sincos;
00063 #ifdef PROFILE
00064 int64_t cycles;
00065 int64_t fft_cycles;
00066 #endif
00067 } mdct_info;
00068
00069 typedef struct
00070 {
00071 const real_t *long_window[2];
00072 const real_t *short_window[2];
00073 #ifdef LD_DEC
00074 const real_t *ld_window[2];
00075 #endif
00076
00077 mdct_info *mdct256;
00078 #ifdef LD_DEC
00079 mdct_info *mdct1024;
00080 #endif
00081 mdct_info *mdct2048;
00082 #ifdef PROFILE
00083 int64_t cycles;
00084 #endif
00085 } fb_info;
00086
00087 typedef struct
00088 {
00089 uint8_t present;
00090
00091 uint8_t num_bands;
00092 uint8_t pce_instance_tag;
00093 uint8_t excluded_chns_present;
00094 uint8_t band_top[17];
00095 uint8_t prog_ref_level;
00096 uint8_t dyn_rng_sgn[17];
00097 uint8_t dyn_rng_ctl[17];
00098 uint8_t exclude_mask[MAX_CHANNELS];
00099 uint8_t additional_excluded_chns[MAX_CHANNELS];
00100
00101 real_t ctrl1;
00102 real_t ctrl2;
00103 } drc_info;
00104
00105 typedef struct
00106 {
00107 uint8_t element_instance_tag;
00108 uint8_t object_type;
00109 uint8_t sf_index;
00110 uint8_t num_front_channel_elements;
00111 uint8_t num_side_channel_elements;
00112 uint8_t num_back_channel_elements;
00113 uint8_t num_lfe_channel_elements;
00114 uint8_t num_assoc_data_elements;
00115 uint8_t num_valid_cc_elements;
00116 uint8_t mono_mixdown_present;
00117 uint8_t mono_mixdown_element_number;
00118 uint8_t stereo_mixdown_present;
00119 uint8_t stereo_mixdown_element_number;
00120 uint8_t matrix_mixdown_idx_present;
00121 uint8_t pseudo_surround_enable;
00122 uint8_t matrix_mixdown_idx;
00123 uint8_t front_element_is_cpe[16];
00124 uint8_t front_element_tag_select[16];
00125 uint8_t side_element_is_cpe[16];
00126 uint8_t side_element_tag_select[16];
00127 uint8_t back_element_is_cpe[16];
00128 uint8_t back_element_tag_select[16];
00129 uint8_t lfe_element_tag_select[16];
00130 uint8_t assoc_data_element_tag_select[16];
00131 uint8_t cc_element_is_ind_sw[16];
00132 uint8_t valid_cc_element_tag_select[16];
00133
00134 uint8_t channels;
00135
00136 uint8_t comment_field_bytes;
00137 uint8_t comment_field_data[257];
00138
00139
00140 uint8_t num_front_channels;
00141 uint8_t num_side_channels;
00142 uint8_t num_back_channels;
00143 uint8_t num_lfe_channels;
00144 uint8_t sce_channel[16];
00145 uint8_t cpe_channel[16];
00146 } program_config;
00147
00148 typedef struct
00149 {
00150 uint16_t syncword;
00151 uint8_t id;
00152 uint8_t layer;
00153 uint8_t protection_absent;
00154 uint8_t profile;
00155 uint8_t sf_index;
00156 uint8_t private_bit;
00157 uint8_t channel_configuration;
00158 uint8_t original;
00159 uint8_t home;
00160 uint8_t emphasis;
00161 uint8_t copyright_identification_bit;
00162 uint8_t copyright_identification_start;
00163 uint16_t aac_frame_length;
00164 uint16_t adts_buffer_fullness;
00165 uint8_t no_raw_data_blocks_in_frame;
00166 uint16_t crc_check;
00167
00168
00169 uint8_t old_format;
00170 } adts_header;
00171
00172 typedef struct
00173 {
00174 uint8_t copyright_id_present;
00175 int8_t copyright_id[10];
00176 uint8_t original_copy;
00177 uint8_t home;
00178 uint8_t bitstream_type;
00179 uint32_t bitrate;
00180 uint8_t num_program_config_elements;
00181 uint32_t adif_buffer_fullness;
00182
00183
00184 program_config pce[16];
00185 } adif_header;
00186
00187 #ifdef LTP_DEC
00188 typedef struct
00189 {
00190 uint8_t last_band;
00191 uint8_t data_present;
00192 uint16_t lag;
00193 uint8_t lag_update;
00194 uint8_t coef;
00195 uint8_t long_used[MAX_SFB];
00196 uint8_t short_used[8];
00197 uint8_t short_lag_present[8];
00198 uint8_t short_lag[8];
00199 } ltp_info;
00200 #endif
00201
00202 #ifdef MAIN_DEC
00203 typedef struct
00204 {
00205 uint8_t limit;
00206 uint8_t predictor_reset;
00207 uint8_t predictor_reset_group_number;
00208 uint8_t prediction_used[MAX_SFB];
00209 } pred_info;
00210 #endif
00211
00212 typedef struct
00213 {
00214 uint8_t number_pulse;
00215 uint8_t pulse_start_sfb;
00216 uint8_t pulse_offset[4];
00217 uint8_t pulse_amp[4];
00218 } pulse_info;
00219
00220 typedef struct
00221 {
00222 uint8_t n_filt[8];
00223 uint8_t coef_res[8];
00224 uint8_t length[8][4];
00225 uint8_t order[8][4];
00226 uint8_t direction[8][4];
00227 uint8_t coef_compress[8][4];
00228 uint8_t coef[8][4][32];
00229 } tns_info;
00230
00231 #ifdef SSR_DEC
00232 typedef struct
00233 {
00234 uint8_t max_band;
00235
00236 uint8_t adjust_num[4][8];
00237 uint8_t alevcode[4][8][8];
00238 uint8_t aloccode[4][8][8];
00239 } ssr_info;
00240 #endif
00241
00242 typedef struct
00243 {
00244 uint8_t max_sfb;
00245
00246 uint8_t num_swb;
00247 uint8_t num_window_groups;
00248 uint8_t num_windows;
00249 uint8_t window_sequence;
00250 uint8_t window_group_length[8];
00251 uint8_t window_shape;
00252 uint8_t scale_factor_grouping;
00253 uint16_t sect_sfb_offset[8][15*8];
00254 uint16_t swb_offset[52];
00255
00256 uint8_t sect_cb[8][15*8];
00257 uint16_t sect_start[8][15*8];
00258 uint16_t sect_end[8][15*8];
00259 uint8_t sfb_cb[8][8*15];
00260 uint8_t num_sec[8];
00261
00262 uint8_t global_gain;
00263 int16_t scale_factors[8][51];
00264
00265 uint8_t ms_mask_present;
00266 uint8_t ms_used[MAX_WINDOW_GROUPS][MAX_SFB];
00267
00268 uint8_t noise_used;
00269 uint8_t is_used;
00270
00271 uint8_t pulse_data_present;
00272 uint8_t tns_data_present;
00273 uint8_t gain_control_data_present;
00274 uint8_t predictor_data_present;
00275
00276 pulse_info pul;
00277 tns_info tns;
00278 #ifdef MAIN_DEC
00279 pred_info pred;
00280 #endif
00281 #ifdef LTP_DEC
00282 ltp_info ltp;
00283 ltp_info ltp2;
00284 #endif
00285 #ifdef SSR_DEC
00286 ssr_info ssr;
00287 #endif
00288
00289 #ifdef ERROR_RESILIENCE
00290
00291 uint16_t length_of_reordered_spectral_data;
00292 uint8_t length_of_longest_codeword;
00293
00294 uint8_t sf_concealment;
00295 uint8_t rev_global_gain;
00296 uint16_t length_of_rvlc_sf;
00297 uint16_t dpcm_noise_nrg;
00298 uint8_t sf_escapes_present;
00299 uint8_t length_of_rvlc_escapes;
00300 uint16_t dpcm_noise_last_position;
00301 #endif
00302 } ic_stream;
00303
00304 typedef struct
00305 {
00306 uint8_t channel;
00307 int16_t paired_channel;
00308
00309 uint8_t element_instance_tag;
00310 uint8_t common_window;
00311
00312 ic_stream ics1;
00313 ic_stream ics2;
00314 } element;
00315
00316 typedef struct mp4AudioSpecificConfig
00317 {
00318
00319 unsigned char objectTypeIndex;
00320 unsigned char samplingFrequencyIndex;
00321 unsigned long samplingFrequency;
00322 unsigned char channelsConfiguration;
00323
00324
00325 unsigned char frameLengthFlag;
00326 unsigned char dependsOnCoreCoder;
00327 unsigned short coreCoderDelay;
00328 unsigned char extensionFlag;
00329 unsigned char aacSectionDataResilienceFlag;
00330 unsigned char aacScalefactorDataResilienceFlag;
00331 unsigned char aacSpectralDataResilienceFlag;
00332 unsigned char epConfig;
00333
00334 char sbr_present_flag;
00335 char forceUpSampling;
00336 char downSampledSBR;
00337 } mp4AudioSpecificConfig;
00338
00339 typedef struct NeAACDecConfiguration
00340 {
00341 unsigned char defObjectType;
00342 unsigned long defSampleRate;
00343 unsigned char outputFormat;
00344 unsigned char downMatrix;
00345 unsigned char useOldADTSFormat;
00346 unsigned char dontUpSampleImplicitSBR;
00347 } NeAACDecConfiguration, *NeAACDecConfigurationPtr;
00348
00349 typedef struct NeAACDecFrameInfo
00350 {
00351 unsigned long bytesconsumed;
00352 unsigned long samples;
00353 unsigned char channels;
00354 unsigned char error;
00355 unsigned long samplerate;
00356
00357
00358 unsigned char sbr;
00359
00360
00361 unsigned char object_type;
00362
00363
00364 unsigned char header_type;
00365
00366
00367 unsigned char num_front_channels;
00368 unsigned char num_side_channels;
00369 unsigned char num_back_channels;
00370 unsigned char num_lfe_channels;
00371 unsigned char channel_position[MAX_CHANNELS];
00372
00373
00374 unsigned char ps;
00375 } NeAACDecFrameInfo;
00376
00377 typedef struct
00378 {
00379 uint8_t adts_header_present;
00380 uint8_t adif_header_present;
00381 uint8_t sf_index;
00382 uint8_t object_type;
00383 uint8_t channelConfiguration;
00384 #ifdef ERROR_RESILIENCE
00385 uint8_t aacSectionDataResilienceFlag;
00386 uint8_t aacScalefactorDataResilienceFlag;
00387 uint8_t aacSpectralDataResilienceFlag;
00388 #endif
00389 uint16_t frameLength;
00390 uint8_t postSeekResetFlag;
00391
00392 uint32_t frame;
00393
00394 uint8_t downMatrix;
00395 uint8_t upMatrix;
00396 uint8_t first_syn_ele;
00397 uint8_t has_lfe;
00398
00399 uint8_t fr_channels;
00400
00401 uint8_t fr_ch_ele;
00402
00403
00404
00405
00406 uint8_t element_output_channels[MAX_SYNTAX_ELEMENTS];
00407
00408
00409
00410 uint8_t element_alloced[MAX_SYNTAX_ELEMENTS];
00411
00412
00413
00414 uint8_t alloced_channels;
00415
00416
00417 void *sample_buffer;
00418
00419 uint8_t window_shape_prev[MAX_CHANNELS];
00420 #ifdef LTP_DEC
00421 uint16_t ltp_lag[MAX_CHANNELS];
00422 #endif
00423 fb_info *fb;
00424 drc_info *drc;
00425
00426 real_t *time_out[MAX_CHANNELS];
00427 real_t *fb_intermed[MAX_CHANNELS];
00428
00429 #ifdef SBR_DEC
00430 int8_t sbr_present_flag;
00431 int8_t forceUpSampling;
00432 int8_t downSampledSBR;
00433
00434 uint8_t sbr_alloced[MAX_SYNTAX_ELEMENTS];
00435
00436 sbr_info *sbr[MAX_SYNTAX_ELEMENTS];
00437 #endif
00438 #if (defined(PS_DEC) || defined(DRM_PS))
00439 uint8_t ps_used[MAX_SYNTAX_ELEMENTS];
00440 uint8_t ps_used_global;
00441 #endif
00442
00443 #ifdef SSR_DEC
00444 real_t *ssr_overlap[MAX_CHANNELS];
00445 real_t *prev_fmd[MAX_CHANNELS];
00446 real_t ipqf_buffer[MAX_CHANNELS][4][96/4];
00447 #endif
00448
00449 #ifdef MAIN_DEC
00450 pred_state *pred_stat[MAX_CHANNELS];
00451 #endif
00452 #ifdef LTP_DEC
00453 int16_t *lt_pred_stat[MAX_CHANNELS];
00454 #endif
00455
00456 #ifdef DRM
00457 uint8_t error_state;
00458 #endif
00459
00460
00461 uint8_t pce_set;
00462 program_config pce;
00463 uint8_t element_id[MAX_CHANNELS];
00464 uint8_t internal_channel[MAX_CHANNELS];
00465
00466
00467 NeAACDecConfiguration config;
00468
00469 #ifdef PROFILE
00470 int64_t cycles;
00471 int64_t spectral_cycles;
00472 int64_t output_cycles;
00473 int64_t scalefac_cycles;
00474 int64_t requant_cycles;
00475 #endif
00476 } NeAACDecStruct, *NeAACDecHandle;
00477
00478
00479
00480 #ifdef __cplusplus
00481 }
00482 #endif
00483 #endif