dshow中一个完整采集链路一般如下:

Capture Device----->SampleGraber ------>Render

如果只要采集原始数据可以不用渲染链路那就如下:

Capture Device----->SampleGraber ------>Null Render

在很多dshow的demo中遇到过很多关于设置窗体的步骤,也就是标题 IVideoWindow 的设置。

以前没太注意过这个设置,看到别人的demo里有这个设置也就加上了,代码如下:

if (FAILED(graph_->QueryInterface(IID_IVideoWindow, (void **)&active_video_window_)))
{
return -;
} if (active_video_window_)
{
if (FAILED(active_video_window_->put_AutoShow(OAFALSE)))
{
return -;
}

上面的代码作用是吧渲染窗体隐藏,如果不隐藏的话,在连接整个链路运行的时候会自动弹出一个渲染窗体(如果上面的链路有Render filter)

后来对这一块代码仔细研究了一下发现如果我只是单纯的采集摄像头原始数据的话也就不需要设置隐藏窗体这一步骤了

所以后来就把这一块代码注释了。

再后来再一次测试使用 graph_->Render 智能连接的时候出现了问题。

使用graph_->Render 的话就需要吧上面的 NULL Render 废弃掉 链路如下:

Capture Device----->SampleGraber -----graph_->Render---->?

让Graph 去智能连接下面的链路的话,智能连接一般不会去给你连接一个Null Render 因为它不知道你是否想预览数据。

一般情况下使用filter 的智能连接 是不太透明的,在程序当中尽量避免使用智能连接,当然这种情况也有例外的情况比如:

virtual HRESULT STDMETHODCALLTYPE RenderStream(
/* [annotation][in] */
_In_opt_ const GUID *pCategory,
/* [in] */ const GUID *pType,
/* [in] */ IUnknown *pSource,
/* [in] */ IBaseFilter *pfCompressor,
/* [in] */ IBaseFilter *pfRenderer) = ;

RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, A, B,C);

其中A,B,C 不为NULL 链路:----A------------B---------------------C----

如果上面这种指定filter的智能连接是可以使用的,因为目标比较明确,而且还省略了去获取IPin 的步骤让Graph 去自动帮你选择。

------------------------------------------

继续说上面的graph_->Render 这种用法如果使用了很大可能在闭合链路的时候graph 给你连接的链路如下:

Capture Device----->SampleGraber ------>Render

而这个时候就需要 标题 IVideoWindow 的设置,如果不设置的话,在run之后会自动弹出预览窗口(因为闭合链路的时候graph 连接的是一个 Render Filter )

从这个现象也就能明白 IVideoWindow 作用了。

总结有点乱,大致意思就是如果你使用的智能连接链路 那就需要注意一下 IVideoWindow

参考:https://docs.microsoft.com/zh-cn/windows/desktop/DirectShow/combining-video-capture-and-preview

IVideoWindow 在directshow采集链路中的使用的更多相关文章

  1. 关于Xilinx FPGA JTAG下载时菊花链路中的芯片数量

      关于Xilinx FPGA JTAG下载时菊花链路中的芯片数量 emesjx | 2014-08-13 13:13:30    阅读:1793   发布文章 当一个系统中含有多片(2片以上)Xil ...

  2. filebeat + logstash 日志采集链路配置

    1. 概述 一个完整的采集链路的流程如下: 所以要进行采集链路的部署需要以下几个步聚: nginx的配置 filebeat部署 logstash部署 kafka部署 kudu部署 下面将详细说明各个部 ...

  3. 采集爬虫中,解决网站限制IP的问题? - wendi_0506的专栏 - 博客频道 - CSDN.NET

    采集爬虫中,解决网站限制IP的问题? - wendi_0506的专栏 - 博客频道 - CSDN.NET undefined

  4. 带你看懂大数据采集引擎之Flume&采集目录中的日志

    一.Flume的介绍: Flume由Cloudera公司开发,是一种提供高可用.高可靠.分布式海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于采集数据:同时,flum ...

  5. Directshow 采集音视频数据H264+AAC+rtmp效果还不错

    从usb摄像头或者采集卡中采集效果还是不错的.

  6. linux底半部机制在视频采集驱动中的应用

    最近在做一个arm+linux平台的视频驱动.本来这个驱动应该是做板子的第三方提供的,结果对方软件实力很差,自己做不了这个东西,外包给了一个暑期兼职的在读博士.学生嘛,只做过实验,没做过产品,给出的东 ...

  7. iOS音频采集过程中的音效实现

    1.背景 在移动直播中, 声音是主播和观众互动的重要途径之一, 为了丰富直播的内容,大家都会想要在声音上做一些文章, 在采集录音的基础上玩一些花样. 比如演唱类的直播间中, 主播伴随着背景音乐演唱. ...

  8. Directshow 采集与FFDshow 冲突

    在使用Directshow 进行视频采集的时候,发现与本地安装的一个ffdshow有冲突. 见下图: 经过测试发现dshow 在设置采集媒体类型的时候,如果设置RGB32就会崩溃,如果设置RGB24就 ...

  9. php采集文章中的图片获取替换到本地

    /** * 获取替换文章中的图片路径 * @param string $xstr 内容 * @param string $keyword 创建照片的文件名 * @param string $oriwe ...

随机推荐

  1. 用Windows命令行编译自己的c或者cpp以及一些操作

    本文为大大维原创,最早于博客园发表,转载请注明出处!!! 1.网上有大把的这个问题的教程,总结下来,大同小异.尽管不同的vs(vc)版本一些细节处有不同,以vs2010为例,分以下几步: 1.将vs ...

  2. 什么是Maven项目

    1.通俗理解Maven:https://blog.csdn.net/shuzhe66/article/details/45009175 个人总结: Maven项目会有pom文件! 当前的项目需要依赖其 ...

  3. Windows10 VS2017 C++信号处理

    #include "pch.h" #include <iostream> #include <csignal> #include <windows.h ...

  4. 小程序通过background-image设置背景图片

    微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片:base64图片设置步骤如下: 1.在网站http://imgbase64.duoshiton ...

  5. Eslint 能自动格式化代码,为什么还要用 Prettier?

    ESLint 与 Prettier 区别: ESLint:代码检测工具:可以检测出你代码中潜在的问题,比如使用了某个变量却忘记了定义: Prettier:代码格式化工具:作为代码格式化工具,能够统一你 ...

  6. FP-Growth算法

    FP-Growth算法的目标是发现模式,其特点就是高效,因为可以通过设置发生频次直接过滤掉一些低频次的元素:而且秉承了和Apriori的思想,对于低频次的元素,其父级和子级的组合都是低频的. FP-G ...

  7. 【转】C++中嵌入python程序——参数传递

    C++中嵌入python程序——参数传递 前面两篇博客已经介绍如何在C++中嵌套使用 python,但是在实际使用中,我们需要向python传递各种各样的参数,这样的程序才具有更高的灵活性.下面简单介 ...

  8. (转)解决OSX上面PHP curl SSLRead()

    原创 2016年05月19日 19:39:04 标签: php / curl / osx 830 这个问题的原因是因为OSX curl默认使用 SecureTransport 而不是OpenSSL. ...

  9. Excel技巧--单列变多行

    当上图的单列转变成多行时,可以这么做: 1.在第一行输入A2.A3,向右拖拉第一行: 2.第二行按第一行最右顺序,写下A12,再向右拖拉出第二行: 3.选择这两行,再拖拉出一串连续顺序的多行来: 4. ...

  10. Node.js express获取参数有三种方法

    express获取参数有三种方法:官网介绍如下 Checks route params (req.params), ex: /user/:id Checks query string params ( ...