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

📄 global.h

📁 DVD转换到AVI的源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Copyright (C) 1996, MPEG Software Simulation Group. All Rights Reserved. */

/*
 * Disclaimer of Warranty
 *
 * These software programs are available to the user without any license fee or
 * royalty on an "as is" basis.  The MPEG Software Simulation Group disclaims
 * any and all warranties, whether express, implied, or statuary, including any
 * implied warranties or merchantability or of fitness for a particular
 * purpose.  In no event shall the copyright-holder be liable for any
 * incidental, punitive, or consequential damages of any kind whatsoever
 * arising from the use of these programs.
 *
 * This disclaimer of warranty extends to the user of these programs and user's
 * customers, employees, agents, transferees, successors, and assigns.
 *
 * The MPEG Software Simulation Group does not represent or warrant that the
 * programs furnished hereunder are free of infringement of any third-party
 * patents.
 *
 * Commercial implementations of MPEG-1 and MPEG-2 video, including shareware,
 * are subject to royalty fees to patent holders.  Many of these patents are
 * general enough such that they are unavoidable regardless of implementation
 * design.
 *
 */

#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <ddraw.h>
#include <vfw.h>
#include <winreg.h>
#include <direct.h>
#include <io.h>
#include <fcntl.h>
#include "resource.h"

/* code definition */
#define PICTURE_START_CODE			0x100
#define SLICE_START_CODE_MIN		0x101
#define SLICE_START_CODE_MAX		0x1AF
#define USER_DATA_START_CODE		0x1B2
#define SEQUENCE_HEADER_CODE		0x1B3
#define EXTENSION_START_CODE		0x1B5
#define SEQUENCE_END_CODE			0x1B7
#define GROUP_START_CODE			0x1B8

#define SYSTEM_END_CODE				0x1B9
#define PACK_START_CODE				0x1BA
#define SYSTEM_START_CODE			0x1BB

#define VIDEO_ELEMENTARY_STREAM		0x1E0

#define PRIVATE_STREAM_1			0x1BD
#define PRIVATE_STREAM_2			0x1BF
#define AUDIO_ELEMENTARY_STREAM_0	0x1C0
#define AUDIO_ELEMENTARY_STREAM_1	0x1C1
#define AUDIO_ELEMENTARY_STREAM_2	0x1C2
#define AUDIO_ELEMENTARY_STREAM_3	0x1C3
#define AUDIO_ELEMENTARY_STREAM_4	0x1C4
#define AUDIO_ELEMENTARY_STREAM_5	0x1C5
#define AUDIO_ELEMENTARY_STREAM_6	0x1C6
#define AUDIO_ELEMENTARY_STREAM_7	0x1C7

#define SUB_SUB						0x20
#define SUB_AC3						0x80
#define SUB_DTS						0x88
#define SUB_PCM						0xA0

/* extension start code IDs */
#define SEQUENCE_EXTENSION_ID					1
#define SEQUENCE_DISPLAY_EXTENSION_ID			2
#define QUANT_MATRIX_EXTENSION_ID				3
#define COPYRIGHT_EXTENSION_ID					4
#define PICTURE_DISPLAY_EXTENSION_ID			7
#define PICTURE_CODING_EXTENSION_ID				8

#define ZIG_ZAG									0
#define MB_WEIGHT								32
#define MB_CLASS4								64

#define I_TYPE			1
#define P_TYPE			2
#define B_TYPE			3

#define MACROBLOCK_INTRA				1
#define MACROBLOCK_PATTERN				2
#define MACROBLOCK_MOTION_BACKWARD		4
#define MACROBLOCK_MOTION_FORWARD		8
#define MACROBLOCK_QUANT				16

#define TOP_FIELD		1
#define BOTTOM_FIELD	2
#define FRAME_PICTURE	3

#define MC_FIELD		1
#define MC_FRAME		2
#define MC_16X8			2
#define MC_DMV			3

#define MV_FIELD		0
#define MV_FRAME		1

#define CHROMA420		1
#define CHROMA422		2
#define CHROMA444		3

#define BUFFER_SIZE				2048
#define MAX_FILE_NUMBER			256

#define STORE_RGB24		1
#define STORE_YUY2		2

#define IDCT_MMX		1
#define	IDCT_FPU		2
#define IDCT_REF		3

#define LOCATE_INIT			0
#define LOCATE_FORWARD		1
#define LOCATE_BACKWARD		-1
#define LOCATE_SCROLL		2
#define LOCATE_RIP			3

#define CHANNEL				8

#define TRACK_NONE		255
#define TRACK_1			0
#define TRACK_2			1
#define TRACK_3			2
#define TRACK_4			3
#define TRACK_5			4
#define TRACK_6			5
#define TRACK_7			6
#define TRACK_8			7

#define FORMAT_AUTO			0
#define FORMAT_AC3			1
#define FORMAT_MPA			2
#define FORMAT_LPCM			3
#define FORMAT_DTS			4

#define AUDIO_DEMUXALL		0
#define AUDIO_DEMUXONE		1
#define AUDIO_DECODE		2

#define DRC_NONE		0
#define DRC_LIGHT		1
#define DRC_NORMAL		2
#define DRC_HEAVY		3

#define FO_NONE			0
#define FO_FILM			1
#define FO_SWAP			2

#define SRC_NONE		0
#define SRC_LOW			1
#define SRC_MID			2
#define SRC_HIGH		3
#define SRC_UHIGH		4

#define TRACK_PITCH		500

#define CRITICAL_ERROR_LEVEL	50

typedef struct {
	int			type;
	int			file;
	__int64		lba;
	int			pf;
	int			trf;
}	D2VData;
D2VData d2v_backward, d2v_forward, d2v_current;

int CH[CHANNEL];
short Sound_Max;

typedef struct {
	FILE					*file;
	int						rip;
	unsigned int			mode;
	unsigned int			rate;
}	AC3Stream;
AC3Stream ac3[CHANNEL];

typedef struct {
	FILE					*file;
	int						rip;
	int						delay;
}	MPAStream;
MPAStream mpa[CHANNEL];

struct PCMStream {
	FILE					*file;
	char					filename[_MAX_PATH];
	int						rip;
	int						size;
	int						delay;
}	pcm;

struct PROCESS {
	__int64					length[MAX_FILE_NUMBER];
	__int64					total;
	__int64					run;
	__int64					start;
	__int64					end;
	int						trackleft;
	int						trackright;
	int						locate;
	int						startfile;
	__int64					startloc;
	int						endfile;
	__int64					endloc;
	int						file;
	__int64					lba;
	int						leftfile;
	__int64					leftlba;
	int						rightfile;
	__int64					rightlba;
	unsigned int			op;
	unsigned int			ed;
	unsigned int			elapsed;
	unsigned int			remain;
	float					percent;
}	process;

struct CPU {
	BOOL					mmx;
	BOOL					amd;
	BOOL					sse;
}	cpu;

/* decoder operation control flags */
int AVI_Flag;
int Check_Flag;
int D2V_Flag;
int DDOverlay_Flag;
int Display_Flag;
int Fault_Flag;
int File_Flag;
int File_Limit;
int FO_Flag;
int iDCT_Flag;
int Luminance_Flag;
int Pause_Flag;
int Rip_Flag;
int Scale_Flag;
int Statistics_Flag;
int Stop_Flag;
int Store_Flag;
int SystemStream_Flag;

unsigned int Track_Flag;
int Format_Flag;
int AC3_Flag;
int MPA_Flag;
int DRC_Flag;
int DSDown_Flag;
int SRC_Flag;
int Normalization_Flag;
int Norm_Ratio;

/* DirectDraw & GDI resources */
LPDIRECTDRAW lpDD;
LPDIRECTDRAW2 lpDD2;
LPDIRECTDRAWSURFACE lpPrimary, lpOverlay;
DDCAPS halcaps;
DDSURFACEDESC ddsd;
DDOVERLAYFX ddofx;
RECT wrect, crect, orect, prect;
HDC hDC;

BITMAPINFOHEADER birgb;
LPBITMAPINFOHEADER lpbirgb
#ifdef GLOBAL
= &birgb
#endif
;

BITMAPINFOHEADER biyuv;
LPBITMAPINFOHEADER lpbiyuv
#ifdef GLOBAL
= &biyuv
#endif
;

/* Global Value */
FILE *D2VFile;
HWND hWnd, hDlg, hTrack, hLeftButton, hLeftArrow, hRightArrow, hRightButton;
char szInput[_MAX_PATH], szOutput[_MAX_PATH], szBuffer[_MAX_PATH], szBlank[1];

unsigned char *backward_reference_frame[3], *forward_reference_frame[3];
unsigned char *auxframe[3], *current_frame[3];
unsigned char *u422, *v422, *u444, *v444, *rgb24, *yuy2, *lum;
__int64 YUVRGB_Scale, YUVRGB_Offset, LumOffsetMask, LumGainMask;

int Edge_Width, Edge_Height;
unsigned short VOB_ID, CELL_ID;
int VideoPTS, AudioPTS;
unsigned int Frame_Number;

int Coded_Picture_Width, Coded_Picture_Height, Chroma_Width, Chroma_Height;
int block_count, Second_Field;
int horizontal_size, vertical_size, mb_width, mb_height;

float frame_rate, Frame_Rate;
int Video_Type, FILM_Purity, NTSC_Purity, Bitrate_Meter;

int Crop_Top, Crop_Bottom, Crop_Left, Crop_Right;

int Infile[MAX_FILE_NUMBER];
char Infilename[MAX_FILE_NUMBER][_MAX_PATH];

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 q_scale_type;
int alternate_scan;
int quantizer_scale;

short *block[8], *p_block[8];
void *fTempArray, *p_fTempArray;

/* ISO/IEC 13818-2 section 6.2.2.1:  sequence_header() */
int frame_rate_code;
int aspect_ratio_information;

/* ISO/IEC 13818-2 section 6.2.2.3:  sequence_extension() */
int progressive_sequence;
int chroma_format;

/* ISO/IEC 13818-2 section 6.2.3: picture_header() */
int picture_coding_type;
int temporal_reference;

/* ISO/IEC 13818-2 section 6.2.3.1: picture_coding_extension() header */
int f_code[2][2];
int picture_structure;
int frame_pred_frame_dct;
int progressive_frame;
int concealment_motion_vectors;
int intra_dc_precision;
int top_field_first;
int repeat_first_field;
int intra_vlc_format;

/* gethdr.c */
int Get_Hdr(void);
void next_start_code(void);
void sequence_header(void);
int slice_header(void);

/* getpic.c */
void Decode_Picture(void);

/* gui.cpp */
void ThreadKill(void);
void CheckDirectDraw(int width, int height);
void ResizeWindow(int width, int height);

/* idct */
void MMX_IDCT(short *block);
void Initialize_FPU_IDCT(void);
void FPU_IDCT(short *block);
void Initialize_REF_IDCT(void);
void REF_IDCT(short *block);

/* motion.c */
void motion_vectors(int PMV[2][2][2], int dmvector[2], int motion_vertical_field_select[2][2], 
	int s, int motion_vector_count, int mv_format, int h_r_size, int v_r_size, int dmv, int mvscale);
void Dual_Prime_Arithmetic(int DMV[][2], int *dmvector, int mvx, int mvy);

/* mpeg2dec.c */
DWORD WINAPI MPEG2Dec(PVOID pvoid);

/* norm.c */
void Normalize(FILE *WaveIn, int WaveInPos, char *filename, FILE *WaveOut, int WaveOutPos, int size);

/* store.c */
void Write_Frame(unsigned char *src[], D2VData d2v, DWORD frame);
void RenderYUY2(void);
void RenderRGB24(void);
int DetectVideoType(int frame, int rff);

/* wavefs44.c */
void InitialSRC(void);
void Wavefs44(FILE *file, int size, unsigned char *buffer);
void EndSRC(FILE *file);
void Wavefs44File(int delay, int now, int total);
void EndWAV(FILE *file, int size);
void DownWAV(FILE *file);
BOOL CheckWAV(void);

unsigned char WAVHeader[44]
#ifdef GLOBAL
=
{
	0x52, 0x49, 0x46, 0x46, 0x00, 0x00, 0x00, 0x00,
	0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74, 0x20,
	0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
	0x80, 0xbb, 0x00, 0x00, 0x00, 0xee, 0x02, 0x00,
	0x04, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61,
	0x00, 0x00, 0x00, 0x00
}
#endif
;

char *AC3Mode[8]
#ifdef GLOBAL
=
{
	"1+1", "1/0", "2/0", "3/0", "2/1", "3/1", "2/2", "3/2"
}
#endif
;

int AC3Rate[32]
#ifdef GLOBAL
=
{
	32, 40, 48, 56, 64, 80, 96, 112, 128, 160,
	192, 224, 256, 320, 384, 448, 512, 576, 640,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}
#endif
;

/* default intra quantization matrix */
unsigned char default_intra_quantizer_matrix[64]
#ifdef GLOBAL
=
{
	8, 16, 19, 22, 26, 27, 29, 34,
	16, 16, 22, 24, 27, 29, 34, 37,
	19, 22, 26, 27, 29, 34, 34, 38,
	22, 22, 26, 27, 29, 34, 37, 40,
	22, 26, 27, 29, 32, 35, 40, 48,
	26, 27, 29, 32, 35, 40, 48, 58,
	26, 27, 29, 34, 38, 46, 56, 69,
	27, 29, 35, 38, 46, 56, 69, 83
}
#endif
;

/* zig-zag and alternate scan patterns */
unsigned char scan[2][64]
#ifdef GLOBAL
=
{
	{ // Zig-Zag scan pattern
		0,  1,  8, 16,  9,  2,  3, 10,
	   17, 24, 32, 25, 18, 11,  4,  5,
	   12, 19, 26, 33, 40, 48, 41, 34,
	   27, 20, 13,  6,  7, 14, 21, 28,
	   35, 42, 49, 56, 57, 50, 43, 36,
	   29, 22, 15, 23, 30, 37, 44, 51,
	   58, 59, 52, 45, 38, 31, 39, 46,
	   53, 60, 61, 54, 47, 55, 62, 63
	}
	,
	{ // Alternate scan pattern
		0,  8, 16, 24,  1,  9,  2, 10,
	   17, 25, 32, 40, 48, 56, 57, 49,
	   41, 33, 26, 18,  3, 11, 4,  12,
	   19, 27, 34, 42, 50, 58, 35, 43,
	   51, 59, 20, 28,  5, 13,  6, 14,
	   21, 29, 36, 44, 52, 60, 37, 45,
	   53, 61, 22, 30,  7, 15, 23, 31,
	   38, 46, 54, 62, 39, 47, 55, 63
	}
}
#endif
;

⌨️ 快捷键说明

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