首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个FFDShow编码成一个DirectShow图以进行去隔行?

将一个FFDShow编码成一个DirectShow图以进行去隔行?
EN

Stack Overflow用户
提问于 2014-04-10 12:12:22
回答 1查看 1.3K关注 0票数 0

好吧,我已经看了一段时间了,我现在很困惑。我希望能在这个问题上找到任何帮助。

我有一个应用程序,可以在多个过滤器图上打开多个摄像机。每一个都是相同的,所以我只想举例说明其中一个。高级思想是通过视频采集卡读取PAL视频流,然后由我们的应用程序处理。该应用程序建立了DirectShow视频过滤图。每个图形包括一个视频源、一个样本抓取过滤器和一个空呈现器过滤器。然后,抓取的样本被用于显示视频中的各种静态画面,并在OpenCV上绘制和缩放。因此,当前的过滤器图如下所示:

视频源-> /*某种编解码器滤波器*/ ->样本抓取器->空渲染器

我说“某种”,因为我允许DirectShow自己呈现它,使用

代码语言:javascript
复制
hr = pCaptureGraphs[i]->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSourceFilters[i], pGrabberFilters[i], pNullRendFilters[i]);

然而,我有一个问题,交织来自PAL视频。使用FFDShow和GraphEditor应用程序,我构建了一个类似于上面的图形,但在SampleGrabber之前使用了一个FFDShow过滤器,设置为在视频提要上执行立方体去交错。或者,更好的是,使用它来解码来自视频抓取器的视频流,以及去交织它。

我的问题是:我不知道如何在代码中创建FFDShow过滤器。是否有一种方法可以在代码中添加筛选器,如果是的话,我应该包括哪些内容或链接到项目以实现此目的?或者,是否有一种方法来配置DirectShow以使用在调用RenderStream时进行去交错的FFDShow筛选器?

如能就这一问题提供任何帮助,将不胜感激。

更新1:

好的,我发现我正在开发的PC,一台Windows8.1机器,由于某种原因没有运行FFDShow过滤器,但是目标机器,一台Windows7机器,运行完全相同的代码。好像有什么不相容的地方。:/

现在进入下一个阶段:去交错。我已经成功地隔离了示例Grabber过滤器和它之前的过滤器(在本例中是AVI解压缩器),并且我将它们彼此断开连接,然后在它们之间连接FFDShow原始视频过滤器。另一个FFDShow过滤器在某种程度上扰乱了图形,即没有从样本抓取器读取输出,所以我将使用前一个过滤器。现在的问题是,我如何激活视频传输的去交错?我已经在GraphEdit程序中构建了相同的图,并且交错消失了,所以我知道过滤器能够做到这一点。但是如何在代码中启用它呢?

更新2/解决方案

我通过运行过滤器图,然后选择过滤器的托盘图标,并通过右键单击图标来设置菜单中的去隔行。效果很好。感谢罗曼·R的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-11 10:07:53

您需要在代码中创建FFDshow视频解码器的实例,例如:

代码语言:javascript
复制
class __declspec(uuid("{04FE9017-F873-410E-871E-AB91661A4EF7}")) FfdshowVideoDecoder;
CComPtr<IBaseFilter> pBaseFilter;
HRESULT nResult = pBaseFilter.CoCreateInstance(__uuidof(FfdshowVideoDecoder));

然后IGraphBuilder::AddFilter到过滤器图

然后从这个实例查询输入/输出IPin,并适当地连接到其他过滤器,类似于您如何在GraphEdit中交互地这样做。如果您使用这个RenderStream作为中间过滤器,您也可以让IBaseFilter来完成这个任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22987700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档