📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <winreg.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString w;
HKEY key;
DWORD trash;
DWORD value;
DWORD size;
size = sizeof(DWORD);
if(RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\marumo\\mpeg2vid_vfp", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &trash) != ERROR_SUCCESS){
Close();
}
if(ignore_aspect_ratio->Checked){
value = 0;
}else{
value = 1;
}
RegSetValueEx(key, "aspect_ratio", 0, REG_DWORD, (LPBYTE)&value, size);
if(no_remap->Checked){
value = 0;
}else{
value = 1;
}
RegSetValueEx(key, "re_map", 0, REG_DWORD, (LPBYTE)&value, size);
if(idct_double->Checked){
value = 0;
}else if(idct_llm->Checked){
value = 1;
}else if(idct_ap922->Checked){
value = 2;
}else{
value = 1;
}
RegSetValueEx(key, "idct_func", 0, REG_DWORD, (LPBYTE)&value, size);
if(keep_frame->Checked){
value = 0;
}else if(top_first->Checked){
value = 1;
}else{
value = 2;
}
RegSetValueEx(key, "field_order", 0, REG_DWORD, (LPBYTE)&value, size);
value = 0;
if(mmx->Checked){
value |= 1;
}
if(sse->Checked){
value |= 2;
}
if(sse2->Checked){
value |= 4;
}
RegSetValueEx(key, "simd", 0, REG_DWORD, (LPBYTE)&value, size);
switch(color_matrix->ItemIndex){
case 0:
value = 0;
break;
case 1:
value = 1;
break;
case 2:
value = 4;
break;
case 3:
value = 5;
break;
case 4:
value = 6;
break;
case 5:
value = 7;
break;
default:
value = 0;
}
RegSetValueEx(key, "color_matrix", 0, REG_DWORD, (LPBYTE)&value, size);
value = yuy2_matrix->ItemIndex;
RegSetValueEx(key, "yuy2_matrix", 0, REG_DWORD, (LPBYTE)&value, size);
value = 0;
if(this->never_save_gl_file->Checked){
value |= 1;
}
if(this->never_use_timecode->Checked){
value |= 2;
}
RegSetValueEx(key, "gl", 0, REG_DWORD, (LPBYTE)&value, size);
value = 0;
if(this->open_multi_file->Checked){
value |= 1;
}
RegSetValueEx(key, "file", 0, REG_DWORD, (LPBYTE)&value, size);
RegCloseKey(key);
if(RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\VFPlugin", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &trash) != ERROR_SUCCESS){
Close();
}
w = ExtractFileDir(ParamStr(0));
w = w + "\\m2v.vfp";
RegSetValueEx(key, "MPEG2VIDEO", 0, REG_SZ, (LPBYTE)w.c_str(), w.Length());
RegCloseKey(key);
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
HKEY key;
DWORD type;
DWORD value;
DWORD size;
size = sizeof(DWORD);
type = REG_DWORD;
if(is_mmx_enable()){
mmx->Enabled = true;
}else{
mmx->Checked = false;
mmx->Enabled = false;
}
if(is_sse_enable()){
sse->Enabled = true;
}else{
sse->Enabled = false;
sse->Checked = false;
}
if(is_sse2_enable()){
sse2->Enabled = true;
}else{
sse2->Enabled = false;
sse2->Checked = false;
}
this->set_language();
this->color_matrix->ItemIndex = 0;
this->yuy2_matrix->ItemIndex = 0;
if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\marumo\\mpeg2vid_vfp", 0, KEY_READ, &key) != ERROR_SUCCESS){
remap->Checked = true;
idct_ap922->Checked = true;
use_aspect_ratio->Checked = true;
top_first->Checked = true;
return;
}
if(RegQueryValueEx(key, "idct_func", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
idct_ap922->Checked = true;
}else{
switch(value){
case 0:
idct_double->Checked = true;
break;
case 1:
idct_llm->Checked = true;
break;
case 2:
idct_ap922->Checked = true;
break;
default:
idct_llm->Checked = true;
}
}
if(RegQueryValueEx(key, "simd", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
mmx->Checked = false;
sse->Checked = false;
sse2->Checked = false;
}else{
if( (value & 1) && mmx->Enabled){
mmx->Checked = true;
}else{
mmx->Checked = false;
}
if( (value & 2) && sse->Enabled){
sse->Checked = true;
}else{
sse->Checked = false;
}
if( (value & 4) && sse2->Enabled){
sse2->Checked = true;
}else{
sse2->Checked = false;
}
}
if(RegQueryValueEx(key, "re_map", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
remap->Checked = true;
}else{
if(value){
remap->Checked = true;
}else{
no_remap->Checked = true;
}
}
if(RegQueryValueEx(key, "aspect_ratio", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
use_aspect_ratio->Checked = true;
}else{
if(value){
use_aspect_ratio->Checked = true;
}else{
ignore_aspect_ratio->Checked = true;
}
}
if(RegQueryValueEx(key, "field_order", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
top_first->Checked = true;
}else{
switch(value){
case 0:
keep_frame->Checked = true;
break;
case 1:
top_first->Checked = true;
break;
case 2:
bottom_first->Checked = true;
break;
default:
keep_frame->Checked = true;
}
}
if(RegQueryValueEx(key, "color_matrix", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
color_matrix->ItemIndex = 0;
}else{
switch(value){
case 0:
color_matrix->ItemIndex = 0;
break;
case 1:
color_matrix->ItemIndex = 1;
break;
case 4:
color_matrix->ItemIndex = 2;
break;
case 5:
color_matrix->ItemIndex = 3;
break;
case 6:
color_matrix->ItemIndex = 4;
break;
case 7:
color_matrix->ItemIndex = 5;
break;
default:
color_matrix->ItemIndex = 0;
break;
}
}
if(RegQueryValueEx(key, "yuy2_matrix", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
yuy2_matrix->ItemIndex = 0;
}else{
if(value < 0){
value = 0;
}else if(value > 4){
value = 0;
}
yuy2_matrix->ItemIndex = value;
}
if(RegQueryValueEx(key, "gl", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
this->never_save_gl_file->Checked = false;
this->never_use_timecode->Checked = false;
}else{
if(value & 1){
this->never_save_gl_file->Checked = true;
}else{
this->never_save_gl_file->Checked = false;
}
if(value & 2){
this->never_use_timecode->Checked = true;
}else{
this->never_use_timecode->Checked = false;
}
}
if(RegQueryValueEx(key, "file", NULL, &type, (LPBYTE)&value, &size) != ERROR_SUCCESS){
this->open_single_file->Checked = true;
}else{
if(value & 1){
this->open_multi_file->Checked = true;
}else{
this->open_single_file->Checked = true;
}
}
RegCloseKey(key);
}
//---------------------------------------------------------------------------
int TForm1::is_mmx_enable()
{
DWORD mmx_check;
_asm{
mov eax,1;
cpuid;
mov mmx_check,edx;
}
if(mmx_check & 0x00800000){
return 1;
}else{
return 0;
}
}
//---------------------------------------------------------------------------
int TForm1::is_sse_enable()
{
DWORD sse_check;
__asm{
mov eax, 1
cpuid
mov sse_check, edx
}
if(sse_check & 0x02000000){
return 1;
}else{
return 0;
}
}
//---------------------------------------------------------------------------
int TForm1::is_sse2_enable()
{
DWORD sse2_check;
__asm{
mov eax, 1
cpuid
mov sse2_check, edx
}
if(sse2_check & 0x04000000){
return 1;
}else{
return 0;
}
}
//---------------------------------------------------------------------------
void TForm1::set_language()
{
LANGID id;
id = GetUserDefaultLangID();
if(id == 0x0411){
this->Label1->Font->Charset = DEFAULT_CHARSET;
this->Label1->Font->Name = "俵俽 僑僔僢僋";
this->Font->Charset = DEFAULT_CHARSET;
this->Font->Name = "俵俽 僑僔僢僋";
this->Caption = "MPEG-2 VIDEO VFAPI Plug-In 愝掕";
this->Label1->Caption = "MPEG-2 VIDEO VFAPI Plug-In 愝掕";
this->GroupBox5->Caption = "傾僗儁僋僩斾";
this->GroupBox1->Caption = "YUV 仺 RGB 曄姺";
this->GroupBox2->Caption = "IDCT 娭悢";
this->GroupBox3->Caption = "CPU 奼挘";
this->GroupBox4->Caption = "僼傿乕儖僪弴";
this->GroupBox6->Caption = "怓嬻娫峴楍乮徣棯帪乯";
this->GroupBox7->Caption = "GOP 儕僗僩";
this->GroupBox8->Caption = "楢斣僼傽僀儖";
this->GroupBox9->Caption = "YUY2 怓嬻娫峴楍 (m2v.aui 梡)";
this->ignore_aspect_ratio->Caption = "柍帇";
this->use_aspect_ratio->Caption = "斀塮";
this->no_remap->Caption = "僗僩儗乕僩曄姺";
this->remap->Caption = "ITU-R BT.601 偐傜怢挘";
this->idct_double->Caption = "晜摦彫悢揰";
this->idct_llm->Caption = "惍悢 (32bit LLM)";
this->idct_ap922->Caption = "惍悢 (32bit AP-922)";
this->keep_frame->Caption = "僜乕僗僼儗乕儉傪堐帩";
this->top_first->Caption = "僩僢僾仺儃僩儉弴偱弌椡";
this->bottom_first->Caption = "儃僩儉仺僩僢僾弴偱弌椡";
this->color_matrix->Items->Strings[0] = "帺摦擣幆乮夝憸搙偐傜乯";
this->yuy2_matrix->Items->Strings[0] = "尦偺 YUV 僨乕僞傪堐帩";
this->never_use_timecode->Caption = "GOP 僞僀儉僐乕僪傪巊傢側偄";
this->never_save_gl_file->Caption = "GL 僼傽僀儖傪曐懚偟側偄";
this->open_multi_file->Caption = "寢崌偟偰奐偔";
this->open_single_file->Caption = "巜掕僼傽僀儖偺傒奐偔";
this->Button1->Caption = "寛掕";
this->Button2->Caption = "庢傝徚偟";
this->Button3->Caption = "嶍彍";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
LONG n;
HKEY key;
n = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\VFPlugin", 0, KEY_SET_VALUE, &key);
if(n == ERROR_SUCCESS){
n = RegDeleteValue(key, "MPEG2VIDEO");
Close();
}
if(n != ERROR_SUCCESS){
LPVOID buf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, n, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&buf, 0, NULL);
MessageBox(NULL, (LPCTSTR)buf, "ERROR", MB_OK|MB_ICONERROR);
LocalFree(buf);
}
Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -