📄 gui.cpp
字号:
{
CheckMenuItem(hMenu, IDM_TRACK_NONE, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_1, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_2, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_3, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_4, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_5, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_6, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_7, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TRACK_8, MF_UNCHECKED);
}
static void CheckCPU()
{
__asm
{
mov eax, 1
cpuid
test edx, 0x00800000
jz TEST_SSE
mov [cpu.mmx], 1
TEST_SSE:
test edx, 0x02000000
jz TEST_AMD
mov [cpu.sse], 1
TEST_AMD:
mov eax, 0x80000001
cpuid
test edx, 0x80000000
jz TEST_END
mov [cpu.amd], 1
TEST_END:
}
if (cpu.mmx)
CheckMenuItem(hMenu, IDM_MMX, MF_CHECKED);
if (cpu.sse)
CheckMenuItem(hMenu, IDM_SSE, MF_CHECKED);
if (cpu.amd)
CheckMenuItem(hMenu, IDM_AMD, MF_CHECKED);
EnableMenuItem(hMenu, IDM_SSE, MF_GRAYED);
EnableMenuItem(hMenu, IDM_AMD, MF_GRAYED);
}
static void CheckINI()
{
if ((INIFile = fopen("DVD2AVI.ini", "r")) == NULL)
{
NEW_VERSION:
INIT_X = 0;
INIT_Y = 0;
INI_Version = INI_VERSION;
iDCT_Flag = IDCT_MMX;
Scale_Flag = true;
FO_Flag = FO_NONE;
Track_Flag = TRACK_1;
Format_Flag = FORMAT_AUTO;
AC3_Flag = AUDIO_DECODE;
DRC_Flag = DRC_NORMAL;
DSDown_Flag = false;
MPA_Flag = AUDIO_DEMUXONE;
SRC_Flag = SRC_NONE;
Norm_Ratio = 100;
Priority_Flag = PRIORITY_NORMAL;
}
else
{
fscanf(INIFile, "INI_Version=%d\n", &INI_Version);
if (INI_Version != INI_VERSION)
{
fclose(INIFile);
goto NEW_VERSION;
}
fscanf(INIFile, "INIT_X=%d\n", &INIT_X);
fscanf(INIFile, "INIT_Y=%d\n", &INIT_Y);
fscanf(INIFile, "iDCT_Algorithm=%d\n", &iDCT_Flag);
fscanf(INIFile, "YUVRGB_Scale=%d\n", &Scale_Flag);
fscanf(INIFile, "Field_Operation=%d\n", &FO_Flag);
fscanf(INIFile, "Track_Number=%d\n", &Track_Flag);
fscanf(INIFile, "Channel_Format=%d\n", &Format_Flag);
fscanf(INIFile, "AC3=%d\n", &AC3_Flag);
fscanf(INIFile, "DR_Control=%d\n", &DRC_Flag);
fscanf(INIFile, "DS_Downmix=%d\n", &DSDown_Flag);
fscanf(INIFile, "MPA=%d\n", &MPA_Flag);
fscanf(INIFile, "SRC_Precision=%d\n", &SRC_Flag);
fscanf(INIFile, "Norm_Ratio=%d\n", &Norm_Ratio);
fscanf(INIFile, "Process_Priority=%d\n", &Priority_Flag);
fclose(INIFile);
}
}
static void CheckFlag()
{
CheckMenuItem(hMenu, IDM_IDCT_MMX, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_IDCT_FPU, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_IDCT_REF, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_PCSCALE, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_TVSCALE, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);
switch (iDCT_Flag)
{
case IDCT_MMX:
CheckMenuItem(hMenu, IDM_IDCT_MMX, MF_CHECKED);
break;
case IDCT_FPU:
CheckMenuItem(hMenu, IDM_IDCT_FPU, MF_CHECKED);
break;
case IDCT_REF:
CheckMenuItem(hMenu, IDM_IDCT_REF, MF_CHECKED);
break;
}
if (Scale_Flag)
{
YUVRGB_Scale = 0x1000254310002543;
YUVRGB_Offset = 0x0010001000100010;
CheckMenuItem(hMenu, IDM_PCSCALE, MF_CHECKED);
}
else
{
YUVRGB_Scale = 0x1000200010002000;
YUVRGB_Offset = 0x0000000000000000;
CheckMenuItem(hMenu, IDM_TVSCALE, MF_CHECKED);
}
switch (FO_Flag)
{
case FO_NONE:
CheckMenuItem(hMenu, IDM_FO_NONE, MF_CHECKED);
CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_FO_SWAP, MF_UNCHECKED);
break;
case FO_FILM:
CheckMenuItem(hMenu, IDM_FO_NONE, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_FO_FILM, MF_CHECKED);
CheckMenuItem(hMenu, IDM_FO_SWAP, MF_UNCHECKED);
break;
case FO_SWAP:
CheckMenuItem(hMenu, IDM_FO_NONE, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_FO_FILM, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_FO_SWAP, MF_CHECKED);
break;
}
switch (Track_Flag)
{
case TRACK_NONE:
CheckMenuItem(hMenu, IDM_TRACK_NONE, MF_CHECKED);
break;
case TRACK_1:
CheckMenuItem(hMenu, IDM_TRACK_1, MF_CHECKED);
break;
case TRACK_2:
CheckMenuItem(hMenu, IDM_TRACK_2, MF_CHECKED);
break;
case TRACK_3:
CheckMenuItem(hMenu, IDM_TRACK_3, MF_CHECKED);
break;
case TRACK_4:
CheckMenuItem(hMenu, IDM_TRACK_4, MF_CHECKED);
break;
case TRACK_5:
CheckMenuItem(hMenu, IDM_TRACK_5, MF_CHECKED);
break;
case TRACK_6:
CheckMenuItem(hMenu, IDM_TRACK_6, MF_CHECKED);
break;
case TRACK_7:
CheckMenuItem(hMenu, IDM_TRACK_7, MF_CHECKED);
break;
case TRACK_8:
CheckMenuItem(hMenu, IDM_TRACK_8, MF_CHECKED);
break;
}
switch (Format_Flag)
{
case FORMAT_AC3:
CheckMenuItem(hMenu, IDM_AC3, MF_CHECKED);
break;
case FORMAT_MPA:
CheckMenuItem(hMenu, IDM_MPA, MF_CHECKED);
break;
case FORMAT_LPCM:
CheckMenuItem(hMenu, IDM_LPCM, MF_CHECKED);
break;
case FORMAT_AUTO:
CheckMenuItem(hMenu, IDM_SELECT, MF_CHECKED);
break;
}
switch (AC3_Flag)
{
case AUDIO_DEMUXALL:
CheckMenuItem(hMenu, IDM_AC3_DEMUXALL, MF_CHECKED);
break;
case AUDIO_DEMUXONE:
CheckMenuItem(hMenu, IDM_AC3_DEMUXONE, MF_CHECKED);
break;
case AUDIO_DECODE:
CheckMenuItem(hMenu, IDM_AC3_DECODE, MF_CHECKED);
break;
}
switch (DRC_Flag)
{
case DRC_NONE:
CheckMenuItem(hMenu, IDM_DRC_NONE, MF_CHECKED);
break;
case DRC_LIGHT:
CheckMenuItem(hMenu, IDM_DRC_LIGHT, MF_CHECKED);
break;
case DRC_NORMAL:
CheckMenuItem(hMenu, IDM_DRC_NORMAL, MF_CHECKED);
break;
case DRC_HEAVY:
CheckMenuItem(hMenu, IDM_DRC_HEAVY, MF_CHECKED);
break;
}
if (DSDown_Flag)
CheckMenuItem(hMenu, IDM_DSDOWN, MF_CHECKED);
switch (MPA_Flag)
{
case AUDIO_DEMUXALL:
CheckMenuItem(hMenu, IDM_MPA_DEMUXALL, MF_CHECKED);
break;
case AUDIO_DEMUXONE:
CheckMenuItem(hMenu, IDM_MPA_DEMUXONE, MF_CHECKED);
break;
}
switch (SRC_Flag)
{
case SRC_NONE:
CheckMenuItem(hMenu, IDM_SRC_NONE, MF_CHECKED);
break;
case SRC_LOW:
CheckMenuItem(hMenu, IDM_SRC_LOW, MF_CHECKED);
break;
case SRC_MID:
CheckMenuItem(hMenu, IDM_SRC_MID, MF_CHECKED);
break;
case SRC_HIGH:
CheckMenuItem(hMenu, IDM_SRC_HIGH, MF_CHECKED);
break;
case SRC_UHIGH:
CheckMenuItem(hMenu, IDM_SRC_UHIGH, MF_CHECKED);
break;
}
if (Norm_Ratio > 100)
{
CheckMenuItem(hMenu, IDM_NORM, MF_CHECKED);
Normalization_Flag = true;
Norm_Ratio -= 100;
}
switch (Priority_Flag)
{
case PRIORITY_HIGH:
CheckMenuItem(hMenu, IDM_PP_HIGH, MF_CHECKED);
SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
break;
case PRIORITY_NORMAL:
CheckMenuItem(hMenu, IDM_PP_NORMAL, MF_CHECKED);
break;
case PRIORITY_LOW:
CheckMenuItem(hMenu, IDM_PP_LOW, MF_CHECKED);
SetPriorityClass(hProcess, IDLE_PRIORITY_CLASS);
break;
}
}
static void Recovery()
{
int i;
if (Check_Flag)
{
if (lpDD2)
lpDD2->Release();
if (lpDD)
lpDD->Release();
for (i=0; i<3; i++)
{
free(backward_reference_frame[i]);
free(forward_reference_frame[i]);
free(auxframe[i]);
}
free(u422);
free(v422);
free(u444);
free(v444);
free(rgb24);
free(yuy2);
free(lum);
}
Check_Flag = false;
DDOverlay_Flag = false;
EnableMenuItem(hMenu, 1, MF_BYPOSITION | MF_GRAYED);
CheckMenuItem(hMenu, IDM_DIRECTDRAW, MF_UNCHECKED);
SendMessage(hTrack, TBM_SETPOS, (WPARAM) true, 0);
SendMessage(hTrack, TBM_SETSEL, (WPARAM) true, (LPARAM) MAKELONG(0, 0));
DisableControl();
EnableMenuItem(hMenu, IDM_PREVIEW, MF_GRAYED);
EnableMenuItem(hMenu, IDM_SAVE, MF_GRAYED);
EnableMenuItem(hMenu, IDM_SAVE_D2V, MF_GRAYED);
EnableMenuItem(hMenu, IDM_BMP, MF_GRAYED);
EnableMenuItem(hMenu, IDM_PROCESS_WAV, MF_ENABLED);
SetWindowText(hWnd, "DVD2AVI");
if (File_Limit)
{
EnableMenuItem(hMenu, IDM_PROCESS_WAV, MF_GRAYED);
ZeroMemory(&process, sizeof(PROCESS));
process.trackright = TRACK_PITCH;
SystemStream_Flag = false;
Display_Flag = true;
for (i=0; i<File_Limit; i++)
{
process.length[i] = _filelengthi64(Infile[i]);
process.total += process.length[i];
}
}
else
DragAcceptFiles(hWnd, true);
}
void ResizeWindow(int width, int height)
{
GetWindowRect(hWnd, &wrect);
MoveWindow(hTrack, 0, height, width-4*TRACK_HEIGHT, TRACK_HEIGHT, true);
MoveWindow(hLeftButton, width-4*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
MoveWindow(hLeftArrow, width-3*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
MoveWindow(hRightArrow, width-2*TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
MoveWindow(hRightButton, width-TRACK_HEIGHT, height, TRACK_HEIGHT, TRACK_HEIGHT, true);
MoveWindow(hWnd, wrect.left, wrect.top, width+Edge_Width, height+Edge_Height+TRACK_HEIGHT, true);
}
void CheckDirectDraw(int width, int height)
{
if (DirectDrawCreate(NULL, &lpDD, NULL)==DD_OK)
{
if (lpDD->QueryInterface(IID_IDirectDraw2, (LPVOID*)&lpDD2)==DD_OK)
{
if (lpDD2->SetCooperativeLevel(hWnd, DDSCL_NORMAL)==DD_OK)
{
ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(DDSURFACEDESC);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
if (lpDD2->CreateSurface(&ddsd, &lpPrimary, NULL)==DD_OK)
{
ZeroMemory(&halcaps, sizeof(DDCAPS));
halcaps.dwSize = sizeof(DDCAPS);
if (lpDD2->GetCaps(&halcaps, NULL)==DD_OK)
{
if (halcaps.dwCaps & DDCAPS_OVERLAY)
{
DDPIXELFORMAT ddPixelFormat;
ddPixelFormat.dwFlags = DDPF_FOURCC;
ddPixelFormat.dwFourCC = mmioFOURCC('Y','U','Y','2');
ddPixelFormat.dwYUVBitCount = 16;
ZeroMemory(&ddsd, sizeof(DDSURFACEDESC));
ddsd.dwSize = sizeof(DDSURFACEDESC);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY;
ddsd.dwWidth = width;
ddsd.dwHeight = height;
memcpy(&(ddsd.ddpfPixelFormat), &ddPixelFormat, sizeof(DDPIXELFORMAT));
if (lpDD2->CreateSurface(&ddsd, &lpOverlay, NULL)==DD_OK)
{
DDOverlay_Flag = true;
CheckMenuItem(hMenu, IDM_DIRECTDRAW, MF_CHECKED);
ZeroMemory(&ddofx, sizeof(DDOVERLAYFX));
ddofx.dwSize = sizeof(DDOVERLAYFX);
ddofx.dckDestColorkey.dwColorSpaceLowValue = DDColorMatch(lpPrimary, MASKCOLOR);
ddofx.dckDestColorkey.dwColorSpaceHighValue = ddofx.dckDestColorkey.dwColorSpaceLowValue;
}
}
}
}
}
}
}
if (DDOverlay_Flag)
{
Store_Flag = STORE_YUY2;
CheckMenuItem(hMenu, IDM_STORE_RGB24, MF_UNCHECKED);
CheckMenuItem(hMenu, IDM_STORE_YUY2, MF_CHECKED);
EnableMenuItem(hMenu, IDM_BMP, MF_GRAYED);
}
else
{
Store_Flag = STORE_RGB24;
CheckMenuItem(hMenu, IDM_STORE_RGB24, MF_CHECKED);
CheckMenuItem(hMenu, IDM_STORE_YUY2, MF_UNCHECKED);
EnableMenuItem(hMenu, IDM_BMP, MF_ENABLED);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -