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

📄 global.h

📁 mpeg2编码解码源程序代码
💻 H
📖 第 1 页 / 共 3 页
字号:
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 + -