📄 global.h
字号:
#ifndef _INC_GlobalAPI
#define _INC_GlobalAPI
#include "OutputVlc.h"
#define OFFLINE_RATE_CONTROL//jwp
//SAD
#define PREF_NULL_VEC 100
#define PREF_16_VEC 200
#define PREF_PBDELTA_NULL_VEC 50
#define DEF_START_FRAME 0
#define PCT_INTER 1
#define PCT_INTRA 0
#define ON 1
#define OFF 0
#define PBMODE_NORMAL 0
#define PBMODE_MVDB 1
#define PBMODE_CBPB_MVDB 2
#define MBC 88//按16CIF设置
#define MBR 72
#define MB_SIZE 16
#define PSC 1
#define PSC_LENGTH 17
#define mmax(a, b) ((a) > (b) ? (a) : (b))
#define mmin(a, b) ((a) < (b) ? (a) : (b))
#define mnint(a) ((a) < 0 ? (int)(a - 0.5) : (int)(a + 0.5))
#define SF_SQCIF 1 /* 001 */
#define SF_QCIF 2 /* 010 */
#define SF_CIF 3 /* 011 */
#define SF_4CIF 4 /* 100 */
#define SF_16CIF 5 /* 101 */
/* Quantization parameters */
#define DEF_INTER_QUANT 10/* default inter quantization parameter (also option "-q <n>") */
#define DEF_INTRA_QUANT 10/* default intra quantization parameter (also option "-I <n>") */
/* BQUANT parameter for PB-frame coding
* (n * QP / 4 )
*
* BQUANT n
* 0 5
* 1 6
* 2 7
* 3 8
* ( also option "-Q <BQUANT>" ) */
#define DEF_BQUANT 2
#define MODE_INTER 0
#define MODE_INTER_Q 1
#define MODE_INTER4V 2
#define MODE_INTRA 3
#define MODE_INTRA_Q 4
/*************************************************************************/
/* Search windows */
/* default integer pel search seek distance ( also option "-s <n> " ) */
#define DEF_SEEK_DIST 15
/* default integer search window for 8x8 search centered
around 16x16 vector. When it is zero only half pel estimation
around the integer 16x16 vector will be performed */
/* for best performance, keep this small, preferably zero,
but do your own simulations if you want to try something else */
#define DEF_8X8_WIN 0
/* default search window for PB delta vectors */
/* keep this small also */
#define DEF_PBDELTA_WIN 2
/*************************************************************************/
/*************************************************************************/
/* Miscellaneous */
/* write repeated reconstructed frames to disk (useful for variable
* framerate, since sequence will be saved at 25 Hz)
* Can be changed at run-time with option "-m" */
#define DEF_WRITE_REPEATED NO
/* write bitstream trace to files trace.intra / trace
* (also option "-t") */
#define DEF_WRITE_TRACE NO
#ifdef OFFLINE_RATE_CONTROL
/* start rate control after DEF_START_RATE_CONTROL % of sequence
* has been encoded. Can be changed at run-time with option "-R <n>" */
#define DEF_START_RATE_CONTROL 0
#else
/* default target frame rate when rate control is used */
#define DEF_TARGET_FRAME_RATE 10.0
#endif
/* headerlength on concatenated 4:1:1 YUV input file
* Can be changed at run-time with option -e <headerlength> */
#define DEF_HEADERLENGTH 0
/* insert sync after each DEF_INSERT_SYNC for increased error robustness
* 0 means do not insert extra syncs */
#define DEF_INSERT_SYNC 0
/*************************************************************************/
extern int advanced;
extern int syntax_arith_coding;
extern int headerlength;
extern int pels;
extern int cpels;
extern int lines;
extern int trace;
extern int pb_frames;
extern int mv_outside_frame;
extern int long_vectors;
extern float target_framerate;
//extern FILE *tf;
/*the whole image structure*/
typedef struct pict_image {
unsigned char *lum; /* Luminance plane */
unsigned char *Cr; /* Cr plane */
unsigned char *Cb; /* Cb plane */
} PictImage;
/* MicroBlock structure */
typedef struct mb_structure {
int lum[16][16];
int Cr[8][8];
int Cb[8][8];
} MB_Structure;
typedef struct pict {
int TR; /* Time reference */
int source_format;
int picture_coding_type;
int unrestricted_mv_mode;
int PB;
int QUANT;
int BQUANT; /* which quantizer to use for B-MBs in PB-frame */
int TRB; /* Time reference for B-picture */
int bit_rate;
int src_frame_rate;
float target_frame_rate;
int DQUANT;
int MB;
int seek_dist; /* Motion vector search window */
int use_gobsync; /* flag for gob_sync */
int MODB; /* B-frame mode */
float QP_mean; /* mean quantizer */
} Pict;
/* Structure for counted bits */
typedef struct bits_counted {
int Y;
int C;
int vec;
int CBPY;
int CBPCM;
int MODB;
int CBPB;
int COD;
int header;
int DQUANT;
int total;
int no_inter;
int no_inter4v;
int no_intra;
} Bits;
/* Motionvector structure */
typedef struct motionvector {
int x; /* mv 的水平分量 */
int y; /* mv 的垂直分量 */
int x_half; /* 水平半象素 */
int y_half; /* 垂直半象素 */
int min_error; /* 该矢量的最小误差 */
int Mode; /* 宏块编码类型 */
} MotionVector;
#define NO_VEC 999
//CodeInter.cpp
void CodeOneInter(PictImage *prev,PictImage *curr,PictImage *prev_recon,PictImage *curr_recon,int QP, int frameskip, Bits *bits, Pict *pic);
void ZeroVec(MotionVector *MV);
void MarkVec(MotionVector *MV);
void CopyVec(MotionVector *MV2, MotionVector *MV1);
int EqualVec(MotionVector *MV2, MotionVector *MV1);
unsigned char *InterpolateImage(unsigned char *image, int width, int height);
void MotionEstimatePicture(unsigned char *curr, unsigned char *prev,unsigned char *prev_ipol, int seek_dist,MotionVector *MV[6][MBR+1][MBC+2], int gobsync);
void ZeroMBlock(MB_Structure *data);
//mot_est.cpp
void MotionEstimation(unsigned char *curr, unsigned char *prev, int x_curr,
int y_curr, int xoff, int yoff, int seek_dist,
MotionVector *MV[6][MBR+1][MBC+2], int *SAD_0);
unsigned char *LoadArea(unsigned char *im, int x, int y,
int x_size, int y_size, int lx);
int SAD_Macroblock(unsigned char *ii, unsigned char *act_block,
int h_length, int Min_FRAME);
int SAD_Block(unsigned char *ii, unsigned char *act_block,
int h_length, int min_sofar);
int SAD_MB_Bidir(unsigned char *ii, unsigned char *aa, unsigned char *bb,
int width, int min_sofar);
int SAD_MB_integer(int *ii, int *act_block, int h_length, int min_sofar);
void FindMB(int x, int y, unsigned char *image, int MB[16][16]);
//pred.cpp
MB_Structure *Predict_P(PictImage *curr_image, PictImage *prev_image,
unsigned char *prev_ipol, int x, int y,
MotionVector *MV[6][MBR+1][MBC+2], int PB);
MB_Structure *Predict_B(PictImage *curr_image, PictImage *prev_image,
unsigned char *prev_ipol,int x, int y,
MotionVector *MV[5][MBR+1][MBC+2],
MB_Structure *recon_P, int TRD,int TRB);
MB_Structure* MB_Recon_B(PictImage* prev_image, \
MB_Structure *diff, \
unsigned char *prev_ipol, \
int x, int y, \
MotionVector *MV[5][MBR+1][MBC+2], \
MB_Structure *recon_P, \
int TRD, int TRB);
void FindForwLumPredPB(unsigned char *prev_ipol, int x_curr, int y_curr,
MotionVector *fr, int *pred, int TRD, int TRB,
int bdx, int bdy, int bs, int comp);
void FindBiDirLumPredPB(int *recon_P, MotionVector *fr, int *pred, int TRD,
int TRB, int bdx, int bdy, int nh, int nv);
void FindBiDirChrPredPB(MB_Structure *recon_P, int dx, int dy,
MB_Structure *pred);
void FindBiDirLimits(int vec, int *start, int *stop, int nhv);
void FindBiDirChromaLimits(int vec, int *start, int *stop);
void BiDirPredBlock(int xstart, int xstop, int ystart, int ystop,
int xvec, int yvec, int *recon, int *pred, int bl);
void DoPredChrom_P(int x_curr, int y_curr, int dx, int dy,
PictImage *curr, PictImage *prev,
MB_Structure *pred_error);
void FindHalfPel(int x, int y, MotionVector *fr, unsigned char *prev,
int *curr, int bs, int comp);
void FindPred(int x, int y, MotionVector *fr, unsigned char *prev,
int *pred, int bs, int comp);
void FindPredOBMC(int x, int y, MotionVector *MV[6][MBR+1][MBC+2],
unsigned char *prev, int *pred, int comp, int PB);
MB_Structure *MB_Recon_P(PictImage *prev_image, unsigned char *prev_ipol,
MB_Structure *diff, int x_curr, int y_curr,
MotionVector *MV[6][MBR+1][MBC+2], int PB);
void ReconLumBlock_P(int x, int y, MotionVector *fr,
unsigned char *prev, int *data, int bs, int comp);
void ReconChromBlock_P(int x_curr, int y_curr, int dx, int dy,
PictImage *prev, MB_Structure *data);
void FindChromBlock_P(int x_curr, int y_curr, int dx, int dy,
PictImage *prev, MB_Structure *data);
int ChooseMode(unsigned char *curr, int x_pos, int y_pos, int min_SAD);
int ModifyMode(int Mode, int dquant);
//CodeOneIntra.cpp
PictImage *CodeOneIntra(PictImage *curr, int QP, Bits *bits, Pict *pic);
void Clip(MB_Structure *data);
void ReconImage (int i, int j, MB_Structure *data, PictImage *recon);
void Quant(int *coeff, int *qcoeff, int QP, int Mode);
void Dequant(int *qcoeff, int *rcoeff, int QP, int Mode);
void FillLumBlock( int x, int y, PictImage *image, MB_Structure *data);
void FillChromBlock(int x_curr, int y_curr, PictImage *image,MB_Structure *data);
int *MB_Encode(MB_Structure *mb_orig, int QP, int I);
int MB_Decode(int *qcoeff, MB_Structure *mb_recon, int QP, int I);
//Countbit.cpp
int CountBitsPicture(Pict *pic);
void CountBitsMB(int Mode, int COD, int CBP, int CBPB, Pict *pic, Bits *bits);
int CountBitsSlice(int slice, int quant);
void CountBitsCoeff(int *qcoeff, int Mode, int CBP, Bits *bits, int ncoeffs);
int CodeCoeff(int Mode, int *qcoeff, int block, int ncoeffs);
int FindCBP(int *qcoeff, int Mode, int ncoeffs);
void ZeroBits(Bits *bits);
void AddBits(Bits *total, Bits *bits);
void AddBitsPicture(Bits *bits);
void FindPMV(MotionVector *MV[6][MBR+1][MBC+2], int x, int y,int *pmv0, int *pmv1, int block, int newgob, int half_pel);
void CountBitsVectors(MotionVector *MV[6][MBR+1][MBC+2], Bits *bits, int x, int y, int Mode, int newgob, Pict *pic);
//Dct.cpp
int Dct( int *block, int *coeff);
int idct(int *coeff,int *block);
void init_idctref();
//IO.cpp
PictImage *FillImage(unsigned char *in);
PictImage *InitImage(int size);
extern void FreeImage(PictImage *image);
//RateControl.cpp
#ifdef OFFLINE_RATE_CONTROL
extern int FrameUpdateQP(int buf, int bits, int frames_left, int QP, int B,float seconds);
#else
extern int UpdateQuantizer(int mb, float QP_mean, int pict_type, float bit_rate,
int mb_width, int mb_height, int bitcount) ;
extern int InitializeQuantizer(int pict_type, float bit_rate,
float target_frame_rate, float QP_mean);
extern void InitializeRateControl();
extern void UpdateRateControl(int bits);
#endif
#endif //!_INC_GlobalAPI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -