📄 global.h
字号:
/*!
************************************************************************
* \file
* global.h
*
* \brief
* global definitions for H.264 encoder.
*
* \author
* Main contributors (see contributors.h for copyright, address and affiliation details)
*
************************************************************************
*/
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
#include <memory.h>
#include "win32.h"
#include "defines.h"
#include "parsetcommon.h"
#include "ifunctions.h"
#include "frame.h"
#include "nalucommon.h"
/***********************************************************************
* T y p e d e f i n i t i o n s f o r T M L
***********************************************************************
*/
#if (IMGTYPE == 0)
typedef byte imgpel;
typedef unsigned short distpel;
#else
typedef unsigned short imgpel;
typedef int distpel;
#endif
enum {
YUV400 = 0,
YUV420 = 1,
YUV422 = 2,
YUV444 = 3
} color_formats;
typedef enum
{
// YUV
PLANE_Y = 0, // PLANE_Y
PLANE_U = 1, // PLANE_Cb
PLANE_V = 2, // PLANE_Cr
// RGB
PLANE_G = 0,
PLANE_B = 1,
PLANE_R = 2,
} ColorPlane;
enum {
LIST_0 = 0,
LIST_1 = 1,
BI_PRED = 2,
BI_PRED_L0 = 3,
BI_PRED_L1 = 4
};
enum {
ERROR_SAD = 0,
ERROR_SSE = 1,
ERROR_SATD = 2,
ERROR_PSATD = 3
};
enum {
ME_Y_ONLY = 0,
ME_YUV_FP = 1,
ME_YUV_FP_SP = 2
};
enum {
DISTORTION_MSE = 0
};
//! Data Partitioning Modes
typedef enum
{
PAR_DP_1, //!< no data partitioning is supported
PAR_DP_3 //!< data partitioning with 3 partitions
} PAR_DP_TYPE;
//! Output File Types
typedef enum
{
PAR_OF_ANNEXB, //!< Annex B byte stream format
PAR_OF_RTP //!< RTP packets in outfile
} PAR_OF_TYPE;
//! Field Coding Types
typedef enum
{
FRAME_CODING,
FIELD_CODING,
ADAPTIVE_CODING,
FRAME_MB_PAIR_CODING
} CodingType;
//! definition of H.264 syntax elements
typedef enum
{
SE_HEADER,
SE_PTYPE,
SE_MBTYPE,
SE_REFFRAME,
SE_INTRAPREDMODE,
SE_MVD,
SE_CBP,
SE_LUM_DC_INTRA,
SE_CHR_DC_INTRA,
SE_LUM_AC_INTRA,
SE_CHR_AC_INTRA,
SE_LUM_DC_INTER,
SE_CHR_DC_INTER,
SE_LUM_AC_INTER,
SE_CHR_AC_INTER,
SE_DELTA_QUANT,
SE_BFRAME,
SE_EOS,
SE_MAX_ELEMENTS //!< number of maximum syntax elements
} SE_type; // substituting the definitions in elements.h
typedef enum
{
INTER_MB,
INTRA_MB_4x4,
INTRA_MB_16x16
} IntraInterDecision;
typedef enum
{
BITS_HEADER,
BITS_TOTAL_MB,
BITS_MB_MODE,
BITS_INTER_MB,
BITS_CBP_MB,
BITS_COEFF_Y_MB,
BITS_COEFF_UV_MB,
BITS_COEFF_CB_MB,
BITS_COEFF_CR_MB,
BITS_DELTA_QUANT_MB,
BITS_STUFFING,
MAX_BITCOUNTER_MB
} BitCountType;
typedef enum
{
NO_SLICES,
FIXED_MB,
FIXED_RATE,
CALL_BACK,
} SliceMode;
typedef enum
{
CAVLC,
CABAC
} SymbolMode;
typedef enum
{
FULL_SEARCH = -1,
FAST_FULL_SEARCH = 0,
UM_HEX = 1,
UM_HEX_SIMPLE = 2,
EPZS = 3
} SearchType;
typedef enum
{
FRAME,
TOP_FIELD,
BOTTOM_FIELD
} PictureStructure; //!< New enum for field processing
typedef enum
{
P_SLICE = 0,
B_SLICE = 1,
I_SLICE = 2,
SP_SLICE = 3,
SI_SLICE = 4,
NUM_SLICE_TYPES = 5
} SliceType;
//Motion Estimation levels
typedef enum
{
F_PEL, //!< Full Pel refinement
H_PEL, //!< Half Pel refinement
Q_PEL //!< Quarter Pel refinement
} MELevel;
typedef enum
{
FAST_ACCESS = 0, //!< Fast/safe reference access
UMV_ACCESS = 1 //!< unconstrained reference access
} REF_ACCESS_TYPE;
typedef enum
{
IS_LUMA = 0,
IS_CHROMA = 1
} Component_Type;
typedef enum
{
RC_MODE_0 = 0,
RC_MODE_1 = 1,
RC_MODE_2 = 2,
RC_MODE_3 = 3
} RCModeType;
/***********************************************************************
* D a t a t y p e s f o r C A B A C
***********************************************************************
*/
//! struct to characterize the state of the arithmetic coding engine
typedef struct
{
unsigned int Elow, Erange;
unsigned int Ebuffer;
unsigned int Ebits_to_go;
unsigned int Echunks_outstanding;
int Epbuf;
byte *Ecodestrm;
int *Ecodestrm_len;
int C;
int E;
} EncodingEnvironment;
typedef EncodingEnvironment *EncodingEnvironmentPtr;
//! struct for context management
typedef struct
{
unsigned long count;
unsigned short state; // index into state-table CP
unsigned char MPS; // Least Probable Symbol 0/1 CP
} BiContextType;
typedef BiContextType *BiContextTypePtr;
/**********************************************************************
* C O N T E X T S F O R T M L S Y N T A X E L E M E N T S
**********************************************************************
*/
#define NUM_MB_TYPE_CTX 11
#define NUM_B8_TYPE_CTX 9
#define NUM_MV_RES_CTX 10
#define NUM_REF_NO_CTX 6
#define NUM_DELTA_QP_CTX 4
#define NUM_MB_AFF_CTX 4
#define NUM_TRANSFORM_SIZE_CTX 3
typedef struct
{
BiContextType mb_type_contexts [3][NUM_MB_TYPE_CTX];
BiContextType b8_type_contexts [2][NUM_B8_TYPE_CTX];
BiContextType mv_res_contexts [2][NUM_MV_RES_CTX];
BiContextType ref_no_contexts [2][NUM_REF_NO_CTX];
BiContextType delta_qp_contexts [NUM_DELTA_QP_CTX];
BiContextType mb_aff_contexts [NUM_MB_AFF_CTX];
BiContextType transform_size_contexts [NUM_TRANSFORM_SIZE_CTX];
} MotionInfoContexts;
#define NUM_IPR_CTX 2
#define NUM_CIPR_CTX 4
#define NUM_CBP_CTX 4
#define NUM_BCBP_CTX 4
#define NUM_MAP_CTX 15
#define NUM_LAST_CTX 15
#define NUM_ONE_CTX 5
#define NUM_ABS_CTX 5
typedef struct
{
BiContextType ipr_contexts [NUM_IPR_CTX];
BiContextType cipr_contexts[NUM_CIPR_CTX];
BiContextType cbp_contexts [3][NUM_CBP_CTX];
BiContextType bcbp_contexts[NUM_BLOCK_TYPES][NUM_BCBP_CTX];
#if ENABLE_FIELD_CTX
BiContextType map_contexts [3][NUM_BLOCK_TYPES][NUM_MAP_CTX];
BiContextType last_contexts[3][NUM_BLOCK_TYPES][NUM_LAST_CTX];
#else
BiContextType map_contexts [1][NUM_BLOCK_TYPES][NUM_MAP_CTX];
BiContextType last_contexts[1][NUM_BLOCK_TYPES][NUM_LAST_CTX];
#endif
BiContextType one_contexts [NUM_BLOCK_TYPES][NUM_ONE_CTX];
BiContextType abs_contexts [NUM_BLOCK_TYPES][NUM_ABS_CTX];
} TextureInfoContexts;
//*********************** end of data type definition for CABAC *******************
//! Pixel position for checking neighbors
typedef struct pix_pos
{
int available;
int mb_addr;
int x;
int y;
int pos_x;
int pos_y;
} PixelPos;
//! Buffer structure for decoded reference picture marking commands
typedef struct DecRefPicMarking_s
{
int memory_management_control_operation;
int difference_of_pic_nums_minus1;
int long_term_pic_num;
int long_term_frame_idx;
int max_long_term_frame_idx_plus1;
struct DecRefPicMarking_s *Next;
} DecRefPicMarking_t;
//! Syntax Element
typedef struct syntaxelement
{
int type; //!< type of syntax element for data part.
int value1; //!< numerical value of syntax element
int value2; //!< for blocked symbols, e.g. run/level
int len; //!< length of code
int inf; //!< info part of UVLC code
unsigned int bitpattern; //!< UVLC bitpattern
int context; //!< CABAC context
#if TRACE
#define TRACESTRING_SIZE 100 //!< size of trace string
char tracestring[TRACESTRING_SIZE]; //!< trace string
#endif
//!< for mapping of syntaxElement to UVLC
void (*mapping)(int value1, int value2, int* len_ptr, int* info_ptr);
} SyntaxElement;
//! Macroblock
typedef struct macroblock
{
short slice_nr;
short delta_qp;
int qp; //!< QP luma
int qpc[2]; //!< QP chroma
int qp_scaled[MAX_PLANE]; //!< QP scaled for all comps.
int qpsp ;
int bitcounter[MAX_BITCOUNTER_MB];
int mb_type;
short mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2]; //!< indices correspond to [list][block_y][block_x][x,y]
int cbp ;
short b8mode[4];
short b8pdir[4];
int c_ipred_mode; //!< chroma intra prediction mode
char IntraChromaPredModeFlag;
byte mb_field;
int is_field_mode;
int list_offset;
int mbAddrA, mbAddrB, mbAddrC, mbAddrD, mbAddrX;
int mbAvailA, mbAvailB, mbAvailC, mbAvailD;
int all_blk_8x8;
int luma_transform_size_8x8_flag;
int NoMbPartLessThan8x8Flag;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -