?? mpegaud.h
字號(hào):
/****************************************************************************//* * mpegaud.h -- MPEG Audio defintions * * Author : St閜hane TAVENARD * * (C) Copyright 1997-1999 St閜hane TAVENARD * All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//****************************************************************************/#ifndef MPEGAUD_H#define MPEGAUD_H/****************************************************************************/#include "bitstr.h"#include "huff.h"/* * Integer only decode. *///#define MPEGAUD_INT/* * ID */#define MPA_ID_1 1#define MPA_ID_2 0/* * Sampling Frequencies */#define MPA_SAMP_44100 0#define MPA_SAMP_48000 1#define MPA_SAMP_32000 2/* * Modes */#define MPA_MAX_CHANNELS 2#define MPA_MODE_STEREO 0#define MPA_MODE_JOINT_STEREO 1#define MPA_MODE_DUAL_CHANNEL 2#define MPA_MODE_MONO 3#define MPA_SSLIMIT 18#define MPA_SBLIMIT 32#define MPA_GRANULE_SIZE 576 // MPA_SSLIMIT*MPA_SBLIMIT#define MPA_SCALE_BLOCK 12#define MPA_HANNING_SIZE 512#define MPA_SCALE_RANGE 64#define MPA_SCALE 32768#define MPA_PCM_SIZE 1152/* * Layer II */#define MPA_GROUPS 3/* * Layer III */#define MPA_MAX_GRANULES 2#define MPA_MAX_WINDOWS 3typedef struct { INT16 ID; INT16 layer; INT16 protection_bit; INT16 bitrate_index; INT16 sampling_frequency; BOOL padding_bit; BOOL private_bit; INT16 mode; INT16 mode_extension; BOOL copyright; BOOL original; INT16 emphasis; INT16 crc_check; BOOL half_freq; // MPEG 2.5 ext. INT32 header_pos;} MPA_HEADER;/* * Layer III granule info */typedef struct { UINT16 part2_3_length; // 12 uimsbf UINT16 big_values; // 9 uimsbf UINT16 global_gain; // 8 uimsbf UINT16 scalefac_compress; // 4 bslbf MPEG1, 9 bslbf MPEG2 BOOL window_switching_flag; UINT16 block_type; // 2 bslbf BOOL mixed_block_flag; UINT16 table_select[ 3 ]; // 5 bslbf UINT16 subblock_gain[ 3 ]; // 3 bslbf UINT16 region0_count; // 4 bslbf UINT16 region1_count; // 3 bslbf BOOL preflag; BOOL scalefac_scale; // 1 bslbf UINT16 count1table_select; // 1 bslbf} MPA_GRANULE_INFO;/* * Layer III side info */typedef struct { UINT16 main_data_begin; // 9 uimsbf MPEG1, 8 uimsbf MPEG2 UINT16 private_bits; // 5/3 bslbf MPEG1, 1/2 bslbf MPEG2 struct { BOOL scfsi[4]; MPA_GRANULE_INFO gr[MPA_MAX_GRANULES]; } ch[MPA_MAX_CHANNELS];} MPA_SIDE_INFO;/* * Layer III scale factors * Note : swap s[MPA_MAX_WINDOWS][13] to s[13][MPA_MAX_WINDOWS] * to optimize time access ? */typedef struct { UINT16 l[23]; UINT16 s[MPA_MAX_WINDOWS][13];} MPA_SCALE_FAC3;#ifdef MPEGAUD_INT#define MPEGAUD_SCALE_TYPE INT32#define MPEGAUD_SCALE_BITS 30#define MPEGAUD_FRACT_TYPE INT16#define MPEGAUD_FRACT_BITS 14#else#define MPEGAUD_SCALE_TYPE REAL#define MPEGAUD_FRACT_TYPE REAL#endif#include "mpegsub.h"#include "mpegimdc.h" // #4/* * Warning: assume 32-bit alignement */typedef struct { const UINT8 (*alloc)[16]; // MPEG-II alloc table INT16 bit_alloc[MPA_MAX_CHANNELS][MPA_SBLIMIT]; MPEGAUD_SCALE_TYPE scale[MPA_MAX_CHANNELS][MPA_GROUPS][MPA_SBLIMIT]; UINT16 sample[MPA_MAX_CHANNELS][MPA_GROUPS][MPA_SBLIMIT]; MPEGAUD_FRACT_TYPE fraction[MPA_MAX_CHANNELS][MPA_GROUPS][MPA_SBLIMIT]; INT16 is[MPA_GRANULE_SIZE]; MPEGAUD_FRACT_TYPE xr[MPA_MAX_CHANNELS][MPA_GRANULE_SIZE]; MPEGAUD_FRACT_TYPE lr[MPA_MAX_CHANNELS][MPA_GRANULE_SIZE]; INT16 *pcm[MPA_MAX_CHANNELS]; INT16 scfsi[MPA_MAX_CHANNELS][MPA_SBLIMIT]; MPA_SCALE_FAC3 scale_fac3[MPA_MAX_CHANNELS]; BITSTREAM *bitstream; HUFFMAN *huffman; MPEGSUB *mpegsub; MPEGIMDCT *mpegimdct; MPA_HEADER header; MPA_SIDE_INFO side_info; BOOL stereo; INT16 channels; UINT16 sfreq; UINT32 stream_size; INT16 bitrate; INT16 jsbound; INT16 sblimit; INT16 current_table; UINT32 frame; INT16 freq_div; INT16 quality; INT16 sb_max; BOOL force_mono; INT16 sfb_nul_l[MPA_MAX_CHANNELS]; INT16 sfb_nul_s[MPA_MAX_WINDOWS][MPA_MAX_CHANNELS]; // For MPEG2-III is_pos illegal is not 7 but is_max[sfb] INT16 is_max_l[21]; INT16 is_max_s[MPA_MAX_WINDOWS][12]; BOOL need_sync; INT16 imdct_max[MPA_MAX_CHANNELS]; INT16 sfb_nul_s_top[MPA_MAX_WINDOWS]; INT32 bitstream_start_pos; void *keyp;} MPA_STREAM;/****************************************************************************/#endif /* MPEGAUD_H */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -