📄 main.h
字号:
EXTERN int write_pec; /* write a program end code */
EXTERN int mux_SVCD_scan_offsets;
EXTERN unsigned int max_file_size;
EXTERN unsigned int mux_start_time;
EXTERN unsigned int mux_stop_time;
EXTERN int reset_clocks;
EXTERN int write_end_codes; /* write program end codes in split files */
EXTERN int set_broken_link;
/* reconstructed frames */
EXTERN unsigned char *newrefframe[3], *oldrefframe[3], *auxframe[3], *unewrefframe[3], *uoldrefframe[3], *uauxframe[3];
/* original frames */
EXTERN unsigned char *neworgframe[3], *oldorgframe[3], *auxorgframe[3], *uneworgframe[3], *uoldorgframe[3], *uauxorgframe[3];
/* prediction of current frame */
EXTERN unsigned char *predframe[3], *upredframe[3];
/* 8*8 block data */
EXTERN short (*blocks)[64], (*ublocks)[64];
/* intra / non_intra quantization matrices */
// N.b. quantisation matrix elements now shorts (x86 WORD) *not* char (BYTE)
// The i_ versions are inverses * IQUANT_SCALE...
EXTERN unsigned short s_inter_q[64];
EXTERN unsigned short i_inter_q[64];
/* Scale factor for fast integer arithmetic routines */
/* Changed this and you *must* change the quantisation routines
as they depend on its absolute value
*/
#define IQUANT_SCALE_POW2 16
#define IQUANT_SCALE (1<<IQUANT_SCALE_POW2)
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], udc_dct_pred[3];
/* macroblock side information array */
EXTERN struct mbinfo *mbinfo;
EXTERN struct mbinfo *umbinfo;
/* motion estimation parameters */
EXTERN struct motion_data motion_data[MAXM], umotion_data[MAXM];
EXTERN int xmotion, ymotion, uxmotion, uymotion;
EXTERN int automotion, uautomotion;
EXTERN int maxmotion, umaxmotion;
EXTERN int submotiop, submotiob, Sxf, Syf, Sxb, Syb;
/* clipping (=saturation) table */
EXTERN unsigned char *clp;
EXTERN unsigned char *orgclp;
/* name strings */
EXTERN char id_string[256], tplorg[256], tplref[256];
EXTERN char iqname[256], niqname[256];
EXTERN char statname[256];
EXTERN int OutputStats;
EXTERN FILE *statfile; /* file descriptors */
EXTERN char errortext[256];
EXTERN int repeatCount;
/* 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 hours, mins, sec, tframe;
EXTERN int video_type; /* mpeg type to encode, mpeg-1, vcd, mpeg-2 etc. */
EXTERN int video_pulldown_flag; /* convert 24fps to 29.97fps */
EXTERN int fieldpic; /* use field pictures */
EXTERN int write_sec; /* write a sequence end code */
EXTERN int embed_SVCD_user_blocks;
/* sequence specific data (sequence header) */
EXTERN int input_horizontal_size, input_vertical_size;
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, ublock_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 double max_bit_rate; /* max bitrate for variable bitrate mode */
EXTERN double avg_bit_rate;
EXTERN double min_bit_rate;
EXTERN int auto_bitrate; /* auto compute bitrate */
EXTERN int vbv_buffer_size; /* size of VBV buffer (* 16 kbit) */
EXTERN int constant_bitrate; /* constant bitrate flag */
EXTERN int mquant_value; /* macroblock quantization value */
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 write_sde; // write a Seq Dsply Ext
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 */
/* picture display extension */
EXTERN int write_pde;
EXTERN int frame_centre_horizontal_offset;
EXTERN int frame_centre_vertical_offset;
/* 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 */
/* rate control vars */
EXTERN int init_Xi;
EXTERN int init_Xp;
EXTERN int init_Xb;
EXTERN int init_r;
EXTERN int init_d0i;
EXTERN int init_d0p;
EXTERN int init_d0b;
EXTERN int reset_d0pb;
EXTERN double init_avg_act;
EXTERN int fixed_vbv_delay; /* force a 0xffff vbv_delay */
EXTERN int min_frame_percent;
EXTERN int pad_frame_percent;
EXTERN unsigned char *ubuffer;
/* general routines, these need to be provided by the application */
/* they can just be stubs */
void DisplayError(char *txt);
void DisplayWarning(char *txt);
void DisplayInfo(char *txt);
void DisplayProgress(char *txt, int percent);
void YieldTime();
/* mmxasm.cpp - MMX stuff */
unsigned int get_feature_flags();
void GetMMXMode();
void init_rgb_to_yuv_mmx(int coeffs);
void RGBtoYUVmmx(unsigned char *src, unsigned char *desty, unsigned char *destu,
unsigned char *destv, int srcrowsize, int destrowsize,
int width, int height);
int dist1mmx(unsigned char *blk1, unsigned char *blk2,
int lx, int hx, int hy, int h, int distlim);
int dist1sse(unsigned char *blk1, unsigned char *blk2,
int lx, int hx, int hy, int h, int distlim);
int dist2mmx(unsigned char *blk1, unsigned char *blk2,
int lx, int hx, int hy, int h);
int bdist1mmx(unsigned char *pf, unsigned char *pb,
unsigned char *p2, int lx, int hxf, int hyf, int hxb, int hyb, int h);
int bdist1sse(unsigned char *pf, unsigned char *pb,
unsigned char *p2, int lx, int hxf, int hyf, int hxb, int hyb, int h);
int bdist2mmx(unsigned char *pf, unsigned char *pb,
unsigned char *p2, int lx, int hxf, int hyf, int hxb, int hyb, int h);
int variancemmx(unsigned char *p, int lx);
void sub_pred_mmx(unsigned char *pred, unsigned char *cur, int lx, short *blk);
void add_pred_mmx(unsigned char *pred, unsigned char *cur, int lx, short *blk);
int edist1mmx(unsigned char *blk1, unsigned char *blk2,
int lx, int distlim);
int edist1sse(unsigned char *blk1, unsigned char *blk2,
int lx, int distlim);
/* bitstream stuff */
/* verify settings routines */
/* conform.cpp */
int CheckVideoSettings(mpegOutSettings *set);
int CheckAudioSettings(mpegOutSettings *set);
void input_range_checks();
int range_checks(mpegOutSettings *set);
int profile_and_level_checks(mpegOutSettings *set);
/* video stuff */
/* dovideo.cpp */
int dovideo();
/* fdctam32.cpp */
void fdct_am32(short *block);
/* fdctmm32.cpp */
void fdct_mm32(short *block);
/* fdctref.cpp */
void init_fdct();
void fdct(short *block);
void intfdct(short *block);
/* idct.cpp */
void idct(short *block);
void init_idct();
/* idctmm32.cpp */
void j_rev_dct(short *blk);
/* motion.cpp*/
void init_motion_est();
int init_motion_est2();
void finish_motion_est();
int 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);
/* predict.cpp */
void predict(unsigned char *reff[], unsigned char *refb[],
unsigned char *cur[3], int secondfield, struct mbinfo *mbi);
/* puthdr.cpp*/
void putseqhdr();
void putseqext();
void putseqdispext();
void putuserdata(char *userdata);
void putgophdr(int frame, int closed_gop);
void putpicthdr();
void putpictcodext();
void putpictdispext();
void putseqend();
/* putmpg.cpp */
int putintrablk(short *blk, int cc);
int putnonintrablk(short *blk);
void putmv(int dmv, int f_code);
/* putpic.cpp */
int putpict(unsigned char *frame);
/* putvlc.cpp */
int putDClum(int val);
int putDCchrom(int val);
int putACfirst(int run, int val);
int 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);
/* quantasm.cpp */
int quantize_ni_mmx(short *dst, short *src,
unsigned short *quant_mat, unsigned short *i_quant_mat,
int imquant, int mquant, int sat_limit);
/* quantize.cpp */
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 short *quant_mat, unsigned short *i_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.cpp */
void calc_actj(unsigned char *frame);
void save_rc_max();
void restore_rc_max();
void rc_init_seq();
void rc_update_max();
void rc_init_GOP(int np, int nb);
void rc_init_pict(unsigned char *frame);
void rc_update_pict();
int rc_start_mb();
void update_mq(int q);
int rc_calc_mquant(int j);
void vbv_end_of_picture();
void calc_vbv_delay();
/* readpic.cpp */
int init_readframe();
void end_readframe();
int readframe(unsigned char *frame[], int fnum);
/* settings.cpp */
void PutTempSettings(mpegOutSettings *set);
void GetTempSettings(mpegOutSettings *set);
void SetMPEG2Defaults(mpegOutSettings *set, int palDefaults);
void SetMPEG2Mplex(mpegOutSettings *set);
void SetMPEG1Defaults(mpegOutSettings *set, int palDefaults);
void SetMPEG1Mplex(mpegOutSettings *set);
void SetVCDDefaults(mpegOutSettings *set, int palDefaults);
void SetVCDMplex(mpegOutSettings *set);
void SetSVCDDefaults(mpegOutSettings *set, int palDefaults);
void SetSVCDMplex(mpegOutSettings *set);
void SetDVDDefaults(mpegOutSettings *set, int palDefaults);
void SetDVDMplex(mpegOutSettings *set);
void ChangeVideoFilename(mpegOutSettings *set);
void AutoSetMotionData(mpegOutSettings *set);
void AutoSetBitrateData(mpegOutSettings *set);
int ReadSettings(char *filename, mpegOutSettings *set);
int WriteSettings(char *filename, mpegOutSettings *set);
/* stats.cpp */
void calcSNR(unsigned char *org[3], unsigned char *rec[3]);
void stats();
/* transfrm.cpp */
void init_transform();
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);
/* bitstream stuff */
#define BUFFER_SIZE 256*1024
struct bitstream {
unsigned char *bfr;
unsigned char outbyte;
int byteidx;
int bitidx;
int bufcount;
fpos_t actpos;
double totbits;
FILE *bitfile;
int eobs;
int fileOutError;
};
/* bitstream stuff */
/* bits */
int init_putbits(bitstream *bs, char *bs_filename);
void finish_putbits(bitstream *bs);
int init_getbits(bitstream *bs, char *bs_filename);
void finish_getbits(bitstream *bs);
int get1bit(bitstream *bs, unsigned int *retval);
int getbits(bitstream *bs, unsigned int *retval, int N);
void putbits(bitstream *bs, int val, int n);
void put1bit(bitstream *bs, int val);
void alignbits(bitstream *bs);
void prepareundo(bitstream *bs, bitstream *undo);
void undochanges(bitstream *bs, bitstream *old);
double bitcount(bitstream *bs);
int end_bs(bitstream *bs);
int seek_sync(bitstream *bs, unsigned int sync, int N);
/* Useful "library" function (code in ctools.h) */
#ifdef __cplusplus
extern "C" { const char * strerrno(void); }
#else
const char * strerrno(void);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -