directshow,无法渲染连接仍然pin到samplegrabber

时间:2014-10-05 20:29:03

标签: image graph directshow capture screen-capture

仍有针脚捕获问题,

我们有一个基本的视频和图片捕获项目,从捕获引脚捕获图像和视频是可以的,但是一旦我尝试连接仍然pin(FindPin成功找到)到samplegrabber,它失败了hresult = E_FAIL / Unspecified失败/ 0x80004005的,

alrorythm的步骤如下(用delphi编写,我删除了变量的名称):

  • 初始化界面,成功搜索设备,添加视频捕获过滤器;

  • FindPin('捕获过滤器',//过滤器。     PINDIR_OUTPUT,//寻找输出引脚。     @PIN_CATEGORY_STILL,//引脚类别。     无,//媒体类型(不在乎)。     False,// Pin必须未连接。     0,//获取0&#39引脚。     '仍然销售' //接收指针的指针。     ); 这个程序成功找到了引脚;

  • CoCreateInstance(CLSID_SampleGrabber,NIL,CLSCTX_INPROC_SERVER, IID_IBaseFilter,'样本抓取器过滤器'); 成功的;

  • '示例抓取器过滤器' .QueryInterface(IID_ISampleGrabber, ' isamplegrabber object'); 成功的;

  • '图表生成器' .AddFilter (VCOISampleGrabFilter,' Sample Grabber'); 成功的;

  • CoCreateInstance(CLSID_NullRenderer,NIL,CLSCTX_INPROC_SERVER, IID_IBaseFilter,' null渲染器过滤器'); 成功的;

  • '图表生成器' .AddFilter (VCONullRendererFilter,' Null Renderer'); 成功的;

  • ' isamplegrabber object' .SetBufferSamples(True); ' isamplegrabber object' .SetOneShot(False); 成功的;

  • '图表构建器2' .RenderStream (@PIN_CATEGORY_STILL,@ MEDIATYPE_Video,'视频捕捉滤镜', '示例抓取器过滤器',' null渲染器过滤器'); 有失败的地方, 在这个alrotythm之后,如果我看一下图表(已经为此编写了程序),它看起来只有3个未连接的过滤器;

没有对样本采集器使用回调函数,只是使用GetCurrentBuffer获取镜头,

实际上,这个algorythm(仅用于捕获引脚)可以正常工作,

algorythm来自http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd318622%28v=vs.85%29.aspx

还试过RenderStream的另一个参数,发生同样的错误,

还尝试使用'图形构建器' .Connect功能和2个finded引脚(out-still,in-samplegrabber),它也失败了,

有没有人经历过同样的事情?这很奇怪,我第一眼就认为将PIN_CATEGORY_CAPTURE更改为PIN_CATEGORY_STILL就足够了,这样就可以了,

相机100%有工作静止引脚(它正在与其他程序一起工作),

我正在重写微软的AmCap,现在尝试使用它,但不幸的是,它尚未完成,

感谢, 伊戈尔。

2 个答案:

答案 0 :(得分:0)

RenderStream是一种包装方法,[据说很容易]将各种东西连接成可行的状态。不幸的是,这个价格缺乏细节。您有兴趣使用IGraphBuilder.Connect直接连接引脚,并将故障隔离到特定的图形构建步骤。

答案 1 :(得分:0)

找到了解决这个问题的方法,也许有人会觉得这很有帮助:你应该首先渲染一个渲染器,然后是一个samplegrabber:)