www.pudn.com > avi 到 mpeg 的转换程序及源代码.zip > GLOBAL.H
/* global.h, global variables, function prototypes */ /* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */ /* * Disclaimer of Warranty * * These software programs are available to the user without any license fee or * royalty on an "as is" basis. The MPEG Software Simulation Group disclaims * any and all warranties, whether express, implied, or statuary, including any * implied warranties or merchantability or of fitness for a particular * purpose. In no event shall the copyright-holder be liable for any * incidental, punitive, or consequential damages of any kind whatsoever * arising from the use of these programs. * * This disclaimer of warranty extends to the user of these programs and user's * customers, employees, agents, transferees, successors, and assigns. * * The MPEG Software Simulation Group does not represent or warrant that the * programs furnished hereunder are free of infringement of any third-party * patents. * * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware, * are subject to royalty fees to patent holders. Many of these patents are * general enough such that they are unavoidable regardless of implementation * design. * */ /* * 4/4/97 - John Schlichther * * extensively altered to create avi2mpg1 - avi to mpeg-1 encoder * * Since avi file, and the avi subsystem are platform dependant, cross * platform compatibility removed, many optional features disabled or * removed, code generally trimmed to a minimum. * */ #include "avi2m1v.h" #include#include #include /* prototypes of global functions */ /* choose between declaration (GLOBAL undefined) * and definition (GLOBAL defined) * GLOBAL is defined in exactly one file (avi2mpg1.c) */ #ifndef GLOBAL #define EXTERN extern #else #define EXTERN #endif /* conform.c */ void range_checks(void); /* fdctref.c */ void init_fdct(void); void fdct(short *block); /* idct.c */ void idct(short *block); void init_idct(void); /* motion.c */ void motion_estimation(unsigned char *oldorg, unsigned char *neworg, unsigned char *oldref, unsigned char *newref, unsigned char *cur, unsigned char *curref, int sxf, int syf, int sxb, int syb, struct mbinfo *mbi, int secondfield, int ipflag); /* avi2m1v.c */ int avi2m1v(char *); void error(char *text); /* predict.c */ void predict(unsigned char *reff[], unsigned char *refb[], unsigned char *cur[3], int secondfield, struct mbinfo *mbi); /* putbits.c */ void initbits(void); void putbits(int val, int n); void alignbits(void); int bitcount(void); /* puthdr.c */ void putseqhdr(void); void putseqext(void); void putseqdispext(void); void putuserdata(char *userdata); void putgophdr(int frame, int closed_gop); void putpicthdr(void); void putpictcodext(void); void putseqend(void); /* putmpg.c */ void putintrablk(short *blk, int cc); void putnonintrablk(short *blk); void putmv(int dmv, int f_code); /* putpic.c */ void putpict(unsigned char *frame); /* putseq.c */ void putseq(void); /* putvlc.c */ void putDClum(int val); void putDCchrom(int val); void putACfirst(int run, int val); void putAC(int run, int signed_level, int vlcformat); void putaddrinc(int addrinc); void putmbtype(int pict_type, int mb_type); void putmotioncode(int motion_code); void putdmv(int dmv); void putcbp(int cbp); /* quantize.c */ int quant_intra(short *src, short *dst, int dc_prec, unsigned char *quant_mat, int mquant); int quant_non_intra(short *src, short *dst, unsigned char *quant_mat, int mquant); void iquant_intra(short *src, short *dst, int dc_prec, unsigned char *quant_mat, int mquant); void iquant_non_intra(short *src, short *dst, unsigned char *quant_mat, int mquant); /* ratectl.c */ void rc_init_seq(void); void rc_init_GOP(int np, int nb); void rc_init_pict(unsigned char *frame); void rc_update_pict(void); int rc_start_mb(void); int rc_calc_mquant(int j); void vbv_end_of_picture(void); void calc_vbv_delay(void); /* readpic.c */ void readframe(unsigned long lCurFrame, unsigned char *frame[]); /* stats.c */ void calcSNR(unsigned char *org[3], unsigned char *rec[3]); void stats(void); /* transfrm.c */ void transform(unsigned char *pred[], unsigned char *cur[], struct mbinfo *mbi, short blocks[][64]); void itransform(unsigned char *pred[], unsigned char *cur[], struct mbinfo *mbi, short blocks[][64]); void dct_type_estimation(unsigned char *pred, unsigned char *cur, struct mbinfo *mbi); /* writepic.c */ void writeframe(char *fname, unsigned char *frame[]); /* global variables */ EXTERN char version[] #ifdef GLOBAL ="avi2mpg1 V1.5, 97/11/19" #endif ; EXTERN char author[] #ifdef GLOBAL ="(C) 1997, John Schlichther" #endif ; EXTERN PAVISTREAM pVideoStream, pAudioStream; EXTERN AVISTREAMINFO pAudioStreamInfo; EXTERN unsigned long length; EXTERN WAVEFORMATEX pWavFormat; EXTERN unsigned int vbv_ovflow; EXTERN unsigned int vbv_unflow; EXTERN char video_param_filename[_MAX_PATH]; EXTERN unsigned int use_v_param_file; EXTERN unsigned long last_good_video_frame; EXTERN unsigned int fake_bad_frames; EXTERN unsigned int video_only; EXTERN unsigned int frame_repl; EXTERN unsigned int vbv_size; EXTERN unsigned int bad_frame_count; EXTERN unsigned int bad_audio_count; EXTERN int m_search_size; EXTERN time_t start_time; EXTERN unsigned long bytes_processed; // multiplex error counts EXTERN unsigned int audio_time_out; EXTERN unsigned int video_time_out; EXTERN unsigned int audio_end_early; EXTERN unsigned int video_end_early; /* zig-zag scan */ EXTERN unsigned char zig_zag_scan[64] #ifdef GLOBAL = { 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5, 12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28, 35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51, 58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 } #endif ; /* alternate scan */ EXTERN unsigned char alternate_scan[64] #ifdef GLOBAL = { 0,8,16,24,1,9,2,10,17,25,32,40,48,56,57,49, 41,33,26,18,3,11,4,12,19,27,34,42,50,58,35,43, 51,59,20,28,5,13,6,14,21,29,36,44,52,60,37,45, 53,61,22,30,7,15,23,31,38,46,54,62,39,47,55,63 } #endif ; /* default intra quantization matrix */ EXTERN unsigned char default_intra_quantizer_matrix[64] #ifdef GLOBAL = { 8, 16, 19, 22, 26, 27, 29, 34, 16, 16, 22, 24, 27, 29, 34, 37, 19, 22, 26, 27, 29, 34, 34, 38, 22, 22, 26, 27, 29, 34, 37, 40, 22, 26, 27, 29, 32, 35, 40, 48, 26, 27, 29, 32, 35, 40, 48, 58, 26, 27, 29, 34, 38, 46, 56, 69, 27, 29, 35, 38, 46, 56, 69, 83 } #endif ; /* non-linear quantization coefficient table */ EXTERN unsigned char non_linear_mquant_table[32] #ifdef GLOBAL = { 0, 1, 2, 3, 4, 5, 6, 7, 8,10,12,14,16,18,20,22, 24,28,32,36,40,44,48,52, 56,64,72,80,88,96,104,112 } #endif ; /* non-linear mquant table for mapping from scale to code * since reconstruction levels are not bijective with the index map, * it is up to the designer to determine most of the quantization levels */ EXTERN unsigned char map_non_linear_mquant[113] #ifdef GLOBAL = { 0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16, 16,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22, 22,22,23,23,23,23,24,24,24,24,24,24,24,25,25,25,25,25,25,25,26,26, 26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,29, 29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,31,31,31,31,31 } #endif ; /* picture data arrays */ /* reconstructed frames */ EXTERN unsigned char *newrefframe[3], *oldrefframe[3], *auxframe[3]; /* original frames */ EXTERN unsigned char *neworgframe[3], *oldorgframe[3], *auxorgframe[3]; /* prediction of current frame */ EXTERN unsigned char *predframe[3]; /* 8*8 block data */ EXTERN short (*blocks)[64]; /* intra / non_intra quantization matrices */ EXTERN unsigned char intra_q[64], inter_q[64]; EXTERN unsigned char chrom_intra_q[64],chrom_inter_q[64]; /* prediction values for DCT coefficient (0,0) */ EXTERN int dc_dct_pred[3]; /* macroblock side information array */ EXTERN struct mbinfo *mbinfo; /* motion estimation parameters */ EXTERN struct motion_data *motion_data; /* clipping (=saturation) table */ EXTERN unsigned char *clp; /* U V temporary buffers */ EXTERN unsigned char *Ubuffer, *Vbuffer; /* name strings */ EXTERN char id_string[256], tplorg[256], tplref[256]; EXTERN char iqname[256], niqname[256]; EXTERN char statname[256]; EXTERN char errortext[256]; EXTERN FILE *outfile, *statfile; /* file descriptors */ EXTERN int inputtype; /* format of input frames */ EXTERN int quiet; /* suppress warnings */ /* coding model parameters */ EXTERN int N; /* number of frames in Group of Pictures */ EXTERN int M; /* distance between I/P frames */ EXTERN int P; /* intra slice refresh interval */ EXTERN int nframes; /* total number of frames to encode */ EXTERN int frame0, tc0; /* number and timecode of first frame */ EXTERN int fieldpic; /* use field pictures */ EXTERN unsigned int system_byterate_parm; EXTERN unsigned int audio_bitrate_parm; EXTERN unsigned int audio_layer_parm; EXTERN unsigned int joint_stereo_parm; EXTERN unsigned int vcd_parm; EXTERN unsigned int crop_size; EXTERN unsigned int crop_horz; EXTERN unsigned int crop_vert; EXTERN unsigned int forced_frame_rate; /* sequence specific data (sequence header) */ EXTERN int horizontal_size, vertical_size; /* frame size (pels) */ EXTERN int width, height; /* encoded frame size (pels) multiples of 16 or 32 */ EXTERN int chrom_width,chrom_height,block_count; EXTERN int mb_width, mb_height; /* frame size (macroblocks) */ EXTERN int width2, height2, mb_height2, chrom_width2; /* picture size */ EXTERN int aspectratio; /* aspect ratio information (pel or display) */ EXTERN int frame_rate_code; /* coded value of frame rate */ EXTERN double frame_rate; /* frames per second */ EXTERN double bit_rate; /* bits per second */ EXTERN int vbv_buffer_size; /* size of VBV buffer (* 16 kbit) */ EXTERN int constrparms; /* constrained parameters flag (MPEG-1 only) */ EXTERN int load_iquant, load_niquant; /* use non-default quant. matrices */ EXTERN int load_ciquant,load_cniquant; /* sequence specific data (sequence extension) */ EXTERN int profile, level; /* syntax / parameter constraints */ EXTERN int prog_seq; /* progressive sequence */ EXTERN int chroma_format; EXTERN int low_delay; /* no B pictures, skipped pictures */ /* sequence specific data (sequence display extension) */ EXTERN int video_format; /* component, PAL, NTSC, SECAM or MAC */ EXTERN int color_primaries; /* source primary chromaticity coordinates */ EXTERN int transfer_characteristics; /* opto-electronic transfer char. (gamma) */ EXTERN int matrix_coefficients; /* Eg,Eb,Er / Y,Cb,Cr matrix coefficients */ EXTERN int display_horizontal_size, display_vertical_size; /* display size */ /* picture specific data (picture header) */ EXTERN int temp_ref; /* temporal reference */ EXTERN int pict_type; /* picture coding type (I, P or B) */ EXTERN int vbv_delay; /* video buffering verifier delay (1/90000 seconds) */ /* picture specific data (picture coding extension) */ EXTERN int forw_hor_f_code, forw_vert_f_code; EXTERN int back_hor_f_code, back_vert_f_code; /* motion vector ranges */ EXTERN int dc_prec; /* DC coefficient precision for intra coded blocks */ EXTERN int pict_struct; /* picture structure (frame, top / bottom field) */ EXTERN int topfirst; /* display top field first */ /* use only frame prediction and frame DCT (I,P,B,current) */ EXTERN int frame_pred_dct_tab[3], frame_pred_dct; EXTERN int conceal_tab[3]; /* use concealment motion vectors (I,P,B) */ EXTERN int qscale_tab[3], q_scale_type; /* linear/non-linear quantizaton table */ EXTERN int intravlc_tab[3], intravlc; /* intra vlc format (I,P,B,current) */ EXTERN int altscan_tab[3], altscan; /* alternate scan (I,P,B,current) */ EXTERN int repeatfirst; /* repeat first field after second field */ EXTERN int prog_frame; /* progressive frame */