关于Video Renderer和Overlay Mixer

原文作者: 陆其明
整理日期: 2004/12/27  
大家知道,Video Renderer (VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。为提高计算机画图性能,根据你计算机显卡的能力,VR会优先使用DirectDraw以及Overlay表面;如果这些特性得不到显卡的支持,VR会使用GDI函数进行画图。在上级Filter连接到VR时,VR总是先要求当前显示器设置的色彩位数的RGB格式,如你的机器设置的是24位彩色,则VR首先要求连接的Media type为RGB24。如果你的显卡支持YUV Overlay表面,那么在Filter Graph运行起来的时候,VR会动态改变已经连接的Media type,要求上级Filter输出一种合适的YUV格式。VR Filter上实现了IVideoWindow接口,Filter Graph Manager主要通过这个接口来控制视频窗口。

那么,Overlay Mixer又是怎么回事呢?简单地说,Overlay Mixer就是能够将几路视频流合成输出的Filter。这个Filter是特地为DVD回放(DVD有Sub-picture或line-21数据需要叠加显示)或广播视频流(含有line-21数据)而设计的。同时,它还支持硬件解码器使用Video Port Extensions,就是绕过PCI总线,将硬件解码出来的数据直接送给显卡显示。这个Filter同样优先使用显卡的DirectDraw能力,而且必须要有Overlay表面。Overlay Mixer有一个输出Pin,输出的Media type是:MEDIATYPE_VIDEO,MEDIASUBTYPE_ Overlay;后面一般连上一个Video Renderer。当Filter Graph运行时,实际的图像显示工作由Overlay Mixer完成,而Video Renderer只是做一个视频窗口的管理工作。还有另外一个更常见的Filter:Overlay Mixer 2。这个Filter跟Overlay Mixer功能上是一样的,只是两个Filter支持的Format type不同和Merit值不同而已。

Overlay Mixer使用Color keying来实现几路视频的合成:它将Color key和sub-picture(或line-21)数据送到主表面,将主视频数据送到Overlay表面;显卡然后将两个表面的数据合成,送到帧缓存(Frame buffer)中进行显示。典型的情况,Overlay Mixer使用三个Input pin:Pin 0输入主视频数据,Pin 1和Pin 2输入sub-picture数据和line-21数据。Overlay Mixer在内部根据Pin 0输入的数据来创建Overlay表面。Overlay Mixer向上一般连接的是Video Decoder。如果这是个Software decoder,则Pin 0上的数据传输使用标准的IMemInputPin接口;如果使用了硬件加速,则Pin 0上必须使用IAMVideoAccelerator接口。(注意这两种接口是不能同时使用的!)如果上一级Filter是硬件解码器的包装Filter,使用VP pin输出,则解码器与Overlay Mixer使用IVPConfig和IVPNotify接口对通讯,以协调工作。Overlay Mixer不支持1394或USB接口的采集设备。Overlay Mixer向下一般连的是Video Renderer。这时Video Renderer只是一个视频窗口管理器。两个Filter通过IOverlay和IOverlayNotify接口对进行通讯,以协调工作。(Video Renderer的Input pin有两种连接方式:VR直接做图像显示时,则使用IMemInputPin接口接收视频流数据;Overlay Mixer做图像显示时,则VR使用IOverlay接口与上一级Filter进行通讯,Overlay Mixer与VR之间没有视频数据的传输。注意这两种接口是不会同时使用的!)

大家看到了,其实Video Renderer与Overlay Mixer有一部分功能是重复的。Video Renderer是最早设计的,设计之初,很多应用情况没有考虑进去;于是,就用Overlay Mixer来“打补丁”。现在,我们为什么不把两部分功能整合一下呢?微软也正是这么做了!在Windows XP(家庭版和专业版)中,新出现了一个Filter(注册的名字也叫“Video Renderer”,但两个Filter的CLSID是不同的,Merit值也不一样),替代了原来默认的Video Renderer。这个新的Filter,称之为Video Mixing Renderer Filter 7 (VMR-7),因为它内部使用了DirectDraw 7的技术。可以这么说,VMR是Windows平台上新一代的Video Renderer。值得注意的是,这个Filter仅在Windows XP里集成,在其他任何DirectX发布包里都得不到这个Filter。VMR-7的大致功能如下:支持最多16路输入流的alpha混合;支持在合成图像显示之前得到对其访问权;支持插入第三方开发的Video Effects和Transitions组件功能等等。还有,VMR连接时不要求RGB的Media type,因为它任何情况下都不会使用GDI函数来画图。

随着DirectX 9的发布,又会出现一个新的Video Renderer,称之为VMR-9。这个Filter使用了Direct3D 9的技术。VMR-9与VMR-7是两个不同的Filter。VMR-9的性能更加强劲。值得注意的是,为了保持向下兼容,VMR-9的Merit值并不高,它不作为系统默认的Video Renderer;如果你的应用程序只需要很少的视频显示控制,建议还是使用各自平台默认的Video Renderer。

下面是关于一些Video Renderer使用的常见问题,可供参考:
1. 写基于DirectShow的应用程序,肯定会用到Filter Graph Manager的IVideoWindow接口。Filter Graph Manager上的这个接口,实际实现于Video Renderer上。需要特别注意的是,必须在Video Renderer连接成功后才能调用这个接口的方法,否则方法调用总会失败。
2. 通过IVideoWindow::put_FullScreenMode实现全屏模式。对于一些新的显卡,VR能够对图像直接拉伸后再显示(性能不会损失很大);但如果显卡本身性能不佳,Filter Graph Manager会自动将VR替换为Full Screen Renderer Filter。事实上,当用户调用该接口函数要求切换到全屏模式时,Filter Graph Manager的控制逻辑为:优先使用在Filter Graph中直接支持全屏模式的Video Renderer(通过IVideoWindow::get_FullScreen Mode判断);否则,使用一个对图像缩放到全屏,性能损失不是很大的Video Renderer;再则,使用Full Screen Renderer Filter替换;以上尝试都失败,则选择Filter Graph中任意一个支持IVideoWindow接口的Video Renderer。除了一些比较老的显卡,一般第二步尝试就能成功。
3. 通过IBasicVideo::GetCurrentImage得到当前的图像数据。对于一般的Video Renderer来说,使用这个接口函数是不可靠的。因为如果Video Renderer使用了DirectDraw加速,这个函数调用会失败;而且调用这个函数,Video Renderer必须处于Pause状态。而对于VMR,则完全没有如上这些限制。所以,在使用Video Renderer的情况下,想得到整个视频流中的某一帧的图像,建议写一个In-place-trans filter,插入到Video Renderer的前面,很简单就能实现。
4. 有时候,从一个Decoder的Output pin Render出去,会自动接上Overlay Mixer 2这个Filter?或者自己写的Decoder,怎么样让它连接到Overlay Mixer 2?这主要是Decoder的Output pin支持的Media type使用的Format type的原因。需要注意的是:Overlay Mixer 2仅支持Format_VIDEOINFO2,Overlay Mixer虽然同时支持Format_VIDEOINFO和Format_VIDEOINFO2,但它的Merit值为MERIT_DO_NOT_USE,不会被自动加入Filter Graph中。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunshine1314/archive/2008/03/12/2173931.aspx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【tensorflow】tensorflow -gpu安装及jupyter环境更改

tensorflow -gpu安装 首先,安装Anoconda 1. 官网下载点我:2.安装 点击 python 3.6 version自动下载x64版,下载好之后,然后安装。 如图,打上勾之后,一路next3.打开终端 1)输入conda –-version …

张震博士:SDT是未来安防发展方向

如何挖掘安防大数据价值是未来发展方向 发展实践证明,科技强警已经成为未来发展的必然选择,发展科技强警,必须用技术实力说话。作为科技强警的重要组成部分,安防视频非常重要,但是,目前,安防视频…

关于虚拟机第二块网卡eth1(仅主机模式)的配置问题

这里发生了一个想不明白的事情,我的真机的网卡上面并没有192.168.100.0网段的网卡 但是我在虚拟机上面添加了一块网卡(仅主机模式)eth1 并配置为192.168.100.60(配置文件已经写好) 开机却能用eth1连接上xhell&#xff…

【机器学习】朴素贝叶斯介绍及实例--对短信进行二分类 使用多项式分布

贝叶斯 首先什么是贝叶斯? 一个例子,现分别有 A、B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个球,且是红球,问这…

H.264码流结构

a、对照:H.263的码流结构H.263定义的码流结构是分级结构,共四层。自上而下分别为:图像层(picture layer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。 PSC TR PTYPE PQUANT CPM PSBI TRB DBQUANT PEI PSPARE PEI…

Gartner分享物联网和智慧城市最新数据

主题为“移我所想 Mobile is me”的2016世界移动大会上海展正在上海如火如荼的举行,Gartner也在第一时间分享了最新的市场数据,包括企业级用户最为关注的物联网和智慧城市的调查预测报告,下面就一起来看看吧! 智慧城市与物联网 物…

python中格式化字符串

format格式字符串 语法: 它通过{}和:来代替%。 注意: 字符串的format函数可以接受无限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。 “映射”示例 通过位置 In [1]: {0},{…

让360安全浏览器默认使用谷歌内核

浏览器默认内核的指定只需在head标签中添加一行代码即可&#xff1a; 若页面需默认用极速核&#xff0c;增加标签&#xff1a;<meta name"renderer" content"webkit"> 若页面需默认用ie兼容内核&#xff0c;增加标签&#xff1a;<meta name"…

作业帮电脑版在线使用_作业帮:创新科技驱动在线教育新模式

10月15日&#xff0c;在线教育领军企业作业帮在中国校长大会在线教育论坛上&#xff0c;独家发布《学习的真相&#xff1a;全国K12学情大数据及学习洞察》&#xff0c;宣布已推出作业帮直播课“名师大招”课程体系&#xff0c;集中展示多款面向K12人群的教育黑科技和硬件产品。…

【机器学习】DBSCAN聚类算法—优于Kmean—(理论+图解+python代码)

一、前言 二、DBSCAN聚类算法 三、参数选择 四、DBSCAN算法迭代可视化展示 五、常用的评估方法&#xff1a;轮廓系数 六、用Python实现DBSCAN聚类算法 一、前言 去年学聚类算法的R语言的时候&#xff0c;有层次聚类、系统聚类、K-means聚类、K中心聚类&#xff0c;最后呢…

H264白皮书

理论上我是知道一点点的mpeg4的&#xff0c;但是貌似忘记了&#xff0c;本来要重新看mpeg4&#xff0c;结果有人告诉我h264肯定比mpeg4要好&#xff0c;结果就被派去看h264了&#xff0c;看完了一个什么白皮书以后&#xff0c;只好替h264吹嘘一下了&#xff1a; 1。Intra pred…

python中的内建函数

内建函数 以下是目前我们已经渗透过的内建函数: 类型相关 int() 创建或者将其他数据转化为整型float() 创建或者将其他数据转化为浮点型bool() 创建或者将其他数据转化为布尔型complex() 创建或者将其他数据转化为复数str() 创建或者将其他数据转化为字符串list() 创建或…

卡巴斯基:风险无国界 网络安全从业者要与小网民保持一致

“互联网没有国界&#xff0c;每个国家碰到的问题基本上是类似的。对于网络犯罪这件事&#xff0c;并不针对哪个国家&#xff0c;任何有弱点、有机会的地方&#xff0c;黑客都会去。”卡巴斯基公司CEO尤金卡巴斯基在接受未来网&#xff08;微信公众号lovek618&#xff09;记者采…

js/jquery循环提取table单元格值

<table id"tbitem"><tr><td>测试数据1</td></tr><tr><td>测试数据2</td></tr><tr><td>测试数据3</td></tr><tr><td>测试数据4</td></tr><tr><td&g…

windows无法访问指定设备路径或文件_完全免费的文件数据恢复工具:Microsoft Windows File Recovery...

意外删除文件的经历是大多数人都遇到过&#xff0c;但是幸运的是有一种“后悔药”可以吃&#xff0c;因为我们可以使用一些【数据恢复软件】以找回一些已删除的文件。市面上有很多这类型的软件&#xff0c;例如EasyRecovery、DiskGenius、Recuva 等软件。但是&#xff0c;功能强…

【机器学习】XGBoost集成算法——(理论+图解+python代码比较其他算法使用天池蒸汽数据)

一、集成算法思想 二、XGBoost基本思想 三、用python实现XGBoost算法 在竞赛题中经常会用到XGBoost算法&#xff0c;用这个算法通常会使我们模型的准确率有一个较大的提升。既然它效果这么好&#xff0c;那么它从头到尾做了一件什么事呢&#xff1f;以及它是怎么样去做的呢&a…

H.264的技术优势及其在H.323系统中的应用

一、引言 近年来&#xff0c;随着我国通信网络基础设施的快速建设&#xff0c;视讯业务由于可以为处于多点的与会者提供音视频等多种信息&#xff0c;节省大量费用&#xff0c;提高工作效率&#xff0c;因而发展迅速&#xff0c;并有望成为NGN的主要业务。视讯会议系统从产生至…

python中的列表

列表操作 一组有序数据的组合就是列表 创建列表 空列表 方式1&#xff1a;变量 []方式2&#xff1a; 变量 list() 具有一个数据的列表 变量 [值] 备注&#xff1a;列表中保存的每个都称之为元素具有多个数据的列表 变量 [值,值,值....]普通操作 访问列表中的元素 …

高通被欧盟指控垄断 或将面临高达25亿美元罚款

在被韩国指控违反反垄断规定后&#xff0c;高通近期又被欧盟指控以垄断方式排挤竞争对手。在11月10日的听证会上高通将回应有关指控。高通有可能因此遭受25亿美元的巨额罚款。 欧盟之前就曾经指出&#xff0c;高通在2009至2011年以低于成本价售卖部分基带芯片&#xff0c;将英国…

wireshark

wireshark使用&#xff1a; http://wenku.baidu.com/link?urljIT43RWZbHissG70TK_hqVKRO6KWNZ4nK9RfncaFA5p-mrmjxsNd2aIapcKTtDDAjG0mddEKiLtwbqpu3Z12bXStDiDevZUGWTPxop4mKhG wireshark开源代码相关&#xff1a; http://blog.csdn.net/zx824/article/details/7207713 转载于…