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

📄 global.c

📁 JM86的ccs代码,对目前正在做h.264移植的非常有用噢
💻 C
字号:
/*******************************************************/
/* FILE: global.c                                      */
/* Auth: alan_liu                                      */
/* Dest: global var                                    */
/*                                                     */
/* Support by: QQ group: 10714050                      */
/*******************************************************/

#include "global.h"

#ifdef _TMS320C6X

#undef EXTERN
#define EXTERN

EXTERN Picture *top_pic = 0;
EXTERN Picture *bottom_pic = 0;
EXTERN Picture *frame_pic = 0;

// global picture format dependend buffers, mem allocation in image.c
EXTERN byte   **imgY_org = 0;           //!< Reference luma image
EXTERN byte  ***imgUV_org = 0;          //!< Reference croma image
//int    **refFrArr;           //!< Array for reference frames of each block
EXTERN int    **img4Y_tmp = 0;          //!< for quarter pel interpolation

EXTERN unsigned int log2_max_frame_num_minus4 = 0;
EXTERN unsigned int log2_max_pic_order_cnt_lsb_minus4 = 0;

EXTERN int  me_tot_time,me_time = 0;
EXTERN pic_parameter_set_rbsp_t *active_pps = 0;
EXTERN seq_parameter_set_rbsp_t *active_sps = 0;

// B pictures
// motion vector : forward, backward, direct
EXTERN int  mb_adaptive = 0;     //!< For MB level field/frame coding tools
EXTERN int  MBPairIsField = 0;     //!< For MB level field/frame coding tools


//Weighted prediction
EXTERN int ***wp_weight = 0;  // weight in [list][index][component] order
EXTERN int ***wp_offset = 0;  // offset in [list][index][component] order
EXTERN int ****wbp_weight = 0;  // weight in [list][fwd_index][bwd_idx][component] order
EXTERN int luma_log_weight_denom = 0;
EXTERN int chroma_log_weight_denom = 0;
EXTERN int wp_luma_round = 0;
EXTERN int wp_chroma_round = 0;

// global picture format dependend buffers, mem allocation in image.c (field picture)
EXTERN byte   **imgY_org_top = 0;
EXTERN byte   **imgY_org_bot = 0;

EXTERN byte  ***imgUV_org_top = 0;
EXTERN byte  ***imgUV_org_bot = 0;

EXTERN byte   **imgY_org_frm = 0;
EXTERN byte  ***imgUV_org_frm = 0;

EXTERN byte   **imgY_com = 0;               //!< Encoded luma images
EXTERN byte  ***imgUV_com = 0;              //!< Encoded croma images

EXTERN int   ***direct_ref_idx = 0;         //!< direct mode reference index buffer
EXTERN int    **direct_pdir = 0;         //!< direct mode reference index buffer

// Buffers for rd optimization with packet losses, Dim. Kontopodis
EXTERN byte **pixel_map = 0;   //!< Shows the latest reference frame that is reliable for each pixel
EXTERN byte **refresh_map = 0; //!< Stores the new values for pixel_map  
EXTERN int intras = 0;         //!< Counts the intra updates in each frame.

EXTERN int  Bframe_ctr, frame_no, nextP_tr_fld, nextP_tr_frm = 0;
EXTERN int  tot_time = 0;

#define ET_SIZE 300      //!< size of error text buffer
EXTERN char errortext[ET_SIZE] = {0}; //!< buffer for error message for exit with error()



EXTERN RD_DATA *rdopt = 0; 
EXTERN RD_DATA rddata_top_frame_mb = {0}, rddata_bot_frame_mb = {0}; //!< For MB level field/frame coding tools
EXTERN RD_DATA rddata_top_field_mb = {0}, rddata_bot_field_mb = {0}; //!< For MB level field/frame coding tools



EXTERN FILE *p_dec = 0;                     //!< internal decoded image for debugging
EXTERN FILE *p_stat = 0;                    //!< status file for the last encoding session
EXTERN FILE *p_log = 0;                     //!< SNR file
EXTERN FILE *p_in = 0;                      //!< YUV
EXTERN FILE *p_trace = 0;                   //!< Trace file


EXTERN int Bytes_After_Header = 0;

// JVT-D101: the bit for redundant_pic_cnt in slice header may be changed, 
// therefore the bit position in the bitstream must be stored.
EXTERN int rpc_bytes_to_go = 0;
EXTERN int rpc_bits_to_go = 0;

//////////////////////////////////////////////////////
////////////////  retectl  ///////////////////////////

EXTERN double bit_rate = 0; 
EXTERN double frame_rate = 0;
EXTERN double GAMMAP = 0;//LIZG, JVT019r1
EXTERN double BETAP = 0;//LIZG, JVT019r1

EXTERN int RC_MAX_QUANT = 0;//LIZG 28/10/2002
EXTERN int RC_MIN_QUANT = 0;//LIZG 28/10/2002

EXTERN double BufferSize = 0; //LIZG 25/10/2002
EXTERN double GOPTargetBufferLevel = 0;
EXTERN double CurrentBufferFullness = 0; //LIZG 25/10/2002
EXTERN double TargetBufferLevel = 0;//LIZG 25/10/2002
EXTERN double PreviousBit_Rate = 0;//LIZG  25/10/2002
EXTERN double AWp = 0;
EXTERN double AWb = 0;
EXTERN int MyInitialQp = 0;
EXTERN int PAverageQp = 0;

/*LIZG JVT50V2 distortion prediction model*/
/*coefficients of the prediction model*/
EXTERN double PreviousPictureMAD = 0;
EXTERN double MADPictureC1 = 0;
EXTERN double MADPictureC2 = 0;
EXTERN double PMADPictureC1 = 0;
EXTERN double PMADPictureC2 = 0;
/* LIZG JVT50V2 picture layer MAD */
EXTERN Boolean PictureRejected[21] = {FALSE};
EXTERN double PPictureMAD[21] = {0};
EXTERN double PictureMAD[21] = {0};
EXTERN double ReferenceMAD[21] = {0};

/*quadratic rate-distortion model*/
EXTERN Boolean   m_rgRejected[21] = {FALSE};
EXTERN double  m_rgQp[21] = {0};
EXTERN double m_rgRp[21] = {0};
EXTERN double m_X1 = 0;
EXTERN double m_X2 = 0;
EXTERN int m_Qc = 0;
EXTERN double m_Qstep = 0;
EXTERN int m_Qp = 0;
EXTERN int Pm_Qp = 0;
EXTERN int PreAveMBHeader = 0;
EXTERN int CurAveMBHeader = 0;
EXTERN int PPreHeader = 0;
EXTERN int PreviousQp1 = 0;
EXTERN int PreviousQp2 = 0;
EXTERN int NumberofBFrames = 0;
/*basic unit layer rate control*/
EXTERN int TotalFrameQP = 0;
EXTERN int NumberofBasicUnit = 0;
EXTERN int PAveHeaderBits1 = 0;
EXTERN int PAveHeaderBits2 = 0;
EXTERN int PAveHeaderBits3 = 0;
EXTERN int PAveFrameQP = 0;
EXTERN int TotalNumberofBasicUnit = 0;
EXTERN int CodedBasicUnit = 0;
EXTERN double MINVALUE = 0;
EXTERN double CurrentFrameMAD = 0;
EXTERN double CurrentBUMAD = 0;
EXTERN double TotalBUMAD = 0;
EXTERN double PreviousFrameMAD = 0;
EXTERN int m_Hp = 0;
EXTERN int m_windowSize = 0;
EXTERN int MADm_windowSize = 0;
EXTERN int DDquant = 0;
EXTERN int MBPerRow = 0;
EXTERN double AverageMADPreviousFrame = 0;
EXTERN int TotalBasicUnitBits = 0;
EXTERN int QPLastPFrame = 0;
EXTERN int QPLastGOP = 0;
//int MADn_windowSize;
//int n_windowSize;

EXTERN double Pm_rgQp[20] = {0};
EXTERN double Pm_rgRp[20] = {0};
EXTERN double Pm_X1 = 0;
EXTERN double Pm_X2 = 0;
EXTERN int Pm_Hp = 0;
/* adaptive field/frame coding*/
EXTERN int FieldQPBuffer = 0;
EXTERN int FrameQPBuffer = 0;
EXTERN int FrameAveHeaderBits = 0;
EXTERN int FieldAveHeaderBits = 0;
EXTERN double BUPFMAD[6336] = {0};//LIZG
EXTERN double BUCFMAD[6336] = {0};//LIZG
EXTERN double FCBUCFMAD[6336] = {0};
EXTERN double FCBUPFMAD[6336] = {0};

EXTERN Boolean GOPOverdue = FALSE;


//comput macroblock activity for rate control
//EXTERN int diffy[16][16];
EXTERN int diffyy[16][16] = {0};
EXTERN int diffy8[16][16] = {0};//for P8X8 mode 

//////////////////////////////////////////
//////////// fast_me  ////////////////////
EXTERN int **McostState = 0; //state for integer pel search

EXTERN int *****all_mincost = 0;//store the MV and SAD information needed;
EXTERN int *****all_bwmincost = 0;//store for backward prediction
EXTERN int pred_SAD_space,pred_SAD_time,pred_SAD_ref,pred_SAD_uplayer;//SAD prediction
EXTERN int FME_blocktype = 0;  //blocktype for FME SetMotionVectorPredictor
EXTERN int pred_MV_time[2],pred_MV_ref[2],pred_MV_uplayer[2];//pred motion vector by space or tempral correlation,Median is provided

//for early termination
EXTERN float Quantize_step = 0;
EXTERN float  Bsize[8] = {0};
EXTERN int Thresh4x4 = 0;
EXTERN float AlphaSec[8] = {0};
EXTERN float AlphaThird[8] = {0};
EXTERN int  flag_intra[124] = {0};//HD enough
EXTERN int  flag_intra_SAD = 0;

EXTERN char **SearchState = 0; //state for fractional pel search

////////////////////////////////////////////////
////////////////  nalu.h  //////////////////////
EXTERN int (*WriteNALU)(NALU_t *n);     //! Hides the write function in Annex B or RTP


///////////////////////////////////////////////
////////////////  sei.h  //////////////////////
typedef struct
{
  char *byte;
  int total_byte;
  Bitstream *data;
  int payloadSize;
} user_data_unregistered_information_struct;
extern Boolean seiHasUser_data_unregistered_info;
extern user_data_unregistered_information_struct seiUser_data_unregistered;

typedef struct
{
  char *byte;
  int total_byte;
  int itu_t_t35_country_code;
  int itu_t_t35_country_code_extension_byte;
  Bitstream *data;
  int payloadSize;
} user_data_registered_itu_t_t35_information_struct;
extern Boolean seiHasUser_data_registered_itu_t_t35_info;
extern user_data_registered_itu_t_t35_information_struct seiUser_data_registered_itu_t_t35;

typedef struct
{
  unsigned char recovery_point_flag;
  unsigned char exact_match_flag;
  unsigned char broken_link_flag;

  Bitstream *data;
  int payloadSize;
} randomaccess_information_struct;
extern Boolean seiHasRandomAccess_info;
extern randomaccess_information_struct seiRandomAccess;

extern InputParameters *input;
extern ImageParameters *img;
extern StatParameters  *stat;
extern SNRParameters   *snr;
extern Decoders        *decs;

typedef struct
{
  Boolean available;
  int payloadSize;
  unsigned char subPacketType;
  byte* data;
} sei_struct;
extern sei_struct sei_message;

void clear_g_var()
{
    memset(&rddata_top_frame_mb, 0, sizeof(RD_DATA));
    memset(&rddata_bot_frame_mb, 0, sizeof(RD_DATA));
    memset(&rddata_top_field_mb, 0, sizeof(RD_DATA));
    memset(&rddata_bot_field_mb, 0, sizeof(RD_DATA));

    memset(input, 0, sizeof(InputParameters));
    memset(img, 0, sizeof(ImageParameters));
    memset(stat, 0, sizeof(StatParameters));
    memset(snr, 0, sizeof(SNRParameters));
    memset(decs, 0, sizeof(Decoders));

    memset(&seiUser_data_unregistered, 0, sizeof(user_data_unregistered_information_struct));
    memset(&seiUser_data_registered_itu_t_t35, 0, sizeof(user_data_registered_itu_t_t35_information_struct));
    memset(&seiRandomAccess, 0, sizeof(randomaccess_information_struct));

    memset(&sei_message, 0, sizeof(sei_struct));
}

#endif

⌨️ 快捷键说明

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