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

📄 global.h

📁 davinci avs.......................................................
💻 H
📖 第 1 页 / 共 2 页
字号:

  /* global loopfilter indicator -- zhan ma */
  int loop_filter_disable_flag;
  int loop_filter_parameter_flag;
  int loop_filter_alpha_ci_offset;
  int loop_filter_cp_offset;
  int loop_filter_qp_offset;

  /* interpolation accuracy in P frames */
  int half_pixel_mv_flag;  
  
  int constrained_intra_pred_flag;
  int skip_mode_flag;
  int delta_time_picture_distance_1;

#ifdef _HRD_
  int picture_distance;
  int picture_distance_gap_minus1;
#endif //! _HRD_

  seq_parameter_set *sps;	    //!<SPS
  pic_parameter_set *pps;    //!<PPS

  /* optinoal switch for non-reference frame selections */
  int skip_img_flag;                /* simulate  a lower-end decoder that can only decode video with low frame rate */

} Image;


/* added for future decoder structure adjustment -- zhan ma */
typedef struct {
  int slice_nr;
  int fisrt_mb_nr;

  int loop_filter_disable_flag;
  int loop_filter_parameter_flag;
  int loop_filter_alpha_ci_offset;
  int loop_filter_cp_offset;
  int loop_filter_qp_offset; 

} Slice;

//! Signal to Noice ratio parameters
struct snr_par
{
  float snr_y;                                 //<! current Y SNR
  float snr_u;                                 //<! current U SNR
  float snr_v;                                 //<! current V SNR
  float snr_y1;                                //<! SNR Y(dB) first frame
  float snr_u1;                                //<! SNR U(dB) first frame
  float snr_v1;                                //<! SNR V(dB) first frame
  float snr_ya;                                //<! Average SNR Y(dB) remaining frames
  float snr_ua;                                //<! Average SNR U(dB) remaining frames
  float snr_va;                                //<! Average SNR V(dB) remaining frames
#ifdef _PSNR_YUV_
  float snr_yuv;
  float snr_yuva;
#endif // _PSNR_YUV_
} ;//SNR;


//!< input parameters from configuration file
struct inp_par
{
  char infile[100];                       //<! input file
  char outfile[100];                      //<! Decoded YUV 4:2:0 output
  char reffile[100];                      //<! Optional YUV 4:2:0 reference file for SNR measurement
  
#ifdef _HRD_
  unsigned int R_decoder;                //<! Decoder Rate in HRD Model
  unsigned int B_decoder;                //<! Decoder Buffer size in HRD model
  unsigned int F_decoder;                //<! Decoder Inital buffer fullness in HRD model
  char LeakyBucketParamFile[100];         //<! LeakyBucketParamFile
#endif // _HRD_
} ;//Input;




#define SVA_STREAM_BUF_SIZE 1024
typedef struct {
	unsigned char	buf[SVA_STREAM_BUF_SIZE];	//流缓冲区,size must be large than 3 bytes
	unsigned int	uClearBits;					//不含填充位的位缓冲,32位,初始值是0xFFFFFFFF
	unsigned int	uPre3Bytes;					//  含填充位的位缓冲,32位,初始值是0x00000000
	         int	iBytePosition;							//当前字节位置
	         int	iBufBytesNum;							//最近一次读入缓冲区的字节数
	         int	iClearBitsNum;							//不含填充位的位的个数
	         int	iStuffBitsNum;							//已剔除的填充位的个数,遇到开始码时置0
	         int iBitsCount;								//码流总位数
} InputStream;

typedef struct 
{
           int startcodeprefix_len;
	unsigned int len;                 //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU)
	         int nal_unit_type;            //! NALU_TYPE_xxxx
	         int nal_reference_idc;        //! NALU_PRIORITY_xxxx
	         int forbidden_bit;            //! should be always FALSE
	unsigned char *buf;        //! conjtains the first byte followed by the EBSP
} NALU_t;


/* stat parameter struct for global bitstream conformance check -- zhan ma*/
typedef struct
{
  /* sequence-level statistics */
  int tot_frame_number;
  int img_height;
  int img_width;
  int delta_time_picture_distance_1;
  int frame_skip;
  int ref_frame_number;
  int frame_cropping_flag;

  /* image-level statistics */
  int picture_reference_flag;
  int skip_mode_flag;
  int loop_filter_disable_flag;
  int loop_filter_parameter_flag;
  int constrained_intra_pred_flag;
  int half_pixel_mv_flag;
  
  int alpha_ci_offset;
  int cp_offset;
  int loop_fiter_qp_offset;

  /* macroblock-level statistics */
  int mb_type[6];
  int intra_luma_pred_mode[9];
  int intra_chroma_pred_mode[3];
  int max_mv[2],min_mv[2];

} StatParameter;
/*
**********************************************************************
* G l o b a l S t r u c t u r e D e f i n i t i o n
**********************************************************************
*/
extern seq_parameter_set *sps,*sps_buf[16];	    //!<SPS
extern pic_parameter_set *pps,*pps_buf[128];    //!<PPS
extern picture_header *picture_header_rbsp; //!Picture Header
extern NALU_t *nalu;

extern struct inp_par   *input;			//!< input parameters from input configuration file
extern struct snr_par   *snr;				//!< statistics
extern struct img_par   *pgImage;         //!< image parameters

extern Bitstream *currStream;
extern Macroblock *mb_data;  
extern Macroblock *pgcurrMB;
extern StatParameter *stat_parameter;

extern int tot_time;  //!< decoding lasting time statistics


// files
extern FILE *p_out;                    //<! pointer to output YUV file
extern FILE *p_ref;                    //<! pointer to input original reference YUV file file
extern FILE *p_log;                    //<! SNR file
extern FILE *reffile;                  //<! Refence YUV

#if ERR_REPORT
extern FILE *p_err;
#endif

/*!
**********************************************************************
*  P r o t o t y p e s  f o r  g lo b a l  f u n c t i o n 
**********************************************************************
*/

void init_decoder(char *config_file);          //!< AVS-M Decoder Initialization
void read_configfile(char *config_filename);  //!< Decoding Parameter readin and mapping
void release_decoder();

void DeblockFrame(byte **imgY , byte ***imgUV );

void report_picture(int time_pic);
void report_seq(struct snr_par *snr);
void find_snr(struct snr_par *snr, FILE *p_ref);
//void init();

int GetAnnexbNALU();
void CloseAnnexbFile();
void OpenAnnexbFile(char *fn);
void DecodeTrailingBits(Bitstream *bitstream);
void DecodeTrailingBits1(Bitstream *bitstream,int bitstream_length);  //!< temporary

int NALUtoRBSP (NALU_t *nalu);
int EBSPtoRBSP(byte *streamBuffer, int end_bytepos, int begin_bytepos);
int  decode_one_picture(struct snr_par *snr);
void init_frame();
void write_frame(FILE *p_out);
void decode_picture_data();
void decode_slice_header();
void decode_slice_data();

void start_macroblock();
int  read_one_macroblock();
int  decode_one_macroblock();
//int  sign(int a , int b);
Bitstream *AllocBitstream();

// Direct interpolation
void get_block(int x_pos, int y_pos, int block[4][4], unsigned char **ref_pic);//,unsigned char **ref_pic);
void CheckAvailabilityOfNeighbors();
// error printout
void error(char *text, int code);

// dynamic mem allocation
int  init_global_buffers();
void free_global_buffers();
void Update_Picture_Buffers();
void FreeBitstream();

#if TRACE
/* trace out bitstream parseting statistics -- zhan ma */
void tracebits(const char *trace_str,  //!< tracing information, char array describing the symbol
							 int len,                //!< length of syntax element in bits
							 int info,               //!< infoword of syntax element
							 int value1);

void tracebits2(const char *trace_str, int len, int info);
void tracebits3(const char *trace_str, int len,	int info,  int value1);
void trace_frame(FILE* p_trace,int img_width,int img_height,byte **img_luma, byte ***img_chroma);
void trace_mb_data(Macroblock *curMb);
void trace_mboverhead(Macroblock *curMb);
#endif

/* Error Handle Function Prototype -- Zhan Ma */
void CheckNALUValid(unsigned char nalu_header,FILE *error_file);
void CheckSPSValid(seq_parameter_set *SeqParaSet);
void CheckPPSValid(pic_parameter_set *PicParaSet);
void CheckHCoeffValid(int MbNr,int b8, int b4, int HCoeff);
void CheckDCTCoeffValid(int MbNr,int b8, int b4, int DCTCoeff);
void CheckQCoeffValid(int MbNr,int b8, int b4, int QCoeff);
void CheckPictureHeaderValid(picture_header *p,NALU_t *nalu);
void CheckMbOverHeadValid(Macroblock *curMb);
void CheckSliceHeaderValid(int first_mb_in_slice,int delta_qp);
void CheckBitstreamStatus(FILE *error_file);
/************************************************/

/* Sequence_header() */
//int aspect_ratio_information;
//int frame_rate_code; 
//int bit_rate_value; 
//int bbv_buffer_size;
//int profile_id;
//int level_id;
extern int horizontal_size;
extern int vertical_size;
//int sample_precision;
//int frame_rate_code;
//int bit_rate;
//int low_delay;
//int bit_rate_lower;
//int bit_rate_upper;


/* I_pictures_header() */ 
//int progressive_frame;

extern int fixed_picture_qp_flag;
extern int fixed_slice_qp_flag;  // zhan ma 0714
extern int previous_qp;  // zhan ma 0714
extern int picture_qp;  // zhan ma 0714
//int slice_qp;
//int p_pic_type;  //zhangnan
extern int picture_reference_flag;
extern int next_slice;
//int time_code_flag;
//int time_code;

//int loop_filter_disable;
//int loop_filter_parameter_flag;
extern int alpha_ci_offset;
extern int cp_offset;
extern int loopfilter_qp_offset;//WJP FOR DEBLOCK

//int bby_delay;
//int hour;
//int minute;
//int sec;
//int frame_offset;
//int bbv_check_times;

/* Pb_picture_header() */
//int picture_coding_type;
//int bbv_delay;


extern byte **reference_frame[3][3];  //[refnum][yuv][height][width]
extern byte ***current_frame;//[yuv][height][width]


#endif

⌨️ 快捷键说明

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