關于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.pswp.cn/news/456078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456078.shtml
英文地址,請注明出處:http://en.pswp.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 轉載于…