DSPACK具有示例代码玩一个DirectShow兼容的视频设备和同时捕获的视频帧。 甲TVideoWindow附接到FilterGraph动态显示视频(Firgure-1)。 如果删除TVideoWindow,那么操作系统(Windows)将自动弹出ActiveMovie和一个单独的窗口(如图2)显示视频。
有没有办法使用DSPACK捕获视频帧,而无需使用任何GUI组件,并且不显示视频的方法吗?
DSPACK论坛有一些提及关于NullRenderer过滤器,但没有对如何使用它没有文档或实例。 看起来我们可以做到这一点,如果我们手动空替换视频渲染器直接在GraphEdit中(如图3)渲染。
我们怎样才能achive通过执行码内的所有操作图-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.
这是我落得这样做(到目前为止)
请拨打以下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;