This is encoder.h in view mode; [Download] [Up]
/********************************************************************** Copyright (c) 1991 MPEG/audio software simulation group, All Rights Reserved encoder.h **********************************************************************/ /********************************************************************** * MPEG/audio coding/decoding software, work in progress * * NOT for public distribution until verified and approved by the * * MPEG/audio committee. For further information, please contact * * Davis Pan, 508-493-2241, e-mail: pan@gauss.enet.dec.com * * * * VERSION 3.5 * * changes made since last update: * * 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() * **********************************************************************/ /*********************************************************************** * * 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 2 /* default psych model is 2 */ #define DFLT_SFQ 44.1 /* default input sampling rate is 44.1 kHz */ #define DFLT_BRT 384 /* default total output bitrate is 384 kbps */ #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_ARGS extern 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*, unsigned long*, char[MAX_NAME_SIZE], char[MAX_NAME_SIZE]); extern void usage(void); extern void aiff_check(char*, IFF_AIFF*); #else extern void obtain_parameters(); extern void parse_args(); extern void print_config(); extern void usage(); extern void aiff_check(); #endif /* The following functions are in the file "encode.c" */ #ifdef PROTO_ARGS extern unsigned long read_samples(FILE*, short[2304], unsigned long, unsigned long); extern unsigned long get_audio(FILE*, short[2][1152], unsigned long, int, int); extern 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*); #else extern 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_ARGS extern 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*); #else extern 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_ARGS extern void psycho_anal(short int*, short int[1056], int, int, FLOAT[32], double); #else extern void psycho_anal(); #endif /* The following functions are in the file "subs.c" */ #ifdef PROTO_ARGS extern void fft(FLOAT[BLKSIZE], FLOAT[BLKSIZE], FLOAT[BLKSIZE], FLOAT[BLKSIZE], int ); #else extern void fft(); #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.