⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.h

📁 Mobile IP VCEG的信道模拟程序
💻 H
📖 第 1 页 / 共 2 页
字号:
  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 + -