encoder.h
来自「ISO mp3 sources (distribution 10) Layer」· C头文件 代码 · 共 338 行
H
338 行
/********************************************************************** * ISO MPEG Audio Subgroup Software Simulation Group (1996) * ISO 13818-3 MPEG-2 Audio Encoder - Lower Sampling Frequency Extension * * $Id: encoder.h,v 1.1 1996/02/14 04:04:23 rowlands Exp $ * * $Log: encoder.h,v $ * Revision 1.1 1996/02/14 04:04:23 rowlands * Initial revision * * Received from Mike Coleman **********************************************************************//********************************************************************** * date programmers comment * * 2/25/91 Doulas Wong, start of version 1.0 records * * Davis Pan * * 5/10/91 W. Joseph Carter Reorganized & renamed all ".h" files * * into "common.h" and "encoder.h". * * Ported to Macintosh and Unix. * * Added function prototypes for more * * rigorous type checking. * * 27jun91 dpwe (Aware) moved "alloc_*" types, pros to common * * Use ifdef PROTO_ARGS for prototypes * * prototypes reflect frame_params struct* * 7/10/91 Earle Jennings Conversion of all floats to FLOAT * * 10/3/91 Don H. Lee implemented CRC-16 error protection * * Additions and revisions are marked * * with "dhl" for clarity * * 2/11/92 W. Joseph Carter Ported new code to Macintosh. Most * * important fixes involved changing * * 16-bit ints to long or unsigned in * * bit alloc routines for quant of 65535 * * and passing proper function args. * * Removed "Other Joint Stereo" option * * and made bitrate be total channel * * bitrate, irrespective of the mode. * * Fixed many small bugs & reorganized. * * Modified some function prototypes. * * 7/27/92 Masahiro Iwadare FFT modifications for Layer 3 * * 8/3/92 Mike Li removed declaration _stklen for DOS. * * 9/22/92 jddevine@aware.com Fix protos for _scale_factor_calc() * * 11/04/94 Jon Rowlands Fix protos for usage() * * 07/11/95 Soeren H. Nielsen Changed defs. and protos for LSF * **********************************************************************/#ifndef ENCODER_DOT_H#define ENCODER_DOT_H/************************************************************************* Encoder Include Files************************************************************************//************************************************************************* Encoder Definitions************************************************************************//* General Definitions *//* Default Input Arguments (for command line control) */#define DFLT_LAY 2 /* default encoding layer is II */#define DFLT_MOD 's' /* default mode is stereo */#define DFLT_PSY 1 /* default psych model is 1 */#define DFLT_SFQ 44.1 /* default input sampling rate is 44.1 kHz */#define DFLT_EMP 'n' /* default de-emphasis is none */#define DFLT_EXT ".mpg" /* default output file extension */#define FILETYPE_ENCODE 'TEXT'#define CREATOR_ENCODE 'MpgD'/* This is the smallest MNR a subband can have before it is counted as 'noisy' by the logic which chooses the number of JS subbands */#define NOISY_MIN_MNR 0.0/* Psychacoustic Model 1 Definitions */#define CB_FRACTION 0.33#define MAX_SNR 1000#define NOISE 10#define TONE 20#define DBMIN -200.0#define LAST -1#define STOP -100#define POWERNORM 90.3090 /* = 20 * log10(32768) to normalize */ /* max output power to 96 dB per spec *//* Psychoacoustic Model 2 Definitions */#define LOGBLKSIZE 10#define BLKSIZE 1024#define HBLKSIZE 513#define CBANDS 63#define LXMIN 32.0/************************************************************************* Encoder Type Definitions************************************************************************//* Psychoacoustic Model 1 Type Definitions */typedef int IFFT2[FFT_SIZE/2];typedef int IFFT[FFT_SIZE];typedef double D9[9];typedef double D10[10];typedef double D640[640];typedef double D1408[1408];typedef double DFFT2[FFT_SIZE/2];typedef double DFFT[FFT_SIZE];typedef double DSBL[SBLIMIT];typedef double D2SBL[2][SBLIMIT];typedef struct { int line; double bark, hear, x;} g_thres, *g_ptr;typedef struct { double x; int type, next, map;} mask, *mask_ptr;/* Psychoacoustic Model 2 Type Definitions */typedef int ICB[CBANDS];typedef int IHBLK[HBLKSIZE];typedef FLOAT F32[32];typedef FLOAT F2_32[2][32];typedef FLOAT FCB[CBANDS];typedef FLOAT FCBCB[CBANDS][CBANDS];typedef FLOAT FBLK[BLKSIZE];typedef FLOAT FHBLK[HBLKSIZE];typedef FLOAT F2HBLK[2][HBLKSIZE];typedef FLOAT F22HBLK[2][2][HBLKSIZE];typedef double DCB[CBANDS];/************************************************************************* Encoder Function Prototype Declarations************************************************************************//* The following functions are in the file "musicin.c" */#ifdef PROTO_ARGSextern void obtain_parameters(frame_params*, int*, unsigned long*, char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);extern void parse_args(int, char**, frame_params*, int*, unsigned long*, char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);extern void print_config(frame_params*, int*, char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]);void usage(void);extern void aiff_check(char*, IFF_AIFF*, int*);#elseextern void obtain_parameters();extern void parse_args();extern void print_config();static void usage();extern void aiff_check();#endif/* The following functions are in the file "encode.c" */#ifdef PROTO_ARGSextern unsigned long read_samples(FILE*, short[2304], unsigned long, unsigned long);#if 0extern unsigned long get_audio(FILE*, short[2][1152], unsigned long, int, int);#elseextern unsigned long get_audio(FILE*, short[2][1152], unsigned long, int, layer* info);#endifextern void read_ana_window(double[HAN_SIZE]);extern void window_subband(short**, double[HAN_SIZE], int);extern void create_ana_filter(double[SBLIMIT][64]);extern void filter_subband(double[HAN_SIZE], double[SBLIMIT]);extern void encode_info(frame_params*, Bit_stream_struc*);extern double mod(double);extern void I_combine_LR(double[2][3][SCALE_BLOCK][SBLIMIT], double[3][SCALE_BLOCK][SBLIMIT]);extern void II_combine_LR(double[2][3][SCALE_BLOCK][SBLIMIT], double[3][SCALE_BLOCK][SBLIMIT], int);extern void I_scale_factor_calc(double[][3][SCALE_BLOCK][SBLIMIT], unsigned int[][3][SBLIMIT], int);extern void II_scale_factor_calc(double[][3][SCALE_BLOCK][SBLIMIT], unsigned int[][3][SBLIMIT], int, int);extern void pick_scale(unsigned int[2][3][SBLIMIT], frame_params*, double[2][SBLIMIT]);extern void put_scale(unsigned int[2][3][SBLIMIT], frame_params*, double[2][SBLIMIT]);extern void II_transmission_pattern(unsigned int[2][3][SBLIMIT], unsigned int[2][SBLIMIT], frame_params*);extern void II_encode_scale(unsigned int[2][SBLIMIT], unsigned int[2][SBLIMIT], unsigned int[2][3][SBLIMIT], frame_params*, Bit_stream_struc*);extern void I_encode_scale(unsigned int[2][3][SBLIMIT], unsigned int[2][SBLIMIT], frame_params*, Bit_stream_struc*);extern int II_bits_for_nonoise(double[2][SBLIMIT], unsigned int[2][SBLIMIT], frame_params*);extern void II_main_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT], unsigned int[2][SBLIMIT], int*, frame_params*);extern int II_a_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT], unsigned int[2][SBLIMIT], int*, frame_params*);extern int I_bits_for_nonoise(double[2][SBLIMIT], frame_params*);extern void I_main_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT], int*, frame_params*);extern int I_a_bit_allocation(double[2][SBLIMIT], unsigned int[2][SBLIMIT], int*, frame_params*);extern void I_subband_quantization(unsigned int[2][3][SBLIMIT], double[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[3][SBLIMIT], double[3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT], unsigned int[2][3][SCALE_BLOCK][SBLIMIT], frame_params*);extern void II_subband_quantization(unsigned int[2][3][SBLIMIT], double[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[3][SBLIMIT], double[3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT], unsigned int[2][3][SCALE_BLOCK][SBLIMIT], frame_params*);extern void II_encode_bit_alloc(unsigned int[2][SBLIMIT], frame_params*, Bit_stream_struc*);extern void I_encode_bit_alloc(unsigned int[2][SBLIMIT], frame_params*, Bit_stream_struc*);extern void I_sample_encoding(unsigned int[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT], frame_params*, Bit_stream_struc*);extern void II_sample_encoding(unsigned int[2][3][SCALE_BLOCK][SBLIMIT], unsigned int[2][SBLIMIT], frame_params*, Bit_stream_struc*);extern void encode_CRC(unsigned int, Bit_stream_struc*);#elseextern unsigned long read_samples();extern unsigned long get_audio();extern void read_ana_window();extern void window_subband();extern void create_ana_filter();extern void filter_subband();extern void encode_info();extern double mod();extern void I_combine_LR();extern void II_combine_LR();extern void I_scale_factor_calc();extern void II_scale_factor_calc();extern void pick_scale();extern void put_scale();extern void II_transmission_pattern();extern void II_encode_scale();extern void I_encode_scale();extern int II_bits_for_nonoise();extern void II_main_bit_allocation();extern int II_a_bit_allocation();extern int I_bits_for_nonoise();extern void I_main_bit_allocation();extern int I_a_bit_allocation();extern void I_subband_quantization();extern void II_subband_quantization();extern void II_encode_bit_alloc();extern void I_encode_bit_alloc();extern void I_sample_encoding();extern void II_sample_encoding();extern void encode_CRC();#endif/* The following functions are in the file "tonal.c" */#ifdef PROTO_ARGSextern void read_cbound(int, int);extern void read_freq_band(g_ptr*, int, int);extern void make_map(mask[HAN_SIZE], g_thres*);extern double add_db(double, double);extern void II_f_f_t(double[FFT_SIZE], mask[HAN_SIZE]);extern void II_hann_win(double[FFT_SIZE]);extern void II_pick_max(mask[HAN_SIZE], double[SBLIMIT]);extern void II_tonal_label(mask[HAN_SIZE], int*);extern void noise_label(mask*, int*, g_thres*);extern void subsampling(mask[HAN_SIZE], g_thres*, int*, int*);extern void threshold(mask[HAN_SIZE], g_thres*, int*, int*, int);extern void II_minimum_mask(g_thres*, double[SBLIMIT], int);extern void II_smr(double[SBLIMIT], double[SBLIMIT], double[SBLIMIT], int);extern void II_Psycho_One(short[2][1152], double[2][SBLIMIT], double[2][SBLIMIT], frame_params*);extern void I_f_f_t(double[FFT_SIZE/2], mask[HAN_SIZE/2]);extern void I_hann_win(double[FFT_SIZE/2]);extern void I_pick_max(mask[HAN_SIZE/2], double[SBLIMIT]);extern void I_tonal_label(mask[HAN_SIZE/2], int*);extern void I_minimum_mask(g_thres*, double[SBLIMIT]);extern void I_smr(double[SBLIMIT], double[SBLIMIT], double[SBLIMIT]);extern void I_Psycho_One(short[2][1152], double[2][SBLIMIT], double[2][SBLIMIT], frame_params*);#elseextern void read_cbound();extern void read_freq_band();extern void make_map();extern double add_db();extern void II_f_f_t();extern void II_hann_win();extern void II_pick_max();extern void II_tonal_label();extern void noise_label();extern void subsampling();extern void threshold();extern void II_minimum_mask();extern void II_smr();extern void II_Psycho_One();extern void I_f_f_t();extern void I_hann_win();extern void I_pick_max();extern void I_tonal_label();extern void I_minimum_mask();extern void I_smr();extern void I_Psycho_One();#endif/* The following functions are in the file "psy.c" */#ifdef PROTO_ARGSextern void psycho_anal(short int*, short int[1056], int, int, FLOAT[32], double);#elseextern void psycho_anal();#endif/* The following functions are in the file "subs.c" */#ifdef PROTO_ARGSextern void fft(FLOAT[BLKSIZE], FLOAT[BLKSIZE], FLOAT[BLKSIZE], FLOAT[BLKSIZE], int );#elseextern void fft();#endif#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?