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

📄 global.h

📁 AVS编解码是学习AVS程序开发的入门资料,可以帮助初学者获得很多的收获.
💻 H
📖 第 1 页 / 共 3 页
字号:

  int coding_stage;/*lgp*/
  int block8_x;/*lgp*/
  int block8_y;/*lgp*/  
  int coded_mb_nr;


  int***** omv;
  int***** all_omv;       //!< replaces local all_mv
  int***** omv_fld;
  int***** all_omv_fld;       //!< replaces local all_mv

  int current_slice_start_mb;
  int current_slice_qp;
	int progressive_frame;
	int picture_structure;
	int dropflag;
	int advanced_pred_mode_disable;
	int old_type;
	int current_mb_nr_fld;

	// !! for weighting prediction
	int LumVarFlag ;
	int lum_scale[4] ;
	int lum_shift[4] ;
	int chroma_scale[4] ;
	int chroma_shift[4] ;
	int mb_weighting_flag ;   //0 all MB in one frame should be weighted, 1 use the mb_weight_flag
	int weighting_prediction ;
	int mpr_weight[16][16];
	int top_bot;           // -1: frame / 0: top field / 1: bottom field / Yulj 2004.07.14
	int mb_no_currSliceLastMB; // the last MB no in current slice.      Yulj 2004.07.15


  	/*rate control*/
	int NumberofHeaderBits; 
	int NumberofTextureBits;
	int NumberofBasicUnitHeaderBits;
	int NumberofBasicUnitTextureBits;
	double TotalMADBasicUnit;
	int NumberofMBTextureBits;
	int NumberofMBHeaderBits;
	int NumberofCodedBFrame; 
	int NumberofCodedPFrame;
	int NumberofGOP;
	int TotalQpforPPicture;
	int NumberofPPicture;
	double MADofMB[10000];
	int BasicUnitQP;
	int TopFieldFlag;
	int FieldControl;
	int FieldFrame;
	int Frame_Total_Number_MB;
	int IFLAG;
	int NumberofCodedMacroBlocks;
	int BasicUnit;
	int bot_MB;
//	int VEC_FLAG;			    // Commented by cjw, 20070327
	int Seqheader_flag;			// Added by cjw, 20070327	
	int curr_picture_distance;	// Added by Xiaozhen Zheng, 20070405
	int last_picture_distance;	// Added by Xiaozhen Zheng, 20070405
	int count;
	int count_PAFF;
} ImageParameters;

                                //!< statistics
typedef struct
{
  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[2][MAXMODE]; //!< statistics of bit usage
  int   bit_ctr_emulationprevention; //!< stored bits needed to prevent start code emulation
  int   mode_use_intra[25];     //!< Macroblock mode usage for Intra frames
  int   mode_use_inter[2][MAXMODE];
  
  int   mb_use_mode[2];/*lgp*/

  // 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;
  
#define NUM_PIC_TYPE 5
  int   bit_use_stuffingBits[NUM_PIC_TYPE];
  int   bit_use_mb_type[NUM_PIC_TYPE];
  int   bit_use_header[NUM_PIC_TYPE];
  int   tmp_bit_use_cbp[NUM_PIC_TYPE];
  int   bit_use_coeffY[NUM_PIC_TYPE];
  int   bit_use_coeffC[NUM_PIC_TYPE];
  int   bit_use_delta_quant[NUM_PIC_TYPE];

  int   em_prev_bits_frm;
  int   em_prev_bits_fld;
  int  *em_prev_bits;
  int   bit_ctr_parametersets;
} StatParameters;

//!< For MB level field/frame coding tools
//!< temporary structure to store MB data for field/frame coding
typedef struct
{
  double min_rdcost;
  int tmp_mv[2][2][2];        // to hold the motion vectors for each block
  int tmp_fwMV[2][2][2];      // to hold forward motion vectors for B MB's
  int tmp_bwMV[2][2][2];      // to hold backward motion vectors for B MBs
  int dfMV[2][2][2], dbMV[2][2][2]; // to hold direct motion vectors for B MB's
  int    rec_mbY[16][16];       // hold the Y component of reconstructed MB
  int    rec_mbU[8][8], rec_mbV[8][8]; 
  int    ****cofAC;
	int    ****chromacofAC;/*lgp*/
  int    ***cofDC;
	int    mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2];/*lgp*/
  int    mb_type;
  int    b8mode[4], b8pdir[4];
  int    frefar[2][2], brefar[2][2];
  int    **ipredmode;
  int    intra_pred_modes[4];
  int    cbp, cbp_blk;
  int    mode;
  int    *****mv, *****p_fwMV, *****p_bwMV ;
  int    *****all_mv;
  int    *****all_bmv;
  int    c_ipred_mode;
} RD_DATA;

RD_DATA *rdopt; 


float singlefactor;
/*
RD_DATA rddata_top_frame_mb, rddata_bot_frame_mb; //!< For MB level field/frame coding tools
RD_DATA rddata_top_field_mb, rddata_bot_field_mb; //!< For MB level field/frame coding tools
*/
/*lgp*/
extern InputParameters *input;
extern ImageParameters *img;
extern StatParameters *stat;
extern SNRParameters *snr;


// cjw for WP prediction
int *allalpha_lum, *allbelta_lum;
int second_IField;

// cjw for mv limit
int mv_out_of_range;

// Tsinghua for picture_distance  200701
int picture_distance;		

// files
FILE *p_dec,*p_dec_u,*p_dec_v;   //!< 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

int  sign(int a,int b);
void init_img();
void report();
void information_init();

void  LumaPrediction4x4 (int, int, int, int, int, int);
int   SATD (int*, int);

pel_t* FastLineX (int, pel_t*, int, int);
pel_t* UMVLineX  (int, pel_t*, int, int);

void LumaResidualCoding ();
void ChromaResidualCoding (int*);
void IntraChromaPrediction8x8 (int*, int*, int*);
int  writeMBHeader   (int rdopt); 

extern int*   refbits;
extern int*** motion_cost;
/*Lou 1016 Start*/
//int calculate_distance(int blkref, int smbtype, int coding_stage, int ref);
int scale_motion_vector(int motion_vector, int currblkref, int neighbourblkref, int currsmbtype, int neighboursmbtype, int block_y_pos, int curr_block_y, int ref, int direct_mv);
/*Lou 1016 End*/
int calculate_distance(int blkref, int fw_bw ); // Yulj 2004.07.14
void  PartitionMotionSearch     (int, int, double);
void  PartitionMotionSearch_bid (int, int, double);
int   BIDPartitionCost          (int, int, int, int,int);
int   LumaResidualCoding8x8     (int*, int*, int, int, int, int, int);
int   writeLumaCoeff8x8         (int, int);
int   writeMotionVector8x8      (int, int, int, int, int, int, int, int);
int   writeIntra4x4Modes        (int);
int   writeChromaIntraPredMode  ();
int		Get_Direct_Cost8x8 (int, double);
int		Get_Direct_CostMB  (double);
int		B8Mode2Value (int b8mode, int b8pdir);
int		GetSkipCostMB (double lambda);
void	FindSkipModeMotionVector ();

// dynamic mem allocation
int  init_global_buffers();
void free_global_buffers();
void no_mem_exit  (char *where);

int  get_mem_mv  (int******);
void free_mem_mv (int*****);
void free_img    ();

int  get_mem_ACcoeff  (int*****);
int  get_mem_DCcoeff  (int****);
void free_mem_ACcoeff (int****);
void free_mem_DCcoeff (int***);

void split_field_top();
void split_field_bot();

int  writeBlockCoeff (int block8x8);
int  storeMotionInfo (int pos);

void intrapred_luma_AVS(int img_x,int img_y);

// Added for (re-) structuring the TML soft
Picture *malloc_picture();
void		free_picture (Picture *pic);
int			encode_one_slice(Picture *pic);   //! returns the number of MBs in the slice

void  encode_one_macroblock();
void  start_macroblock();
void  set_MB_parameters (int mb);           //! sets up img-> according to input-> and currSlice->

void  terminate_macroblock(Boolean *end_of_picture);
void  write_one_macroblock(int eos_bit);
void  proceed2nextMacroblock();

void  CheckAvailabilityOfNeighbors();

void free_slice_list(Picture *currPic);

#if TRACE
void  trace2out(SyntaxElement *se);
#endif

void error(char *text, int code);
int  start_sequence();
int  terminate_sequence();
int  start_slice();

void stuffing_byte(int n);

int   writeCBPandLumaCoeff  ();
int   writeChromaCoeff      ();

//============= rate-distortion optimization ===================
void  clear_rdopt      ();
void  init_rdopt       ();

void SetImgType();

#define IMG_NUMBER (img->number)

extern int*** motion_cost_bid;
int   ipdirect_x,ipdirect_y;
void  Get_IP_direct();
void FreeBitstream();
void AllocateBitstream();

// reference frame buffer
unsigned char **reference_frame[3][3];  //[refnum][yuv][height][width]
unsigned char **reference_field[6][3];  //[refnum][yuv][height/2][width]

unsigned char ***ref[4];  //[refnum(4 for filed)][yuv][height(height/2)][width]
unsigned char ***ref_frm[2];  //[refnum(4 for filed)][yuv][height(height/2)][width]
unsigned char ***ref_fld[6];  //[refnum(4 for filed)][yuv][height(height/2)][width]
unsigned char ***b_ref[2],***f_ref[2];
unsigned char ***b_ref_frm[2],***f_ref_frm[2];
unsigned char ***b_ref_fld[2],***f_ref_fld[2];
unsigned char ***current_frame;//[yuv][height][width]
unsigned char ***current_field;//[yuv][height/2][width]


//qhg for demulation 
Bitstream *tmpStream;  
int current_slice_bytepos;
//qhg 20060327 for de-emulation
void AllocatetmpBitstream();
void FreetmpBitstream();
void Demulate(Bitstream *currStream, int current_slice_bytepos);

void SetModesAndRefframeForBlocks (int mode);

void SetModesAndRefframe (int b8, int* fw_mode, int* bw_mode, int* fw_ref, int* bw_ref);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -