를 캡처하는 방법을 사용하여 프레임 Delphi/DSPack 를 표시하지 않고 그것에 TVideoWindow?
-
12-12-2019 - |
문제
DSpack 는 예제 코드 플레이 DirectShow 호환 비디오 장치를 캡처 비디오 프레임다.A TVideoWindow 에 연결 FilterGraph 비디오를 표시하(Firgure-1)입니다.을 제거하는 경우 TVideoWindow,다음 운영체제(윈도우)은 자동으로 가져와 최대 신호의 색상 모델을 표시합 영상에 별도의 창(그림 2).
가 사용하는 방법 DSPack 비디오를 캡처하려면 프레임을 사용하지 않고의 GUI 및 구성 요소를 표시하지 않고의 비디오?
DSPack 포럼은 일부에 대해 언급 NullRenderer 필터는 없지만 문서 또는 사용하는 방법을 보여 주는 예입니다.처럼 보이는 우리가 달성할 수 있는 경우에 우리는 수동으로 교체 비디오 렌더러 Null 직접 렌더링에서 GraphEdit(그림 3).
우리는 어떻게 실현하려는 결과에 표시된 그림-3 을 수행하여이 모든 조작을 내 코드는?DSPack 하지 않을 만드는 방법에 대해 설명합 Null Renderer.
Figure-1: The graph of the default example code
Figure-2: Shows what happens if I remove the TVideoWindow
Figure-3: Shows what happens if I replace Video Renderer with a
Null Renderer and manually connect them in the GraphEdit.
이것은 내가 무슨 일을 했다(그래서 멀리)
다음을 호출합니다 ReassignSampleGrabberOutput
기 filterGraph.Play;
procedure TForm1.ReassignSampleGrabberOutput;
var
nullRenderer : IBaseFilter;
nullRendererPins: IEnumPins;
nullRendererPin : IPin;
graph: IGraphBuilder;
begin
nullRenderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;
FilterGraph1.QueryInterface(IID_IGraphBuilder, graph);
graph.AddFilter(nullRenderer, 'Null Renderer');
nullRenderer.EnumPins(nullRendererPins);
nullRendererPins.Reset;
if nullRendererPins.Next(1, nullRendererPin, nil) = S_OK then
begin
//SampleGrabber1.OutPutPin.Disconnect;
//SampleGrabber1.OutPutPin.Connect(nullRendererPin, nil);
graph.Disconnect(SampleGrabber1.OutPutPin);
graph.FindFilterByName('Video Renderer', filter);
graph.RemoveFilter(filter);
graph.Connect(SampleGrabber1.OutPutPin, nullRendererPin);
end;
end;
해결책
Null Renderer Filter
표준 필터/클래스입니다.코드에 당신화해야 합 그것은(CoCreateInstance
)추가하는 그래프에 연결하고,그것의 입력 핀에 연결되지 않은 출력 핀의 샘플을 걷어입니다.
델파이/DSPack 그것은 다음과 같이해야한다:
Renderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;