IVideoWindow 在directshow采集链路中的使用
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采集链路中的使用的更多相关文章
- 关于Xilinx FPGA JTAG下载时菊花链路中的芯片数量
关于Xilinx FPGA JTAG下载时菊花链路中的芯片数量 emesjx | 2014-08-13 13:13:30 阅读:1793 发布文章 当一个系统中含有多片(2片以上)Xil ...
- filebeat + logstash 日志采集链路配置
1. 概述 一个完整的采集链路的流程如下: 所以要进行采集链路的部署需要以下几个步聚: nginx的配置 filebeat部署 logstash部署 kafka部署 kudu部署 下面将详细说明各个部 ...
- 采集爬虫中,解决网站限制IP的问题? - wendi_0506的专栏 - 博客频道 - CSDN.NET
采集爬虫中,解决网站限制IP的问题? - wendi_0506的专栏 - 博客频道 - CSDN.NET undefined
- 带你看懂大数据采集引擎之Flume&采集目录中的日志
一.Flume的介绍: Flume由Cloudera公司开发,是一种提供高可用.高可靠.分布式海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于采集数据:同时,flum ...
- Directshow 采集音视频数据H264+AAC+rtmp效果还不错
从usb摄像头或者采集卡中采集效果还是不错的.
- linux底半部机制在视频采集驱动中的应用
最近在做一个arm+linux平台的视频驱动.本来这个驱动应该是做板子的第三方提供的,结果对方软件实力很差,自己做不了这个东西,外包给了一个暑期兼职的在读博士.学生嘛,只做过实验,没做过产品,给出的东 ...
- iOS音频采集过程中的音效实现
1.背景 在移动直播中, 声音是主播和观众互动的重要途径之一, 为了丰富直播的内容,大家都会想要在声音上做一些文章, 在采集录音的基础上玩一些花样. 比如演唱类的直播间中, 主播伴随着背景音乐演唱. ...
- Directshow 采集与FFDshow 冲突
在使用Directshow 进行视频采集的时候,发现与本地安装的一个ffdshow有冲突. 见下图: 经过测试发现dshow 在设置采集媒体类型的时候,如果设置RGB32就会崩溃,如果设置RGB24就 ...
- php采集文章中的图片获取替换到本地
/** * 获取替换文章中的图片路径 * @param string $xstr 内容 * @param string $keyword 创建照片的文件名 * @param string $oriwe ...
随机推荐
- 18-11-01 pandas 学习03
[python]pandas display选项 import pandas as pd 1.pd.set_option('expand_frame_repr', False) True就是可以换行显 ...
- Makefile中的%标记和系统通配符*的区别
Makefile中的%标记和系统通配符*的区别在于,*是应用在系统中的,%是应用在这个Makefile文件中的. (本文的测试环境是Windows7下使用MinGW提供的make.exe) 例如,如果 ...
- 返回指针的函数 ------ 指针函数(pointer function)
指针函数: 其本质是一个函数, 其函数返回值为某一类型的指针. 定义形式: 类型 *指针变量名(参数列表): 例如: int *p(int i,int j); p是一个函数名,该函数有2个整形参数,返 ...
- web(五)CSS引入方式,编写规范及调试
CSS (Cascading Style Sheets)层叠样式表 ,是由万维网联盟(W3C)制定的标准 CSS的主要作用: 美化html元素的外观,例如设定背景颜色.字体等. 对网页元素进行布局.以 ...
- jQuery-1.样式篇---属性与样式
jQuery的属性与样式之.attr()与.removeAttr() 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.如:在img元素中,src就是元素的特性,用来标 ...
- MySQL Execution Plan--NOT IN查询
在某系统中想使用NOT IN子查询进行数据过滤,SQL为: SELECT * FROM TB001 AS T1 DAY) AND T1.BATCH_NO NOT IN(SELECT BATCH_NO ...
- 策略模式(Strategy )
为实现一个目的采用不同的方式都可实现,具体看要采取哪种方式. //接口 public interface Strategy { public void algorithmInterface(); ...
- Python生成器(generator)和迭代器(Iterator)
列表生成式 a = [i+1 for i in range(10)] print(a) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 这就是列表生成式 生成器(generator) ...
- IndentationError:expected an indented block错误解决
Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...
- Python变量以及类型
变量的定义 在程序中,有时我们需要对2个数据进行求和,那么该怎样做呢? 大家类比一下现实生活中,比如去超市买东西,往往咱们需要一个菜篮子,用来进行存储物品,等到所有的物品都购买完成后,在收银台进行结账 ...