如何使用Delphi/DSPack捕获帧而不显示在TVideoWindow上?

DSpack有示例代码来播放兼容DirectShow的视频设备并同时捕获视频帧。一个TVideoWindow被附加到FilterGraph上以显示视频(Firgure-1)。如果您移除TVideoWindow,则操作系统(Windows)将自动启动ActiveMovie并在单独的窗口中显示视频(图-2)。如何使用Delphi/DSPack捕获帧而不显示在TVideoWindow上?

有没有一种方法可以使用DSPack捕获视频帧而不使用任何GUI组件并且不显示视频?

DSPack论坛提及了NullRenderer过滤器,但没有关于如何使用它的文档或示例。看起来我们可以实现这一点,如果我们直接在GraphEdit中使用Null Render手动替换Video Renderer(图-3)。

如何通过在代码中进行所有操作来实现图3所示的结果? DSPack没有解释如何创建空渲染器。

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.

这是我落得这样做(到目前为止)

呼叫之前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以下ReassignSampleGrabberOutput是一个标准的过滤器/班。在代码中,您只需实例化它(CoCreateInstance),将其添加到图中,并将其输入引脚连接到采样器的未连接输出引脚。

在Delphi/DSPACK它应该是这样的:

Renderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;

以上是 如何使用Delphi/DSPack捕获帧而不显示在TVideoWindow上? 的全部内容, 来源链接: utcz.com/qa/265592.html

回到顶部