|
동영상 캡춰 프로그램을 만들다가 보니 일부 동영상의 경우 하드웨어 가속을 꺼야만 캡춰가 되길래.
하드웨어 가속을 제어를 찾던중 델마당에서
procedure HardwareAcceleration(level: integer);
var
Reg: TRegistry;
reg_key: string;
begin
try
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
reg_key := '\HARDWARE\DEVICEMAP\VIDEO\';
if reg.OpenKey(reg_key, false) then
begin
reg_key := reg.ReadString('\Device\Video0');
reg_key := StringReplace(reg_key, '\Registry\Machine', '', [rfReplaceAll]);
if reg.OpenKey(reg_key, false) then
begin
if level = 0 then reg.DeleteValue('Acceleration.Level')
else reg.WriteInteger('Acceleration.Level', level);
end;
end;
finally
reg.CloseKey;
reg.Destroy;
ChangeDisplaySettings( TDevMode( nil^ ), CDS_UPDATEREGISTRY );
end;
end;
===============
위와 같은 소스를 발견 해서 BCB로 포팅했습니다.
void __fastcall TForm1::HardwareAcceleration(int level)
{
TRegistry *Reg;
AnsiString reg_key;
try
{
Reg = new TRegistry;
Reg->RootKey = HKEY_LOCAL_MACHINE;
reg_key = "\\HARDWARE\\DEVICEMAP\\VIDEO\\";
if(Reg->OpenKey(reg_key, false))
{
reg_key = Reg->ReadString("\\Device\\Video0");
reg_key = StringReplace(reg_key, "\\Registry\\Machine", "", (TReplaceFlags) rfReplaceAll);
if(Reg->OpenKey(reg_key, false))
{
// 이 부분 안으로 들어 가지 않음 if(!Reg->OpenKey(reg_key, false))로 고쳐야 합니까?
if (level == 0)
Reg->DeleteValue("Acceleration.Level");
else
Reg->WriteInteger("Acceleration.Level", level);
}
}
}
__finally
{
delete Reg;
Reg = NULL;
DEVMODE mode ;
ChangeDisplaySettings(&mode, CDS_UPDATEREGISTRY );
}
}
그런데 원하는데로 작동하질 않는군요 XP SP2에서 테스트 했습니다.
무엇이 문제인지 도움말씀 부탁 드립니다.
|