procedure TVideoForm.OnSelectDevice(sender: TObject);
var
CaptureGraph: ICaptureGraphBuilder2;
SourceFilter, DestFilter: IBaseFilter;
begin
FilterGraph.ClearGraph;
FilterGraph.Active := false;
Filter.BaseFilter.Moniker := SysDev.GetMoniker(TMenuItem(Sender).tag);
FilterGraph.Active := true;
FilterGraph.QueryInterface(ICaptureGraphBuilder2, CaptureGraph);
Filter.QueryInterface(IBaseFilter, SourceFilter);
VideoWindow.QueryInterface(IBaseFilter, DestFilter);
CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);
CaptureGraph.RenderStream(nil, nil, SourceFilter, nil, DestFilter);
FilterGraph.Play;
CaptureGraph := nil;
SourceFilter := nil;
DestFilter := nil;
end;
위 예제와 같이 코딩하여 실행시키면 activemovie window라는 창이 뜨면서 display이 되고
Tvideowindow에도 display이 되거든요.....
제가 필요한 것은 activemovie window창은 안 뜨면서 Tvideowindow에서만 display시키고 싶거든요?
그래서 CaptureGraph.RenderStream(@PIN_CATEGORY_PREVIEW, nil, SourceFilter, nil, nil);
여기 부분을 삭제하고 실행시키면 아무것도 display안 되고요....
제가 미숙하여 당최 알수가 없네요
고수님들의 조언 부탁드립니다.
아니면 간단하게 overlay(preview 아님)시킬수 있는 다른 컴포넌트가 있는지요?
전에는 Tvideocap 컴포넌트를 사용했거든요...
참고로 수신카드는 ATI optimus 9000 pro(vivo)고 OS는 98을 씁니다.
쓰다보니깐 두서없이 썼네요
그럼 수고 하십시오.....
직접합번 받아보시고
if SUCCEEDED(VideoWindow.QueryInterface(IBaseFilter, DestFilter)) then
begin
end;
에러처리를 함해보시거
DestFilter 의 포인터가 제대로 넘어 오는지 검사를 해보시기 바랍니다.
그리고
필터 그래프 에티터에서
ATI optimus 9000 pro(vivo)카드의 속성도 한번 확인 해보시구여