天天看點

VMR7與VMR9

VMR7與VMR9

     

軟體界面

在使用KMP、MPC等播放器時,我們對DirectShow 視訊渲染器總是一頭霧水,到底什麼是VMR7、VMR9?   讓我們先從Video Renderer和Overlay Mixer說起。

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之間沒有視訊資料的傳輸。注意這兩種接口是不會同時使用的!)

VMR7(The Video Mixing Renderer 7)

視訊混合渲染器7

  大家看到了,其實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。它的缺點時不可進行顔色控制,截屏也還是不夠好。

VMR9(The Video Mixing Renderer 9)

視訊混合渲染器9

  随着DirectX 9的釋出,又會出現一個新的Video Renderer,稱之為VMR-9。這個Filter使用了Direct3D 9的技術。VMR-9與VMR-7是兩個不同的Filter。VMR-9的性能更加強勁。值得注意的是,為了保持向下相容,VMR-9的Merit值并不高,它不作為系統預設的Video Renderer;如果你的應用程式隻需要很少的視訊顯示控制,建議還是使用各自平台預設的Video Renderer。   這是目前最新的視訊渲染技術(DX10出來之前還是)。它完全建立在Direct3D上,需要Direct9和最新的硬體。它可以提供最好的畫質(取決于渲染模式和顯示卡)。VMR9支援硬體顔色操作(如果卡支援),但是沒有gamma控制,因為Microsoft沒有提供。VMR9也有寬高比控制。

總結

  顯然,結果已經很明顯,如果你想獲得進階的功能和更好的品質,請使用VMR-9,如果你需要更快的速度或者機器配置不夠高,請選擇VMR-7 。   KMP中關于選擇視訊渲染器有這樣一段話:   “請選擇如何在KMP 中輸出圖像。預設情況下推薦使用覆寫混合器。如果您正在使用 Windows XP或DirectX 9 請選擇 VMR 7 / 9 未渲染,并使字幕輸出到VMR表面。它将增加字幕的品質 ;如果您無法切換到桌面模式或在 VMR 輸出中使用覆寫字幕。那麼 請選擇使用内建渲染器通過 DirectDraw 渲染直接輸出圖像。如果它可以被正确覆寫那麼使用覆寫表面将會得到更柔和和更快速的圖像播放效果。”

編輯本段視訊渲染模式介紹

01.視訊覆寫:

  大概在1995年,當mpeg1(vcd)回放在pc上開始流行的時候,pc的處理能力還麼有強大到實時播放的地步。顯示卡制造廠商适時的推出了"video overlay(視訊覆寫)"的技術。它就是種在顯示卡上用硬體完成同時顯示幾個視訊的功能(拉伸,顔色空間變換,等等...)的技術,這樣就可以在pc上流暢的播放動畫而不占用cpu。視訊覆寫的畫面品質事實上取決于顯示卡硬體。我發現市面上的絕大部分的顯示卡顯示視訊覆寫品質都很不行。在視訊覆寫上用視訊渲染技術的一個最大的關鍵就是在每個顯示卡上隻有一個視訊覆寫 unit(單元). 這樣就迫切的需要多顯示器系統了。

02.Direct3D:

  Direct3D是微軟提供給程式員使用一個不斷進化的功能集合的DirectX庫的一部分。在新釋出的direct9 中,微軟給出了一套新的功能,性能接近于覆寫 suface(接口),但是沒那麼多限制。視訊渲染技術基于direct3d比視訊覆寫提供了更好的圖像品質,還沒有視訊覆寫單顯示器的麻煩。但是,不是所有的顯示卡都支援這個技術, 還有一些根本不支援,很多不支援整套功能集。作為一個一般的參考。

03.系統預設渲染器:

  當播放器用預設回放模式播放媒體檔案的時候,在低于windows xp的所有windows系統上或者windowsxp的"vmr7", 用系統預設渲染器就意味着"标準覆寫" 。

04.标準覆寫渲染器:

  這是最老的視訊渲染技術了。在可用的時候它用到視訊覆寫,當視訊不可用的時候就退回到純cpu控制視訊。純cpu控制就是說cpu替代了視訊覆寫來幹這些事情。這對回放是個沉重的打擊(cpu更辛苦了),這個渲染的缺點是它不支援固定螢幕高寬比控制,硬體顔色控制(色調/飽和度/亮度/對比度/gamma(灰階))不可操作,而且抓圖結果會很很奇怪。

05.覆寫混合渲染:

  同樣是運用視訊覆寫技術,這個渲染器允許在那些支援顔色控制的硬體上進行顔色控制(色調/飽和度/亮度/對比度/gamma)。有些卡可能隻支援顔色控制的一個子集(比如隻有亮度)。這個渲染器也支援固定寬高比控制,隻要媒體檔案支援這個渲染器,缺點就是它傳回到純cpu控制。當視訊覆寫不可操作時,它就罷工了。在媒體模式的這個情況時候,就會回到标準覆寫渲染。在dvd模式時,會報錯說視訊解碼器不能連接配接到覆寫混合器。最後,這個渲染技術還是抓圖的效果不夠好。

06.視訊混合渲染器7(vmr7):

  這個渲染器是視訊覆寫技術和direct3d技術的結合,它隻在windows xp上有效,後來被vmr9取代了。windows media player 7-10使用這個技術.這個渲染技術預設使用視訊覆寫。然而,如果它不可用了,它可以有限的使用direct3d。它的缺點是不可進行顔色控制,截屏還是不夠好。

07.視訊混合渲染器9(vmr9):

  這是最新的視訊渲染技術。它完全建築在direct3d上,需要direct9和最新的硬體。它可以提供最好的畫質(取決于渲染模式和顯示卡)。vmr9支援硬體顔色操作(如果卡支援), 但是沒有gamma控制,因為ms沒有提供。 vmr9也有寬高比控制。

08.EVR增強渲染模式(vista系統):

  Vista新引入了全新的EVR渲染器,微軟的技術文檔倒是把這個東東吹得很強勁,但是就目前來說問題還是不少。第一個就是字幕的問題,目前用EVR是無法在高速或者急速模式下把字幕顯示出來。那個EVR C/A 倒是能夠顯示字幕,不過dxva2.0就會失效,換句話說就無法開啟geforce8顯示卡的硬體解碼功能。還有一個問題就是色階或者黑位問題。

繼續閱讀