structs.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:12k
源码类别:

多媒体编程

开发平台:

Visual C++

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