📄 common.h
字号:
#define MAX_LENGTH 32 /* Maximum length of word written or
read from bit stream */
#define READ_MODE 0
#define WRITE_MODE 1
#define ALIGNING 8
#define BINARY 0
#define ASCII 1
#define BS_FORMAT ASCII /* BINARY or ASCII = 2x bytes */
#define BUFFER_SIZE 4096
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define MAX(A, B) ((A) > (B) ? (A) : (B))
/***********************************************************************
*
* Global Type Definitions
*
***********************************************************************/
/* Structure for Reading Layer II Allocation Tables from File */
typedef struct {
unsigned int steps;
unsigned int bits;
unsigned int group;
unsigned int quant;
} sb_alloc, *alloc_ptr;
typedef sb_alloc al_table[SBLIMIT][16];
/* Header Information Structure */
typedef struct {
int version;
int lay;
int error_protection;
int bitrate_index;
int sampling_frequency;
int padding;
int extension;
int mode;
int mode_ext;
int copyright;
int original;
int emphasis;
int center; /* center present */
int surround; /* surrounds present*/
int dematrix_procedure; /* type of dematricing */
int lfe; /* low freequency effect channel*/
unsigned int lfe_alloc;
unsigned int lfe_scf;
unsigned int lfe_spl[12];
double lfe_spl_fraction[12];
int audio_mix; /* large or small room */
int no_of_multi_lingual_ch;/* number of multilingual channels */
int multi_lingual_fs; /* fs of main channels and ML-fs are the same*/
int multi_lingual_layer; /* Layer IIML or Layer II ML is used*/
int mc_prediction[8]; /* prediction bit *//* 28.9. R.S. changed name and length like DIS*/
int mc_pred_coeff[8][6][3];/* bits for prediction coefficient */
int tc_alloc[12]; /* transmission channel allocation in each sbgroup*/
int mc_predsi[8][6]; /* predictor select information*/
int mc_delay_comp[8][6]; /* 3 bit for delay compensations factor */
int ext_bit_stream_present;
int copyright_ident_bit; /* additional copyright bits */
int copyright_ident_start; /* */
int n_ad_bytes;
int mc_prediction_on;
int tc_sbgr_select;
int dyn_cross_on;
int dyn_cross_LR;
int dyn_cross_mode[12];
int dyn_second_stereo[12]; /* 960816 FdB changed from scalar to array */
int tc_allocation;
int ext_syncword; /* 12 bits */
int ext_crc_check; /* 16 bits */
int ext_length; /* 11 bits *//* Important!! in bits per frame */
int reserved_bit;
unsigned int ext_crc_bits[15];
#ifdef Augmentation_7ch
int aug_mtx_proc;
int aug_dyn_cross_on;
int aug_future_ext;
int tc_aug_alloc[12]; /* transmission channel allocation in each sbgroup */
int dyn_cross_aug_mode[12];
#endif
} layer, *the_layer;
/* "bit_stream.h" Type Definitions */
typedef struct bit_stream {
FILE *pt; /* pointer to bit stream device */
unsigned char *bits; /* bit stream bit buffer */
int header_size; /* header of bitstream (in number of bytes) */
long totbits; /* bit counter of bit stream */
long curpos; /* bit pointer of bit stream */
int mode; /* bit stream open in read or write mode */
int eobs; /* end of bit stream flag */
char format; /* format of file in rd mode (BINARY/ASCII) */
} Bit_stream;
/* Parent Structure Interpreting some Frame Parameters in Header */
typedef struct {
layer *header; /* raw header information */
Bit_stream *bs_mpg;
Bit_stream *bs_ext;
Bit_stream *bs_mc;
int actual_mode; /* when writing IS, may forget if 0 chs */
al_table *alloc; /* bit allocation table read in */
al_table *alloc_mc; /* MC bit allocation table read in */
al_table *alloc_ml; /* ML bit allocation table read in */
int tab_num; /* number of table as loaded */
int tab_num_mc; /* number of MC-table as loaded */
int tab_num_ml; /* number of ML-table as loaded */
int stereo; /* 1 for mono, 2 for stereo */
int mc_channel;
int jsbound; /* first band of joint stereo coding */
double mnr_min; /* mnr for dynamic bitallocation */
int sblimit; /* total number of sub bands */
int sblimit_mc; /* total number of MC sub bands */
int sblimit_ml; /* total number of ML sub bands */
int alloc_bits; /* to read the right length of tc_alloc field */
int dyn_cross_bits; /* to read the right length of dyn_cross field */
int pred_mode; /* entry for prediction table */
} frame_params;
/* Double and SANE Floating Point Type Definitions */
typedef struct IEEE_DBL_struct {
unsigned long hi;
unsigned long lo;
} IEEE_DBL;
typedef struct SANE_EXT_struct {
unsigned long l1;
unsigned long l2;
unsigned short s1;
} SANE_EXT;
/* AIFF Type Definitions */
typedef char ID[4];
typedef struct identifier_struct{
ID name;
long ck_length;
}identifier;
typedef struct ChunkHeader_struct {
ID ckID;
long ckSize;
} ChunkHeader;
typedef struct Chunk_struct {
ID ckID;
long ckSize;
ID formType;
} Chunk;
typedef struct CommonChunk_struct {
ID ckID;
long ckSize;
short numChannels;
unsigned long numSampleFrames;
short sampleSize;
char sampleRate[10];
} CommonChunk;
typedef struct SoundDataChunk_struct {
ID ckID;
long ckSize;
unsigned long offset;
unsigned long blockSize;
} SoundDataChunk;
typedef struct blockAlign_struct {
unsigned long offset;
unsigned long blockSize;
} blockAlign;
typedef struct IFF_AIFF_struct {
short numChannels;
unsigned long numSampleFrames;
short sampleSize;
double sampleRate;
ID/*char**/ sampleType;/*must be allocated 21.6.93 SR*/
blockAlign blkAlgn;
} IFF_AIFF;
/***********************************************************************
*
* Global Variable External Declarations
*
***********************************************************************/
extern layer info;
extern char *mode_names[4];
extern char *layer_names[3];
extern double s_freq[4];
extern int bitrate[3][15];
extern double multiple[64];
extern int sb_groups[12];
/***********************************************************************
*
* Global Function Prototype Declarations
*
***********************************************************************/
/* The following functions are in the file "common.c" */
#ifdef PROTO_ARGS
extern FILE *OpenTableFile(char*);
extern int read_bit_alloc(int, al_table*);
extern int pick_table(frame_params*);
extern void mc_pick_table(frame_params*);
extern int js_bound(int, int);
extern void hdr_to_frps(frame_params*);
extern void mc_hdr_to_frps(frame_params*);
extern void WriteHdr(frame_params*, FILE*);
extern void *mem_alloc(unsigned long, char*);
extern void mem_free(void**);
extern void double_to_extended(double*, char[10]);
extern void extended_to_double(char[10], double*);
extern int aiff_read_headers(FILE*, IFF_AIFF*, int*);
extern int aiff_seek_to_sound_data(FILE*);
extern int aiff_write_headers(FILE*, IFF_AIFF*);
extern int open_bit_stream_r(Bit_stream*, char*, int);
extern void close_bit_stream_r(Bit_stream*);
extern unsigned int get1bit(Bit_stream*);
extern unsigned long getbits(Bit_stream*, int);
extern void program_information(void);
extern int end_bs(Bit_stream*);
extern int seek_sync_mpg(Bit_stream*);
extern int seek_sync_ext(Bit_stream*, frame_params*);
extern void update_CRC(unsigned int, unsigned int, unsigned int*);
extern void I_CRC_calc(frame_params*, unsigned int[2][SBLIMIT],
unsigned int*);
extern void II_CRC_calc(frame_params*, unsigned int[7][SBLIMIT],
unsigned int[7][SBLIMIT], unsigned int*);
extern void mc_error_check(frame_params*, unsigned int[7][SBLIMIT],
unsigned int[7][SBLIMIT], unsigned int*, int, int);
#ifdef Augmentation_7ch
extern void mc_aug_error_check(frame_params*, unsigned int[7][SBLIMIT],
unsigned int[7][SBLIMIT], unsigned int*);
#endif
extern int mc_ext_error_check(frame_params*, int, int);
#ifdef MACINTOSH
extern void set_mac_file_attr(char[MAX_NAME_SIZE], short, OsType,
OsType);
#endif
#else
extern FILE *OpenTableFile();
extern int read_bit_alloc();
extern int pick_table();
extern int mc_pick_table();
extern int js_bound();
extern void hdr_to_frps();
extern void mc_hdr_to_frps();
extern void WriteHdr();
extern void *mem_alloc();
extern void mem_free();
extern void double_to_extended();
extern void extended_to_double();
extern int aiff_read_headers();
extern int aiff_seek_to_sound_data();
extern int aiff_write_headers();
extern int open_bit_stream_r();
extern void close_bit_stream_r();
extern unsigned int get1bit();
extern unsigned long getbits();
extern void program_information();
extern int end_bs();
extern int seek_sync_mpg();
extern int seek_sync_ext();
extern void update_CRC();
extern void I_CRC_calc();
extern void II_CRC_calc();
extern void mc_error_check();
#ifdef Augmentation_7ch
extern void mc_aug_error_check();
#endif
extern void mc_ext_check();
#ifdef MACINTOSH
extern void set_mac_file_attr();
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -