基本介紹
- 軟體名稱:視頻混合渲染器
- 外文名:Video Renderer (VR)
概念介紹,產品介紹,總結,模式介紹,視頻覆蓋,Direct3D,系統默認,標準覆蓋,覆蓋混合,視頻混合,vmr9),vista系統,
概念介紹
VMR7與VMR9
讓我們先從Video Renderer和Overlay Mixer說起。
大家知道,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函式來畫圖。
這個渲染器是視頻覆蓋技術和Direct3D技術的結合。 它只在windows XP上有效, 後來被更高級的VMR9取代了。windows media player 7-10使用這個技術。這個渲染技術默認使用視頻覆蓋。然而,如果它不可用了,它可以有限的使用direct3D。它的缺點時不可進行顏色控制,截屏也還是不夠好。
這是目前最新的視頻渲染技術(DX10出來之前還是)。它完全建立在Direct3D上,需要Direct9和最新的硬體。它可以提供最好的畫質(取決於渲染模式和顯示卡)。VMR9支持硬體顏色操作(如果卡支持),但是沒有gamma控制,因為Microsoft沒有提供。VMR9也有寬高比控制。
總結
顯然,結果已經很明顯,如果你想獲得高級的功能和更好的質量,請使用VMR-9,如果你需要更快的速度或者機器配置不夠高,請選擇VMR-7 。
KMP中關於選擇視頻渲染器有這樣一段話:
“請選擇如何在KMP 中輸出圖像。默認情況下推薦使用覆蓋混合器。如果您正在使用 Windows XP或DirectX 9 請選擇 VMR 7 / 9 未渲染,並使字幕輸出到VMR表面。它將增加字幕的質量 ;如果您無法切換到桌面模式或在 VMR 輸出中使用覆蓋字幕。那么 請選擇使用內建渲染器通過 DirectDraw 渲染直接輸出圖像。如果它可以被正確覆蓋那么使用覆蓋表面將會得到更柔和和更快速的圖像播放效果。”
模式介紹
視頻覆蓋
Direct3D
Direct3D是微軟提供給程式設計師使用一個不斷進化的功能集合的DirectX庫的一部分。在新發布的direct9 中,微軟給出了一套新的功能,性能接近於覆蓋 suface(接口),但是沒那么多限制。視頻渲染技術基於direct3d比視頻覆蓋提供了更好的圖像質量,還沒有視頻覆蓋單顯示器的麻煩。但是,不是所有的顯示卡都支持這個技術, 還有一些根本不支持,很多不支持整套功能集。作為一個一般的參考。
系統默認
當播放器用默認回放模式播放媒體檔案的時候,在低於windows xp的所有windows系統上或者windowsxp的"vmr7", 用系統默認渲染器就意味著"標準覆蓋" 。
標準覆蓋
這是最老的視頻渲染技術了。在可用的時候它用到視頻覆蓋,當視頻不可用的時候就退回到純cpu控制視頻。純cpu控制就是說cpu替代了視頻覆蓋來幹這些事情。這對回放是個沉重的打擊(cpu更辛苦了),這個渲染的缺點是它不支持固定螢幕高寬比控制,硬體顏色控制(色調/飽和度/亮度/對比度/gamma(灰度))不可操作,而且抓圖結果會很很奇怪。
覆蓋混合
同樣是運用視頻覆蓋技術,這個渲染器允許在那些支持顏色控制的硬體上進行顏色控制(色調/飽和度/亮度/對比度/gamma)。有些卡可能只支持顏色控制的一個子集(比如只有亮度)。這個渲染器也支持固定寬高比控制,只要媒體檔案支持這個渲染器,缺點就是它返回到純cpu控制。當視頻覆蓋不可操作時,它就罷工了。在媒體模式的這個情況時候,就會回到標準覆蓋渲染。在dvd模式時,會報錯說視頻解碼器不能連線到覆蓋混合器。最後,這個渲染技術還是抓圖的效果不夠好。
視頻混合
這個渲染器是視頻覆蓋技術和direct3d技術的結合,它只在windows xp上有效,後來被vmr9取代了。windows media player 7-10使用這個技術.這個渲染技術默認使用視頻覆蓋。然而,如果它不可用了,它可以有限的使用direct3d。它的缺點是不可進行顏色控制,截屏還是不夠好。
vmr9)
這是最新的視頻渲染技術。它完全建築在direct3d上,需要direct9和最新的硬體。它可以提供最好的畫質(取決於渲染模式和顯示卡)。vmr9支持硬體顏色操作(如果卡支持), 但是沒有gamma控制,因為ms沒有提供。 vmr9也有寬高比控制。