📄 global.h
字号:
EXTERN int display_vertical_size;
/////////////////////////////////////
EXTERN BOOL SEQEND;
EXTERN double factor;
EXTERN BOOL OK_ID;
EXTERN long tframe,tsec,tminute,thour;
EXTERN long TotalFrame;
EXTERN long MaxFrame;
#define PAL 1
#define NTSC 2
EXTERN _int64 FileSize;
EXTERN struct header_data {
long headsize;
long totalframe;
/* normative derived variables (as per ISO/IEC 13818-2) */
short horizontal_size;
short vertical_size;
short mb_width;
short mb_height;
double bit_rate;
double frame_rate;
/* headers */
/* ISO/IEC 13818-2 section 6.2.2.1: sequence_header() */
short aspect_ratio_information;
/* ISO/IEC 13818-2 section 6.2.2.3: sequence_extension() */
short chroma_format;
/* ISO/IEC 13818-2 section 6.2.2.4: sequence_display_extension() */
short video_format;
short color_primaries;
short transfer_characteristics;
short matrix_coefficients;
short display_horizontal_size;
short display_vertical_size;
long res1;
long res2;
long res3;
long res4;
};
/* ISO/IEC 13818-2 section 6.2.3: picture_header() */EXTERN int temporal_reference;EXTERN int picture_coding_type;EXTERN int vbv_delay;EXTERN int full_pel_forward_vector;EXTERN int forward_f_code;EXTERN int full_pel_backward_vector;EXTERN int backward_f_code;/* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */EXTERN int f_code[2][2];EXTERN int intra_dc_precision;EXTERN int picture_structure;EXTERN int top_field_first;EXTERN int frame_pred_frame_dct;EXTERN int concealment_motion_vectors;EXTERN int intra_vlc_format;EXTERN int repeat_first_field;EXTERN int chroma_420_type;EXTERN int progressive_frame;EXTERN int composite_display_flag;EXTERN int v_axis;EXTERN int field_sequence;EXTERN int sub_carrier;EXTERN int burst_amplitude;EXTERN int sub_carrier_phase;/* ISO/IEC 13818-2 section 6.2.3.3: picture_display_extension() header */EXTERN int frame_center_horizontal_offset[3];EXTERN int frame_center_vertical_offset[3];/* ISO/IEC 13818-2 section 6.2.2.5: sequence_scalable_extension() header */EXTERN int layer_id;EXTERN int lower_layer_prediction_horizontal_size;EXTERN int lower_layer_prediction_vertical_size;EXTERN int horizontal_subsampling_factor_m;EXTERN int horizontal_subsampling_factor_n;EXTERN int vertical_subsampling_factor_m;EXTERN int vertical_subsampling_factor_n;/* ISO/IEC 13818-2 section 6.2.3.5: picture_spatial_scalable_extension() header */EXTERN int lower_layer_temporal_reference;EXTERN int lower_layer_horizontal_offset;EXTERN int lower_layer_vertical_offset;EXTERN int spatial_temporal_weight_code_table_index;EXTERN int lower_layer_progressive_frame;EXTERN int lower_layer_deinterlaced_field_select;/* ISO/IEC 13818-2 section 6.2.3.6: copyright_extension() header */EXTERN int copyright_flag;EXTERN int copyright_identifier;EXTERN int original_or_copy;EXTERN int copyright_number_1;EXTERN int copyright_number_2;EXTERN int copyright_number_3;/* ISO/IEC 13818-2 section 6.2.2.6: group_of_pictures_header() */EXTERN int drop_flag;EXTERN int hour;EXTERN int minute;EXTERN int sec;EXTERN int frame;EXTERN int closed_gop;EXTERN int broken_link;/* layer specific variables (needed for SNR and DP scalability) */EXTERN struct layer_data { /* bit input */ int Infile;
LPBYTE lpData;
long length;
long size;
long mode; unsigned char Rdbfr[2048]; unsigned char *Rdptr; unsigned char Inbfr[16]; /* from mpeg2play */ unsigned int Bfr; unsigned char *Rdmax; int Incnt; int Bitcnt; /* sequence header and quant_matrix_extension() */ int intra_quantizer_matrix[64]; int non_intra_quantizer_matrix[64]; int chroma_intra_quantizer_matrix[64]; int chroma_non_intra_quantizer_matrix[64]; int load_intra_quantizer_matrix; int load_non_intra_quantizer_matrix; int load_chroma_intra_quantizer_matrix; int load_chroma_non_intra_quantizer_matrix; int MPEG2_Flag; /* sequence scalable extension */ int scalable_mode; /* picture coding extension */ int q_scale_type; int alternate_scan; /* picture spatial scalable extension */ int pict_scal; /* slice/macroblock */ int priority_breakpoint; int quantizer_scale; int intra_slice; short block[12][64];} base, enhan, *ld;///
EXTERN struct environment_data {
short hFilesize;
int infile;
long I_position;
long I_bitno;
long I_sqeno;
_int64 cur_position;
long cur_bitno;
long cur_sqeno;
short N;
short M;
short hour;
short minute;
short sec;
short frame;
short lframe;
short thour;
short tminute;
short tsec;
short tframe;
short tlframe;
int System_Stream_Flag;
double factor;
int block_count;
int OK_ID;
_int64 FileSize;
/* pointers to generic picture buffers */
unsigned char *backward_reference_frame[3];
unsigned char *forward_reference_frame[3];
unsigned char *auxframe[3];
unsigned char *current_frame[3];
unsigned char *substitute_frame[3];
long mb_width;
long mb_height;
long Chroma_Width;
long Chroma_Height;
/* pointers to scalability picture buffers */
unsigned char *llframe0[3];
unsigned char *llframe1[3];
long res1;
long res2;
long res3;
long res4;
layer_data *ld;
long mode;
long total;
long width;
long height;
long color;
long frameno;
double frame_rate;
};
#ifdef VERIFYEXTERN int verify_sequence_header;EXTERN int verify_group_of_pictures_header;EXTERN int verify_picture_header;EXTERN int verify_slice_header;EXTERN int verify_sequence_extension;EXTERN int verify_sequence_display_extension;EXTERN int verify_quant_matrix_extension;EXTERN int verify_sequence_scalable_extension;EXTERN int verify_picture_display_extension;EXTERN int verify_picture_coding_extension;EXTERN int verify_picture_spatial_scalable_extension;EXTERN int verify_picture_temporal_scalable_extension;EXTERN int verify_copyright_extension;#endif /* VERIFY */EXTERN int Decode_Layer;/* verify.c */#ifdef VERIFYEXTERN void Check_Headers (int Bitstream_Framenum, int Sequence_Framenum);EXTERN void Clear_Verify_Headers (void);#endif /* VERIFY */EXTERN int global_MBA;EXTERN int global_pic;EXTERN int True_Framenum;
EXTERN unsigned char* Framedst;
/*宏函数定义*/
#define SHOW_BITS(N) (ld->Bfr >> (32-(N)))
#define GET_BITS1() Get_Bits(1)
#define FLUSH_BUFFER(N) { \
int Incnt;ld->Bfr <<= N;Incnt = (ld->Incnt -= N); \
if (Incnt <= 24) { \
if (System_Stream_Flag && (ld->Rdptr >= ld->Rdmax-4)) { \
do { \
if (ld->Rdptr >= ld->Rdmax) Next_Packet(); \
ld->Bfr |= Get_Byte() << (24 - Incnt); \
Incnt += 8; \
} while (Incnt <= 24); \
} \
else if (ld->Rdptr < ld->Rdbfr+2044) { \
do { \
ld->Bfr |= *ld->Rdptr++ << (24 - Incnt); \
Incnt += 8; \
} while (Incnt <= 24); \
} \
else { \
do { \
if (ld->Rdptr >= ld->Rdbfr+2048) Fill_Buffer(); \
ld->Bfr |= *ld->Rdptr++ << (24 - Incnt); \
Incnt += 8; \
} while (Incnt <= 24); \
} \
ld->Incnt = Incnt; \
} \
}
#define FILL_BUFFER() { \
int Buffer_Level; \
Buffer_Level = read(ld->Infile,ld->Rdbfr,2048); \
ld->Rdptr = ld->Rdbfr; \
if (System_Stream_Flag) ld->Rdmax -= 2048; \
\
/* end of the bitstream file */ \
if (Buffer_Level < 2048) { \
/* just to be safe */ \
if (Buffer_Level < 0) Buffer_Level = 0; \
/* pad until the next to the next 32-bit word boundary */ \
while (Buffer_Level & 3) ld->Rdbfr[Buffer_Level++] = 0; \
\
/* pad the buffer with sequence end codes */ \
while (Buffer_Level < 2048) { \
ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>24; \
ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>16; \
ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE>>8; \
ld->Rdbfr[Buffer_Level++] = SEQUENCE_END_CODE&0xff; \
} \
} \
}
/*内联函数定义*/
inline unsigned int Show_Bits (int N){
return ld->Bfr >> (32-N);
}
inline int Get_Byte (){
long e;
if(ld->Rdptr >= ld->Rdbfr+2048){
if(ld->mode==0){
e=read(ld->Infile,ld->Rdbfr,2048);
ld->Rdptr -= 2048;
ld->Rdmax -= 2048;
ld->length+=e;
long Buffer_Level =e;
if(e <2048){
SEQEND=true;
return 0;
}
}
else{
if(ld->size>=2048){
memcpy(ld->Rdbfr,ld->lpData,2048);
ld->Rdptr -= 2048;
ld->Rdmax -= 2048;
ld->lpData+=2048;
ld->size-=2048;
ld->length+=2048;
e=2048;
}
else if(ld->size>0&&ld->size<2048){
memcpy(ld->Rdbfr,ld->lpData,ld->size);
ld->Rdptr = ld->Rdbfr;
ld->lpData+=ld->size;
ld->size=0;
ld->Rdmax -= ld->size;
ld->length+=ld->size;
e=ld->size;
}
if(e <2048){
SEQEND=true;
return 0;
}
}
}
return *ld->Rdptr++;
}
inline unsigned int Get_Bits (int N){
unsigned int Val;
Val = SHOW_BITS(N);
FLUSH_BUFFER(N);
return Val;
}
inline int Get_Word (void){
int Val;
Val = Get_Byte();
return (Val<<8) | Get_Byte();
};
inline unsigned int Get_Bits1 (void){
return Get_Bits(1);
};
inline int Get_Long (void){
int i;
i = Get_Word();
return (i<<16) | Get_Word();
};
inline unsigned int Get_Bits32 (void){
unsigned int l;
l = Show_Bits(32);
Flush_Buffer32();
return l;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -