📄 global.h
字号:
int successive_Bframe; /* number of B frames that will be used */
int qpB; /* QP of B frames */
/* Introduced by TOM */
int symbol_mode; /* Specifies the mode the symbols are mapped on bits */
int of_mode; /* Specifies the mode of the output file */
int partition_mode; /* Specifies the mode of data partitioning */
int SequenceHeaderType;
int TRModulus;
int PicIdModulus;
int InterSearch16x16;
int InterSearch16x8;
int InterSearch8x16;
int InterSearch8x8;
int InterSearch8x4;
int InterSearch4x8;
int InterSearch4x4;
char PictureTypeSequence[MAXPICTURETYPESEQUENCELEN];
#ifdef _FULL_SEARCH_RANGE_
int full_search;
#endif
#ifdef _ADAPT_LAST_GROUP_
int last_frame;
#endif
#ifdef _CHANGE_QP_
int qpN2, qpB2, qp2start;
#endif
#ifdef _RD_OPT_
int rdopt;
#endif
#ifdef _ADDITIONAL_REFERENCE_FRAME_
int add_ref_frame;
#endif
} InputParameters;
typedef struct
{
int number; /* current image number to be encoded*/
int current_mb_nr;
int total_number_mb;
int current_slice_nr;
int type;
int no_multpred; /* 1: prediction from the last frame only. 2: prediction from the last or */
/* second last frame etc. */
int multframe_no;
int qp; /* quant for the current frame */
int frame_cycle;
int framerate;
int width; /* Number of pels */
int width_cr; /* Number of pels chroma */
int height; /* Number of lines */
int height_cr; /* Number of lines chroma */
int height_err; /* For y vector limitation for error robustness*/
int mb_y; /* current MB vertical */
int mb_x; /* current MB horizontal */
int block_y; /* current block vertical */
int block_x; /* current block horizontal */
int subblock_y; /* DM: current subblock vertical */
int subblock_x; /* DM: current subblock horizontal */
int pix_y; /* current pixel vertical */
int pix_x; /* current pixel horizontal */
int mb_y_upd;
int mb_y_intra; /* which GOB to intra code */
int mb_mode; /* MB mode relevant for inter images, for intra images are all MB intra*/
int imod; /* new/old intra modes + inter */
int pix_c_y; /* current pixel chroma vertical */
int block_c_x; /* current block chroma vertical */
int pix_c_x; /* current pixel chroma horizontal */
int blc_size_h; /* block size for motion search, horizontal */
int blc_size_v; /* block size for motion search, vertical */
int kac; /* any AC coeffs */
int **ipredmode; /* GH ipredmode[90][74];prediction mode for inter frames */ /* fix from ver 4.1 */
/* some temporal buffers */
int mprr[6][4][4]; /* all 5 prediction modes */
int mprr_2[5][16][16]; /* all 4 new intra prediction modes */
int***** mv; /* motion vectors for all block types and all reference frames */
int mpr[16][16]; /* current best prediction mode */
int m7[16][16]; /* the diff pixel values between orginal image and prediction */
int cof[4][6][18][2][2]; /* coefficients */
int cofu[5][2][2]; /* coefficients chroma */
byte tmp_loop_Y[BLOCK_MULTIPLE+2][BLOCK_MULTIPLE+2]; /* temporal storage for LUMA loop-filter strength */
byte tmp_loop_UV[BLOCK_MULTIPLE/2+2][BLOCK_MULTIPLE/2+2]; /* temporal storage for CHROMA loop-filter strength */
Slice *currentSlice; /* pointer to current Slice data struct */
Macroblock *mb_data; /* array containing all MBs of a whole frame */
SyntaxElement MB_SyntaxElements[MAX_SYMBOLS_PER_MB]; /* temporal storage for all chosen syntax elements of one MB */
int quad[256]; /* Array containing square values,used for snr computation */ /* Values are limited to 5000 for pixel differences over 70 (sqr(5000)). */
int mv_bituse[512];
int *slice_numbers;
// UMV support
int mhor;
int mvert;
byte li[8]; /* 8 pix input for new filter routine loop() */
byte lu[6]; /* 4 pix output for new filter routine loop() */
int lpfilter[6][602]; /* for use in loopfilter */
/* B pictures */
int tr;
int b_interval;
int p_interval;
int b_frame_to_code;
int fw_mb_mode;
int fw_multframe_no;
int fw_blc_size_h;
int fw_blc_size_v;
int bw_mb_mode;
int bw_multframe_no;
int bw_blc_size_h;
int bw_blc_size_v;
int***** p_fwMV; // for MVDFW
int***** p_bwMV; // for MVDBW
int blk_bituse[10]; // it is included when getting bid_sad
int***** all_mv; // replaces local all_mv
int***** all_bmv; // replaces local all_mv
int buf_cycle;
} ImageParameters;
typedef struct /* statistics */
{
int quant0; /* quant for the first frame */
int quant1; /* average quant for the remaining frames */
float bitr; /* bit rate for current frame, used only for output til terminal*/
float bitr0; /* stored bit rate for the first frame*/
float bitrate; /* average bit rate for the sequence except first frame*/
int bit_ctr; /* counter for bit usage */
int bit_ctr_0; /* stored bit use for the first frame*/
int bit_ctr_n; /* bit usage for the current frame*/
int bit_slice; /* number of bits in current slice */
int bit_use_mode_inter[33]; /* statistics of bit usage */
int mode_use_intra[25]; /* Macroblock mode usage for Intra frames */
int mode_use_inter[33];
/* B pictures */
int *mode_use_Bframe;
int *bit_use_mode_Bframe;
int bit_ctr_P;
int bit_ctr_B;
float bitrate_P;
float bitrate_B;
int bit_use_head_mode[3];
int tmp_bit_use_cbp[3];
int bit_use_coeffY[3];
int bit_use_coeffC[3];
#ifdef DQUANT
int bit_use_delta_quant[3];
#endif
} StatParameters;
extern InputParameters *input;
extern ImageParameters *img;
extern StatParameters *stat;
extern SNRParameters *snr;
/* files */
FILE *p_dec; /* internal decoded image for debugging*/
FILE *p_stat; /* status file for the last encoding session */
FILE *p_log; /* SNR file */
FILE *p_in; /* YUV */
FILE *p_datpart; /* file to write bitlength and id of all partitions */
FILE *p_trace; /* Trace file */
/***********************************************************************
* P r o t o t y p e s f o r T M L
***********************************************************************
*/
void intrapred_luma(int CurrPixX,int CurrPixY);
void init();
void find_snr();
void oneforthpix();
void oneforthpix_2();
int encode_oneIorP_Frame();
int encode_oneB_Frame();
int find_sad(int hadamard, int m7[16][16]);
int dct_luma(int pos_mb1,int pos_mb2,int *cnt_nonz);
int dct_chroma(int uv,int i11);
int motion_search(int isi);
void levrun_linfo_c2x2(int level,int run,int *len,int *info);
void levrun_linfo_intra(int level,int run,int *len,int *info);
void levrun_linfo_inter(int level,int run,int *len,int *info);
int sign(int a,int b);
void intrapred_chroma(int,int,int uv);
#ifndef NO_RDQUANT
void rd_quant(int no_coeff,int *coeff);
#endif
void intrapred_luma_2();
int find_sad2(int *intra_mode);
void dct_luma2(int);
void init_img();
void init_stat();
void report();
void information_init(char *config_filename);
void init_frame();
void select_picture_type(SyntaxElement *symbol);
void read_one_new_frame();
void write_reconstructed_image();
void init_loop_filter();
int loop(int ibl, int ibr, int longFilt, int chroma);
void loopfilter();
/* GH: Added for dynamic mem allocation*/
int get_mem4global_buffers();
void free_mem4global_buffers();
int get_mem2D (byte ***array2D, int rows, int columns);
int get_mem2Dint (int ***array2D, int rows, int columns);
int get_mem3D (byte ****array2D, int frames, int rows, int columns);
int get_mem3Dint (int ****array3D, int frames, int rows, int columns);
void no_mem_exit (int code);
/* end GH*/
int get_mem_mv (int******);
void free_mem_mv (int*****);
void free_img ();
/* DM: Added for (re-) structuring the TML soft */
int encode_one_frame();
void encode_one_slice(SyntaxElement *sym);
void malloc_slice();
void free_slice();
void init_slice();
void encode_one_macroblock();
void start_macroblock();
void terminate_macroblock(Boolean *end_of_slice, Boolean *recode_macroblock);
void write_one_macroblock();
void proceed2nextMacroblock();
void LumaResidualCoding_P();
void ChromaCoding_P(int *cr_cbp);
void SetRefFrameInfo_P();
void SetLoopfilterStrength_P();
int MakeIntraPrediction(int *intra_pred_mode_2);
void CheckAvailabilityOfNeighbors();
#ifdef _RD_OPT_
int writeMotionInfo2NAL_Pframe();
#else
void writeMotionInfo2NAL_Pframe();
#endif
void writeCBPandCoeffs2NAL();
int writeSyntaxElement_UVLC(SyntaxElement *se, DataPartition *this_dataPart);
void writeUVLC2buffer(SyntaxElement *se, Bitstream *currStream);
int symbol2uvlc(SyntaxElement *se);
void n_linfo(int n, int *len,int *info);
void n_linfo2(int n, int dummy, int *len,int *info);
void intrapred_linfo(int ipred1, int ipred2, int *len,int *info);
void mvd_linfo2(int mvd, int dummy, int *len,int *info);
void cbp_linfo_intra(int cbp, int dummy, int *len,int *info);
void cbp_linfo_inter(int cbp, int dummy, int *len,int *info);
#if TRACE
void trace2out(SyntaxElement *se);
#endif
Boolean dummy_slice_too_big(int bits_slice);
/* ~DM */
/* DM: Added for CABAC */
void arienco_start_encoding(EncodingEnvironmentPtr eep, unsigned char *code_buffer, int *code_len );
int arienco_bits_written(EncodingEnvironmentPtr eep);
void arienco_done_encoding(EncodingEnvironmentPtr eep);
void biari_init_context( BiContextTypePtr ctx, int ini_count_0, int ini_count_1, int max_cum_freq );
void biari_copy_context( BiContextTypePtr ctx_orig, BiContextTypePtr ctx_dest );
void biari_print_context( BiContextTypePtr ctx );
void rescale_cum_freq(BiContextTypePtr bi_ct);
void biari_encode_symbol(EncodingEnvironmentPtr eep, signed short symbol, BiContextTypePtr bi_ct );
MotionInfoContexts* create_contexts_MotionInfo(void);
TextureInfoContexts* create_contexts_TextureInfo(void);
void init_contexts_MotionInfo(MotionInfoContexts *enco_ctx, int ini_flag);
void init_contexts_TextureInfo(TextureInfoContexts *enco_ctx, int ini_flag);
void delete_contexts_MotionInfo(MotionInfoContexts *enco_ctx);
void delete_contexts_TextureInfo(TextureInfoContexts *enco_ctx);
void writeHeaderToBuffer();
void writeEOSToBuffer();
int writeSyntaxElement_CABAC(SyntaxElement *se, DataPartition *this_dataPart);
void writeMB_typeInfo2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeIntraPredMode2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeRefFrame2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeMVD2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeCBP2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeRunLevel2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeBiDirBlkSize2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
void writeBiMVD2Buffer_CABAC(SyntaxElement *se, EncodingEnvironmentPtr eep_dp);
/* ~DM */
/* Introduced by TOM */
void error(char *text);
int start_sequence();
int terminate_sequence();
int start_slice(SyntaxElement *sym);
int terminate_slice();
/* B pictures */
void copy2mref();
int motion_search_Bframe(int tot_intra_sad);
int get_fwMV(int *min_fw_sad, int tot_intra_sad);
void get_bwMV(int *min_bw_sad);
void get_bid(int *bid_sad, int fw_predframe_no);
void get_dir(int *dir_sad);
void compare_sad(int tot_intra_sad, int fw_sad, int bw_sad, int bid_sad, int dir_sad);
void LumaResidualCoding_B();
void ChromaCoding_B(int *cr_cbp);
void SetLoopfilterStrength_B();
void SetRefFrameInfo_B();
#ifdef _RD_OPT_
int writeMotionInfo2NAL_Bframe();
#else
void writeMotionInfo2NAL_Bframe();
#endif
int BlkSize2CodeNumber(int blc_size_h, int blc_size_v);
/* Introduced for 1/8-pel */
void interpolate_frame();
void interpolate_frame_2();
void oneeighthpix(int prior_B_frame);
void InitRefbuf ();
void InitMotionVectorSearchModule();
#endif
int writeMB_bits_for_4x4_luma (int, int, int);
int writeMB_bits_for_16x16_luma ();
int writeMB_bits_for_luma (int);
int writeMB_bits_for_DC_chroma (int);
int writeMB_bits_for_AC_chroma (int);
int writeMB_bits_for_CBP ();
int SingleUnifiedMotionSearch (int, int, int**, int***, int*****, int, int*****, double);
/*============= rate-distortion optimization ===================*/
#ifdef _RD_OPT_
void clear_rdopt ();
void init_rdopt ();
void RD_Mode_Decision ();
#endif
/*============= fast full integer search =======================*/
#ifdef _FAST_FULL_ME_
void InitializeFastFullIntegerSearch (int);
void ClearFastFullIntegerSearch ();
void ResetFastFullIntegerSearch ();
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -