【下載】Media Player Classic HomeCinema 2860



贊助商連結



per1
2008-10-02, 10:19 PM
官方網站連結:
http://xvidvideo.ru/
Keyword: Продолжение...
----------------------------------------------------------------------------------------------------
有興趣的玩玩吧..:)
最新發布版:2860
Changelog:
http://mpc-hc.svn.sourceforge.net/viewvc/mpc-hc/?view=log
官方討論串:
http://forum.doom9.org/showthread.php?t=123537
----------------------------------------------------------------------------------------------------
MPC-HC簡單說明(不定期更新內容):
甚麼是DXVA(DirectX Video Acceleration)?
根據微軟最簡單的說法是:
DirectX Video Acceleration (DXVA) is an API and a corresponding DDI for using hardware-acceleration to speed up video codec processing.
DXVA是一個API且是為了使用硬體裝置來加速視訊處理的一致性DDI(Device Driver Interface )。
DDI是微軟為了與硬體驅動程式溝通提供的一種接口。DDI必須是驅動程式有實作才有用,例如: 針對DirectDraw有提供DirectDraw DDI或著Direct3D提供Direct3D DDI。
DirectX VA提供了幾種DDI讓驅動程式使用,例如: motion compensation DDI、deinterlacing DDI 、ProcAmp DDI等等...。
基本上,這些牽涉的絕對是System-Mode層級的部分。
當然!這些隨便聽聽就好..!

如何得知GPU對於DirectX VA的支援能力?
您可以透過小日本的DXVA Checker來查看GPU對於DirectX VA的支援能力。
http://j122251751.myweb.hinet.net/man/dxva_checker_caps.jpg
官方網址: http://bluesky23.hp.infoseek.co.jp/
MPC-HC的開發者建議您要使用MPC Video Decoder的DXVA功能,建議是以下GPU產品:

* ATI Radeon™ HD, ATI HD3850/3870/4850/4870, AMD Hybrid CrossFireX™ 780G series for H.264 & VC-1
* nVidia GeForce 8500, 8600, 9600 or better
上面只是表示一部分,不代表這些以外都不行。例如: 您的nVIDIA的PureVideo HD是VP2.0版本,可以支持完整的H264加速能力。基本上,還是建議您使用DXVA Checker來查看您的GPU支援能力!
DirectX VA Restricted Profiles
http://j122251751.myweb.hinet.net/man/dxva_caps.jpg
Profile List:
http://j122251751.myweb.hinet.net/man/dxva_profile_table.jpg
上面這張表除了表達DXVA的支援能力,也概述了目前哪些影像編碼格式有被微軟支援實作DXVA去加速Decoding流程。
----------------------------------------------------------------------------------------------------


我應該怎麼啟動DirectX VA來調用GPU作加速?
這個前提必須是ISV的Software Decoder設計要能夠呼叫DXVA API才行。現在很多Software Decoder都已實作DXVA支援,例如: Cyberlink的PowerDVD、Corel的WinDVD9等..。當然,MPC-HC本身的Internal MPC Video Decoder早已支持DXVA功能來調用GPU作加速與後期處理!
MPC-HC的MPC Video Decoder對於DXVA支援能力只包含了兩個主流的格式:H264/AVC和VC-1格式,這點要注意一下。要使用MPC-HC內建的MPC Video Decoder,必須要在Internal Filters項目下確認您是否勾選H264/AVC(DXVA)和VC1(DXVA)項目。
http://j122251751.myweb.hinet.net/man/dxva_sel.jpg
當勾選的時候,才代表你要啟動MPC Video Decoder DXVA加速功能!
MPC Video Decoder Properties
我們來看看關於這個Video Decoder的設定項目
http://j122251751.myweb.hinet.net/man/mpcv_box.jpg
FFmpeg settings項目是我們所要關注的。其中,比較重點的就是Decoding thread number,這個項目對於SMP或著CMP架構的系統是有幫助的,例如您使用Dual-Core CPU,那麼一次可以排程的thread數量會是2,對於效能來說是會提升的。
H264 skip deblocking mode這個就是deblocking項目,這個項目如果是DXVA啟動的時候,他是沒有任何效果的!因為deblocking會是由驅動程式呼叫GPU來做,但是你使用軟體解碼的話,那麼這項目會是有影響的,我們來看看一個極端的比例,這是我從幾部影片挑出畫質不怎麼樣的影片擷取部分畫面:
http://j122251751.myweb.hinet.net/man/deblock_undeblock.jpg
可以看出事實上是有差異的,不過deblocking會消耗CPU資源,但對於目前的CPU來說,deblocking運算應該都是可以勝任的!..
如果您是使用軟體解碼的話,建議您將H264 skip deblocking mode項目設為Default就好。
Read AR(Aspect Ratio) from stream建議要勾選,他可以從Video Stream讀取影像大小比例。
----------------------------------------------------------------------------------------------------


我要如何得知DirectX VA是否是運作狀態?
我們可以說明兩個作法:

點選Display Stats來顯示當前訊息
在播放影片的時候,透過MPC Video Decoder Properties顯示DXVA狀態訊息
自1094版新增狀態列的DXVA啟動狀態

我們先從利用MPC Video Decoder Properties對話方塊來看看:
http://j122251751.myweb.hinet.net/man/dxva_mpcv_box_status.jpg
可以看出DXVA Mode正是表示您的DXVA運作狀態,只有Not using DXVA訊息代表您DXVA沒有正常啟動,否則除此之外都是運作啟動的!
再來,我們點選Display Stats來顯示當前訊息:
http://j122251751.myweb.hinet.net/man/display_stats.jpg
自從合併Beliyaal的版本之後,顯示的訊息也更為詳細,我們只要知道的是內容中DXVA1項目(如果您是Vista以後的系統會是DXVA2),這正是代表您的DXVA是否正常啟動,無法正常啟動的話依然還是會顯示Not using DXVA!
*Display Stats點選方式: View->Renderer Settings->Display Stats
http://j122251751.myweb.hinet.net/man/dxva_status_panel.jpg
接下來看第三種的檢查方式。根據1094版的Changelog:

ADD: Indicator of the mode DXVA on status panel.
這個版本以後增加了在狀態列(Status)提示DXVA是否是啟動狀態的功能,顯然這是更直覺的一種顯示方式。
*DXVA Status查看方式: View->Status

Renderer的簡單介紹與選擇?
我們將會花很多時間耗在這裡,不只是單純只是選哪個項目就好。來先看看MPC的Output Renderer家族:
http://j122251751.myweb.hinet.net/man/ovr.jpg
我們可以看到除了古老的Overlay Mixer以及微軟提出的VMR和EVR之外。根據1048版的記載,提供一種新的Video Renderer,是為madVR。這是由doom9論壇的madshi網友所開發的,呈現出來的畫質似乎是比Overlay Mixer、VMR和EVR都還要好,不過等一下再稍微介紹這個madVR。
我們來看看MPC-HC的實際設定項目:
http://j122251751.myweb.hinet.net/man/mpc_renderer.jpg
我們知道Video Renderer的目的是用來接收解碼過後的RGB/YUV資料,最後丟到Monitor顯示。在XP系統的情況下,會預設使用VMR7,而Vista/2008則是會採用EVR。
我們首先先知道最古老的Overlay Mixer,雖然這沒甚麼好講的,但是還是稍微提一下。
Overlay Mixer,我姑且簡稱OVM,他是全部Video Renderer中速度最快的,原因無他,因為他做的事情很單純!不像VMR和EVR複雜了一點。這東西根據微軟的說法,針對DVD和廣播視訊設計的。下面是DVD資料流:
http://j122251751.myweb.hinet.net/man/ovm.gif
OVM最後接的Video Renderer只是負責視窗畫面的管理工作。OVM需要硬線設計,所以支援OVM的GPU有實作相關的暫存器設計。
OVM速度很快在於她只是單純scaling過後丟到framebuffer傳到螢幕上顯示,沒有做任何處理,當然OVM基本該做的事還是會做,視訊流合併、Y/C伸張等..。
OVM在像素之間做內插,所以縮放對於性能是沒有任何影響..!!
另外他資料並不是存於Primary Buffer,他有一塊獨立的Overlay Buffer來存放表面資料(也有獨立的色彩控制),也就是說,您直接按PrintScreen按鍵,基本上抓到的畫面是黑色畫面的,因為Primary Buffer掃描到的資料根本是甚麼都沒有。
OVM已經是很古老的東西了,所以已經不是我們的首選了,因此並不建議選擇他!這邊只是稍微提一下。
接下來看看OVM之後的VMR,他擁有比OVM支持更多的特性,來看看根據微軟的說法:
Video Mixing Renderer Features:
The Video Mixing Renderer 7 (VMR-7) supports the following new features:
Real mixing of multiple video streams, using the alpha-blending capabilities of Direct3D hardware devices.
The ability to plug in your own compositing component to implement effects and transitions between multiple video streams entering the VMR.
True windowless rendering. It is no longer necessary to make the video playback window a child of the application's window in order to contain video playback. The VMR's new windowless rendering mode allows applications to easily host video playback within any window without having to forward window messages to the renderer for renderer-specific processing.
A new renderless playback mode where applications can supply their own allocator component to get access to the decoded video image prior to it being displayed on the screen.
Improved support for PCs equipped with multiple monitors.
Support for Microsoft's new DirectX Video Acceleration architecture.(使用IAMVideoAccelerator接口)
Support for high-quality video playback concurrently on multiple windows.
Support for DirectDraw Exclusive Mode 100% backward-compatibility with existing applications.
Support for frame stepping and a reliable way to capture the current image being displayed.
The ability for applications to easily alpha-blend their own static image data (such as channel logos or UI components) with the video in a smooth flicker-free way.
The VMR-9 supports all the features listed above, plus:
The ability to process video data directly with Direct3D APIs such as pixel shaders.
Improved support for interlaced video content.
Support on any platform supported by DirectX.
----------------------------------------------------------------------------------------------------

上述為一些VMR的多種特性,不過首先要知道VMR7是基於DirectDraw; 而VMR9是基於Direct3D。因此,較新型的VMR9完全結合Direct3D Pipeline,建立Direct3D Surface,可以使用Pixel Shader實現一些後期效果處理,增強畫面效果。
在MPC-HC下,VMR提供Windowed和Renderless兩種模式,這兩種模式各有差異。以VMR7-Windowed來看,這個模式完全沒有脫離OVM,他依然會建立Overlay Surface,只是舊型的Video Renderer不存在了,由VMR裡的Window Manager管理,對應GPU上的Hardware Overlay只能有一個Overaly Hardware,當大於等於第二個Overlay Surface建立時,該超過的Overlay是為Software Overlay,Hardware Overlay會徹底失效(不代表DXVA會失效); 跟OVM一樣不支持Alpha-Blending效果; 多螢幕輸出的問題會受到考量( 要根據Driver的解決方式,如果有的話! )。大致上對於VMR7-Windowed來說,大概就這些重點。
那VMR-7 Renderless呢?要知道對於Renderless來說,多出來的Presenter都要開發者自行撰寫。以MPC-HC來說,在VMR-7 Renderless下,使用他會喪失一些硬體機能,例如:硬體反交錯能力、DXVA功能喪失。所以,這個模式是非常不推薦使用的模式!
然後就是VMR9了。VMR9結合Direct3D搭配Pixel Shader實現一些後期處理效果,增強畫面。首先來看看VMR9-Windowed模式。
基本上他跟VMR 7-Windowed模式類似,只是他是基於Direct3D,而且以連接Video Stream數量來說,VMR 7-Windowed跟OVM一樣僅能支持Pin 0(遇到Subpicture Stream直接Copy到Pin 0通道上),VMR 9-Windowed則是可以支持4個Video Stream去做mix。在MPC-HC下,他不能使用Pixel Shader實現後期效果、不能使用Mixing Mode,導致無法啟用Mixer,可能會喪失部分硬體機能,例如:硬體反交錯能力。總結上述幾點,VMR9-Windowed並不是推薦使用的模式。
VMR9中最後的Renderless模式,這是在XP以下的作業系統中非常推薦使用的模式。透過VMR9-Renderless模式,在MPC-HC下,由作者撰寫的Presenter,可以搭配Pixel Shader作後期處理、使用Mixing Mode啟用Mixer實現更多特性、對畫面提供另外的Resize算法(只有硬線Bilinear、Pixel Shader 2.0做出來的Bilinear和Bicubic)等這些..,所以,在XP系統的情況下,我們應當使用這個模式。
在Vista出來以後,微軟推出一種新的Renderer為Enhanced Video Renderer。
http://j122251751.myweb.hinet.net/man/evr_architecture.gif
這種Renderer是全新的設計,所以包括像DXVA呼叫方式完全跟之前的VMR/OVM不一樣(不能使用IAMVideoAccelerator接口)。
EVR基本上提供兩種方式:

The EVR media sink
The EVR filter

media sink是針對新型的WMF應用程式而用,而filter就是典型的DirectShow應用程式了。在這樣的兩種方式下,雖然微軟官方大多文件都是講述針對Vista以上的作業系統,但是,如果你安裝了Framwork .NET 3.x以上,在一般的DirectShow應用程式,例如像MPC-HC,依然可以呼叫並且使用,不過DXVA功能就會無法使用了(XP沒有支持DXVA2.0)!
EVR完全結合Direct3D,所以允許透過Pixel Shader來對畫面作後期處理,不過這個要取決於Presenter。在MPC-HC下,透過.NET Framework 3.0提供一個EVR可以使用,但是沒有辦法結合字幕輸出(沒辦法連接MPC-HC的Subtitle Renderer)、不能用Pixel Shader作後期處理、DXVA功能會失效,因此這不是我們想要的。針對於Vista用戶,您應當要選擇EVR Custom Pres.,透過開發者自寫的Presenter,可以混合字幕流輸出、連接DXVA裝置和使用Pixel Shader作後期處理。
EVR跟VMR不同之處,他沒有Windowed、Windowless和Renderless;不提供Mixing Mode,所以Mixer是永遠建立的。EVR提供16個Video Stream作混合到一個畫面上(透過Mixer),最終再由Presenter輸出Frame。
http://j122251751.myweb.hinet.net/man/evr_data_flow.gif
使用Vista作業系統的使用者,您應當EVR Custom Pres.作為您的預設Renderer。事實上,對於Vista來說,預設的Video Renderer就是EVR。
關於VMR7/9(renderless) and EVR CP settings的設定
http://j122251751.myweb.hinet.net/man/vmr_evr_settings.jpg
從標題就可以看出來了,這邊設定只針對VMR的Renderless和EVR的CP模式才有作用,來稍微解是這些設定好了。
Surface項目允許我們建立所選擇的表面資料。這邊的建議是,您不應當選擇2D surfaces,因為選擇這個項目,您連接Direct3D就沒有任何意義了!Resizer算法和Pixel Shader都不能使用,基於建立出來的表面資料應該是基於DriectDraw,而不是Direct3D。
所以,您該選擇的是3D surfaces,透過Direct3D建立表面資料,以便使用相關其他項目,例如Resizer或著Pixel Shader等...。
Resizer(Luma)使用必須先建立3D surface,也就是說您必須要先選擇3D surfaces,在Surface項目下。這個項目提供各種不同的內插算法,所有項目中,您不應該選擇Nearest Neighbor算法,因為他表現出來畫面不佳,其餘的則是供各位選擇使用,Bilinear是針對4個像素取樣做內插;Bicubic算法就比較複雜了,他使用16個像素做內插,A變數值可以表現畫面不同的銳利程度,就看各位怎麼去選擇了!(PS2.0表示是使用Pixel Shader 2.0實作)
Mixing Mode會建立使用Mixer,所以必定要選擇!
YUV Mixing是基於Mxing Mode提供的,這選項根據微軟的說法是:

When the VMR is in YUV mixing mode, all de-interlacing and video stream composition operations are performed in YUV color space. YUV surfaces typically require from 50% to 60% less memory bandwidth than equivalent RGB surfaces.

The deinterlacing and stream composition are performed by a single call to the graphics driver. The driver can use the graphics hardware's multi-texturing capabilities, resulting in additional memory bandwidth savings.
簡而言之,就是這個項目下,對於YUV格式影片可以節省記憶體占用(大約可以到60%~70%,這是個人認為的啦!),微軟對這個選項主要在於:

It trades some of the power of the VMR mixer for better performance on low end graphics hardware that uses a unified memory architecture design.
上述這段話指的是對於低階圖型裝置,不過他這個說法意指那些使用Unified Memory Architecture的GPU晶片,也就是說,如果您使用的GPU,他的Framebuffer是從System Memory分出來用的,哪麼不妨可以使用這個選項來減少對System Memory的占用。
針對這個YUV Mixing,我們來做一個簡單的測試。首先,我個人隨便拿一部1080p影片來播放,搭配工具為MemStatus,GPU則是使用9600GT(Framebuffer:512MB)。
這是未撥放影片的Framebuffer占用情況:
http://j122251751.myweb.hinet.net/man/total_framebuffer.jpg
那消失的4MB Framebuffer應該不用我說明是怎麼一回事了吧。我們撥放影片而未啟用YUV Mixing的情況:
http://j122251751.myweb.hinet.net/man/no_yuv_mixing_framebuffer.jpg
啟用YUV Mixing時,我們所得到的Framebuffer占用情況:
http://j122251751.myweb.hinet.net/man/yuv_mixing_framebuffer.jpg
你可以發現透過YUV Mixing項目確實減少對Framebuffer的占用!這個項目要不要用就看各位的決定了,如果對於使用類似"共用記憶體結構"的GPU使用者,其實用不用意義也不大,因為現在Main Memory的價格都相當便宜,不過開啟總是會有好處的,就算您是使用獨立的GPU顯示卡也一樣!
EVR當然不可能用了,但是EVR的Framebuffer占用接近使用VMR+YUV Mixing的情況。
http://j122251751.myweb.hinet.net/man/evr_yuv_mixing_framebuffer.jpg
Alternative Vsync雖然說和垂直同步信號有關,但是小弟不才,實在不清楚這個項目的實際效果為何!所以沒辦法提供對於這個項目的解釋!
D3D Fullscreen這個項目就我所知,是打消Tearing Screen問題用的,但是坦白講,我覺得他不是很好用,要不要選就見仁見智囉!
EVR Buffers這個項目當然只EVR Renderer才有作用,他主要可以對表面資料做緩衝,事實上一般情況下,按預設就好,因為只會有一個主表面資料!
http://j122251751.myweb.hinet.net/man/rm_qt_renderer.jpg

最後關於RealMedia Video和QuickTime Video的設定項目,雖然說這是關於RealMedia和QuickTime的獨立Renderer設定調整,但是基本上這兩個設定項目已經沒有任何影響力了(這是因為一般情況下,這兩個設定項目根本沒用!),所以調不調都無所謂囉。)

http://j122251751.myweb.hinet.net/man/haali_renderer.jpg
Haali Renderer是有關於Matroska Splitter的Renderer,所以要用他前必須要安裝該Splitter,除非有必要,否則他不是我們建議的推薦項目。這個Renderer對於Resize是使用Bicubic算法作內插。
Haali Render可以做Y/C伸張轉換,要在*Luma Range調整,並且提供BT.601(SD Video)和BT.709(HD Video)的不同方案轉換(可以直選Auto去自行偵測)。
*Luma(或著Luminance)指的是明亮度,也就是灰階值。
http://j122251751.myweb.hinet.net/man/madvr_renderer.jpg
madVR Features:
- high quality chroma upsampling
- high quality scaling (bicubic, mitchell, lanczos, spline etc)
- high quality YCbCr -> RGB conversion
- gamut & gamma correction for display calibration- full 16bit processing queue
- final 16bit processing result is dithered down to RGB output bitdepth
- bypasses graphics card's video (damage) algorithms
- all work is done via GPU shaders
- no shortcuts, highest quality has priority over anything else
----------------------------------------------------------------------------------------------------

madshi Video Renderer(madVR)是MPC-HC後期版本提供的一種新型的Renderer。他是由doom9論壇的madshi網友所開發的一種Renderer,表現出來的畫質比之前所有Renderer都來的好,但是他有些缺點。根據madshi網友所提出的缺點:

hardware accelerated video decoding (DXVA) is not supported
slow startup when using 3dlut technology (96MB file must be read)

不支援DXVA到也無所謂;3DLUT的LUT指的是Look-Up Table,不使用的情況下會採用1D LUT。使用3DLUT意謂著會擴展更大的灰階值域,因此需要更多的Framebuffer來塞(是需要非常多的Framebuffer- _-")。在一般使用LCD下,這個項目其實不會有太大意義,因為展現出來的畫面差異實在太小,有跟沒有其實很難看的出來,用不用得看個人了(除非您使用高階的LCD)。
另外他還有一個麻煩的缺點,就是沒辦法連接Internal Subtitle Renderer,意謂著沒辦法結合字幕流輸出到畫面上,因此這個要稍微注意一下!
這個Renderer同樣也可以做Y/C伸張處理,前面描述過,可以使用3D LUT擴展Luma Range,但是通常不需要啟動3D LUT項目。
Scaling Settings是這個Renderer的拿手好戲。裡面提供的各種Resize算法全部都是由GPU上的Shader來實現,Luma和*Chroma被拆出來可以個別做不同的Resize。
Trade Quality For Performance項目看句子就知道牽涉到的是效能問題。有沒有需要動我個人認為是沒甚麼必要動它。
這個Renderer是全部Renderer之中,畫質最好的,如果不在乎字幕問題,您可以拿來使用。
madVR會略過某些GPU上的設定,例如使用nVIDIA的GPU,Advanced項目上的Dynamic Range會被跳過,使用madVR的Y/C伸張功能。
Chroma就是Chrominance,是有關於色彩的顏色資訊。
不同Renderer所呈現的CPU Usage差異
CPU:Intel E6600
DXVA:Disabled

=Overlay Mode=
http://j122251751.myweb.hinet.net/man/overlay_cpu_usage.jpg
=VMR9 Renderless=
http://j122251751.myweb.hinet.net/man/vmr9_renderless_cpu_usage.jpg
=EVR C/A=
http://j122251751.myweb.hinet.net/man/evr_ca_cpu_usage.jpg
=madVR(Default)=
http://j122251751.myweb.hinet.net/man/madvr_cpu_usage.jpg
這種比較沒有太大意義,各位就把它當成純粹參考。madVR會因不同的Resize算法可能會有不同的CPU Usage情況。
----------------------------------------------------------------------------------------------------



使用Internal Filters
在MPC-HC中,已經內建各種DirectShow濾鏡來支援各種影片/聲音檔案輸出。
http://j122251751.myweb.hinet.net/man/internal_filters.jpg
從上圖可以看到分為兩個部分:

Source Filters
Transform Filters

這是基於DirectShow架構中採用Filter Graph技術,用於多媒體(Multimedia)應用,可以詳見下圖:
http://j122251751.myweb.hinet.net/man/directshow_arhchitecture.gif
您不需要知道這張圖的介紹到底如何運作的,你只需要知道在DirectShow中,Filter分類為三種類型:

Source Filters
Transform Filters
Renderer Filters

再提之前,我們來對DirectShow中的Filter作一些描述。
http://j122251751.myweb.hinet.net/man/avi_filter_steps.gif
這張圖是來自Microsoft中,當AVI格式檔案進行撥放的時候所經過的流程。不管是File Source、AVI Splitter或著Video Renderer等等..,每一個都是一個Filter,透過各種不同的Filter來組成一連串的處理流程反應使用者的要求。Source Filter能對於各種檔案格式進行操作,這個前提是您所提供的Source Filter必須要能處理您所提出的要求,這也包括了Splitter元件,例如:如果播放*.mkv格式的檔案,您就必須使用Haali Splitter的元件來對*.mkv檔案進行操。
在MPC-HC中提供的Source Filter能夠對目前大多檔案進行操作,其中最重要的就是Splitter,許多相關影片播放問題很多都是來自Splitter的問題,例如:影音不同步、有聲但畫面不動等等...。Splitter最主要能夠對檔案剖析,分離Audio Stream和Video Stream,再交由各自的Decoder進行解碼。
而Transform Filter最主要的目的就是對檔案進行編碼或解碼操作,這是非常重要的,MPC-HC提供了重要的MPC Video Decoder,這是基於FFmpeg所發展出來,他能夠支援目前大多影像格式,其中包括目前主流的VC-1和H.264格式。當然MPC-HC也有提供Audio Decoder來進行對音訊格式的解碼,這包括了次世代音效格式,例如:DTS-HD或著TrueHD。另外提供SPDIF項目將訊號送到外部設備去解碼。
同樣地,跟Source Filter一樣不代表裡面的Tansform Filter都有提供,例如:RealVideo,你必須要另外安裝額外的Filter元件才允許使用,像很多人在用的Real Alternative。
最後的Renderer Filter,這是MPC-HC沒有看到的,因為根本沒必要多此一舉,這個Filter牽涉到的已經和硬體有所關聯,例如:透過Splitter分離出Audio Stream,交由Decoder解碼完後,最後都會經由DirectSound Device輸出到喇叭上,這個DirectSound Device意指著支援DirectSound API的音效卡。那如果是Video Stream呢?這結果就會是我們之前描述了老半天的Video Renderer,例如:你會將解碼完的數據送往VMR9-Renderless輸出到畫面上呈現。
不同的DirectSound Device
您可以指定不同的DirectSound裝置輸出音訊訊號或著選擇系統預設。
http://j122251751.myweb.hinet.net/man/directsound_device.jpg
----------------------------------------------------------------------------------------------------


如何使用External Filter?
我們可以透過兩種方式來調用:

使用MPC-HC提供的External Filters項目來調用外部Filter
直接向系統註冊Filter元件,按照系統默認(Default)來調用

先講講第二個方式。這個方式很簡單,但是有個前提,就是您所註冊的Filter元件的位址,會是當系統呼叫該Filter元件使用的參照位址,一定要注意!如果你註冊完後,把Filter元件移到別的磁區,系統呼叫要使用的時候,那就是會抓不到而失效了。來看看註冊Filter文件的命令格式:

Command Line: regsvr32 you_dll_path\dll_name.sub_type_name
如果要進行對Filter元件的註冊移除,可以直接在加/u參數進行反註冊,做法很簡單,不是很困難。Filter元件的副檔名大多都是ax型別。

Example: regsvr32 %windir%\system32\CL264dec.ax
第一種方式是透過MPC-HC提供的External Filters項目,他沒辦法做到KMPlayer的Filter Manager這種功能,但是基本的能力還是具備。在這邊要注意一點,透過MPC-HC的External Filters項目新增的Filter元件參照位址為絕對路徑,也就是說基本上你把Filter元件移走了,同樣也會因無法參照而失效。
http://j122251751.myweb.hinet.net/man/external_filters.jpg
透過Add Filter...按鈕可以新增您所需要使用的Filter元件。當加入後可以看到列表項目有您新增的該Filter元件。您可以透過核選方塊(Check Box)來決定您是否要使用該Filter元件,或著可以使用單一選擇按鈕(Radio Button)來確定是否要運行!常用的是Prefer和Block。當設置成Prefer會強制使用該Filter元件,而Block則是會強制終止使用該Filter元件(Block只有在加入系統配置的濾鏡才可以使用,所以必須直接使用核選方塊來停用,或著按下Remove按鈕直接刪除),Set Merit項目會改變Filter呼叫優先權,我們不需要更動這個項目而且也沒必要改變優先權值。
透過Add Filter...按鈕調用的Filter元件有兩種情況,一個是透過系統註冊的Filter元件使用(在Select Filter視窗會列出向系統註冊Filter元件的表單),另一個是在按下Browse...按鈕直接手動找查你所需要使用的Filter元件(參照路徑也就是前面所提到的絕對路徑)。
如果向系統註冊Filter元件透過系統默認使用,可是有兩種同格式的Filter會是誰先使用?
這要取決於您註冊該Filter元件的優先權值,如果您發現所想要使用的Filter元件優先權值小於另一個Filter元件優先權值而以至於無法使用,您還是必須透過External Filters項目按下Add Filter...按鈕來強制調所您想要使用的Filter元件!
----------------------------------------------------------------------------------------------------


我要如何得知目前的Filters狀況?
基於目前向系統所註冊的Filters,我們可以使用幾個工具來得知目前的情況,這邊我們先用較早期的DirectShow Filter Manager來得知目前的Filter現行狀況。您可以到她的官方網站去下載該工具:
http://www.softella.com/dsfm/index.en.htm
以下是他的操作介面
http://j122251751.myweb.hinet.net/man/dsfmgr.gif
從圖中可以看到目前向系統所註冊的相關DS Filters,不過這邊要注意的是,這個程式是32位元架構,所以只能看到目前所註冊的x86 Filters。所幸的是,x64結構的DS Filter非常少,大多皆已x86為主,我想是沒甚麼影響性。這個程式允許您註冊新的Filter或著反註冊目前的Filter以及優先權(Priority)的調整。當然在Vista以後,您必須要以管理員身份操作才會有作用。
http://j122251751.myweb.hinet.net/man/dsfmgr_detail.gif
接下來,我們利用較新的工具也可以得知我們目前系統註冊的Filter情況,那就是先前提及的DXVA Checker,他同樣具備與DirectShow Filter Manager相關的功能,透過以下的操作畫面可以知道目前系統的Filters狀況。
http://j122251751.myweb.hinet.net/man/dxva_checker_dsf_into.gif
從上圖可以知道除了DS Filters之外,還可以得知新的MFT結構程序註冊狀況,很可惜的是,新版的DXVA Checker要得知目前的MFT情況時,發生了不可迴避的Exception,估計可能是bug,但是目前DS Filters的情況是可以確認的,如圖下所示:
http://j122251751.myweb.hinet.net/man/dxva_checker_dsf_list.gif
除此之外,還可以針對某個Filter得知更詳細的訊息。
http://j122251751.myweb.hinet.net/man/dxva_checker_dsf_detail.gif
而且此程式還可以針對何種Filter來確認是否支持DXVA1/2調用功能。
對於Filters的一般操作,像註冊與反註冊操作或著優先權調整,如果不是很必要的情況,我們是不需要對這些功能進行操作。大多情況下,我們只要列表查看目前的Filters情況就好。

使用DXVA Checker的Trace Log功能來追蹤當前的DXVA啟用情況
在DXVA Checker中,Trace Log功能可以在應用程式啟動中的時候,追蹤看該程式是否有呼叫DXVA API。這邊要注意一個觀點,基本上對於程式啟動,都會建立一個Instance(中文會翻成實例或實體),Instance具備相關該程式的資訊,這包括了初始化的狀態,以及提供的功能(方法/Method或操作/Operation)等等,會講這些是因為在播放影片之前,如果有需要呼叫DXVA API會建立其相關Instacne來操作,而透過DXVA Checker正是要追蹤呼叫DXVA API所建立的相關Instance資訊,當然解構化/卸載/摧毀也一併可以追蹤到。
http://j122251751.myweb.hinet.net/man/dxva_checker_tace_log_gui.gif
在稍微知道一些基礎的資訊,那麼要如何追蹤呢?上圖看到DXVA Checker的Trace Log操作畫面,Start按鈕可以進行DXVA的追蹤,而Update按鈕則是更新相關資訊,Option按鈕可以提供更多的追蹤訊息。接下來,透過一個例子來說明,我們先立刻進行追蹤(按下Start按鈕),啟動撥放器(例如MPC-HC或著KMP等等...),播放所要進行測試的影片,之後過了大約短短的幾秒鐘在按下Update按鈕,便可以得到相關的追蹤資訊,如圖下畫面:
http://j122251751.myweb.hinet.net/man/dxva_checker_tace_log_dxva_created.gif
我們可以看到DXVA Checker的Trace Log已確實記錄的相關DXVA建立資訊,從圖中表示建立了一個關於H.264 DXVA啟動資訊,而當我們終止影片的播放在按Update按鈕,得到了DXVA的相關摧毀/卸載/解構化資訊,如圖下:
http://j122251751.myweb.hinet.net/man/dxva_checker_tace_log_dxva_destroyed.gif
圖中可以看到pObject,從宣告命名方式來看,這是一個指標來存放記憶體位址(有興趣理解請參閱C/C++相關編程基礎書籍)。透過Trace Log可以方便去追蹤DXVA建立/摧毀資訊,如果使用的Player無法顯示相關的DXVA資訊(例如WMP),那麼它會是很有用的。

調用Shader來增強畫面效果?
前面我們有提過,VMR9和EVR結合Direct3D並且支持Shader功能,透過Shader的調用進一步增強後期處理的能力。在MPC-HC中,已經內建眾多Shader代碼來提供不同的效果。
http://j122251751.myweb.hinet.net/man/shader_using.jpg
調用Shader的方式很簡單,對畫面按右鍵選擇Shaders即可調用各種代碼。或著透過選單列(Menubar)的方式調用。
*選單列(Menubar)調用方式:Play->Shaders
使用進階的Combine Shaders
這邊我們來應用Shader的進階處理方式,那就是Combine Shaders。
http://j122251751.myweb.hinet.net/man/combine_shader.jpg
以往調用Shader代碼的時候,一次只能調用一組執行,如果說調用多組去合併處理,那就沒辦法了。Combine Shaders正是提供這種多組Shader代碼調用去合併處理的進階功能。使用方式並不困難,其實是非常簡單的,我們來看看透過點選Combine Shaders項目出現的對話方塊。
http://j122251751.myweb.hinet.net/man/sc_dialog.gif
透過對話方塊提供的Remove和Add按鈕可以對Shader功能模組進行新增刪除操作,例如我新增兩個Shader功能模組來對正在播放中的影片進行改變。
這是為更變的原始畫面:
http://j122251751.myweb.hinet.net/man/sc_test_alisan_1.jpg
我們加入了浮雕效果的emboss模組,畫面造成了改變:
http://j122251751.myweb.hinet.net/man/sc_test_alisan_2.jpg
再來,我們再增加一個球體效果的sphere模組與emboss模組進行合成,畫面變成如下:
http://j122251751.myweb.hinet.net/man/sc_test_alisan_3.jpg
你可以發現,畫面又發生了一些變化。
http://j122251751.myweb.hinet.net/man/sc_dialog_1.gif
Combine Shaders確實提供了我們所需要的多重Shader功能代碼合成的調用,基本上有沒有需要就要看各位的使用用途而定,這邊我們基本介紹如何去使用他。其實大多情況下能用的機會不多就是了。

待續=.="

所有Video Render中,哪個效能最好?
答案就是Overlay,我習慣叫OVM(Overlay Mode)....
但是VMR9以後的Render提供許多"新"特性..
而且現在發展也蠻成熟的..
推薦使用..!!
重點是想要字幕輸出(使用內建的字幕引擎)+硬體解碼就得靠VMR9或著EVR了..

字幕的設定參考這個就好了(我想也不用參考..大夥應該都知道)..
http://j122251751.myweb.hinet.net/man/subtitle.jpg

狀態統計
在"檢視(View)-->統計(Statistis)"可以看到目前影片撥放的狀態資訊..
http://j122251751.myweb.hinet.net/man/stats.jpg
從這邊也可以看到bitrate資訊..
以影片播放來說第[0]個通常是Video Stream
而第[1]就是Audio Stream..
這裡如果您的影片有封裝兩個音軌以上..
切換音軌的時候可以看出bitrate的變化..
http://j122251751.myweb.hinet.net/man/chgstream.jpg

Internal MPEG2-Decoder
解出來的效果還不差,內置的"去交錯"算法即是一般常見的算法,面對Interlaced的片子,效果不良!..
現在大多GPU(PureVideo or AVIVO)內置的"去交錯算法"比較高級,效果也較好..!!
透過圈選設定Interlaced Flag可以讓GPU上的硬體反交錯生效.
http://j122251751.myweb.hinet.net/mpc/hw_dint_setup.jpg
圈選後,這時內置的"去交錯算法"便不能使用..
未圈選的情況(去交錯算法選擇設為Auto):
http://j122251751.myweb.hinet.net/mpc/no_hw_dint.jpg
圈選後的情況:
http://j122251751.myweb.hinet.net/mpc/hw_dint.jpg
有興趣的自行玩玩..:)
注意!這個只是讓GPU上的硬體反交錯生效,不是啟用DXVA...!!

External Splitter/Decoder的應用
如果您並不想使用MPCHC內部的Splitter/Decoder...
MPC-HC允許您載入外部的Splitter/Decoder..
但是提醒您..!!MPC-HC並沒有像KMP或著POT有如此強大的Filter Manager..
因此他的操作是簡單的..
要注意的是!您要使用External Splitter/Decoder之前必須先停用掉相關的Internal Splitter/Decoder避免被佔用住..
只要將"核選框框"取消即可..
例如圖下的AC3項目..
您只要將AC3部分的核選框框取消即代表停止使用該AC3的Internal Decoder.
http://j122251751.myweb.hinet.net/mpc/int_filter_stop.jpg
如此這樣您才可以使用External Splitter/Decoder..
到外部篩選器可以進行對External Splitter/Decoder的新增/刪除/中止/優先權代換的操作..
http://j122251751.myweb.hinet.net/mpc/ext_filter_if.jpg
按"新增篩選器"可以進行External Splitter/Decoder的增設..
http://j122251751.myweb.hinet.net/mpc/ext_filter_sel.jpg
在這邊您可以看到的是一堆透過"regsvr32"指令所註冊進去的Splitter/Decoder..
如果您有註冊進去..
可以從這邊自行選擇...
如果沒有..
可以按"瀏覽..."自行增加獨立的Splitter/Decoder檔案..
一般常見的副檔名為.ax
如此選擇後便可以加入在"外部篩選器"裡面..
這時外部篩選器會新增一筆您所選擇的項目..
您可以按偏好去強制使用她..
或著按欄阻去強制中止他..
不然也可以設定他的優先權..
設定完以後按確定便可以進行檔案播放...
藉此可以檢查您所加入的External Splitter/Decoder是否順利啟動..
http://j122251751.myweb.hinet.net/mpc/ext_filter_check.jpg
如此便順利完成一個External Splitter/Decoder增設的操作...

問題提醒:
1.想啟用DXVA絕不能和VobSub一起並存使用,這是因為VobSub會讓DXVA失效,應當直接把VobSub完全移除..!
2.MediaInfo是一個簡單的分析軟體,不妨可以先確認看看您的Video Stream格式是否符合DXVA所支持的規範..
http://mediainfo.sourceforge.net/en
http://j122251751.myweb.hinet.net/man/media_info.jpg
3.MPC-HC的VC-1加速,目前大多情況下都有問題,推薦使用方案是使用微軟的WMVideo Decoder(但是無法啟用他的DXVA..)..
4.VMR9-Renderless會出現畫面偏灰白的情況,這是因為由於"Y/C 伸張"問題所導致的,有幾種解決方法:
如果您是使用nVIDIA的GPU,後期的driver已經提供"Y/C伸張"的調整項目..
可以從16-235 YUV伸張成0-255 RGB...
http://j122251751.myweb.hinet.net/man/yc_ext.jpg
使用ATI的GPU就比較難搞了..
因為driver版本不同可能會出現有沒有做的情況(有的有作、有的沒做、有的在Standard Video會做)都要去親自測試...
而且也沒有nVIDIA的調整方案..
必須依靠的是MPC-HC提供的0-235->0-255的Shader效果..
未伸張的情況
http://j122251751.myweb.hinet.net/man/16235.jpg
Y/C伸張後的情況
http://j122251751.myweb.hinet.net/man/00255.jpg
要不要做伸張就請各位自行判斷..
nVIDIA使用driver提供的伸張功能不可以自行又在MPC-HC在使用Shader提供的16-235->0-255的伸張代碼..
否則會發生曝光過度的現象...
5.想連結DXVA一定使用EVR C/A(Vista)或著VMR9-Renderless(XP),否則作者寫的那些Presenter代碼不就白寫了嘛...!?


6.為什麼我用MPC-HC會遇到片子撥放的時候畫面不順的情況...??
這有可能是因為Splitter的關係..
例如在MKV格式的情況下..
常常遇到這種情況..
您可以把Internal Splitter停用掉..
改換其他的Splitter..
例如Haali的Splitter...

作業系統(Operating System)對DXVA API對應的版本支持:
http://j122251751.myweb.hinet.net/man/dxva_support.jpg

DXVA資料流:
http://j122251751.myweb.hinet.net/man/dxva_data_flow.jpg
這個是取自於DXVA 1.0版本..
根據1.0版是使用兩個Interface(或著超型(Super-Type))作為擴展..
IAMVideoAcceleratorNotify : 在Ouput pin這段,取得decompressed buffer資訊或著設定uncompressed buffer資訊..
IAMVideoAccelerator : Video Decoder Filter會透過這個Interface來存取DXVA功能並且提供Renderer(OVM或著VMR)的功能指定..
DXVA 2.0以後沒有用這個了...
MC DDI其實可以另外提供IDCT這些特性去實作(只要Software Decoder和GPU有做出來..)..
所以是有彈性的..
DXVA資料流細節:
http://j122251751.myweb.hinet.net/man/soft_dxva_gpu.jpg
Hardware Accelerator流程
==AMD/ATi UVD結構==
http://j122251751.myweb.hinet.net/mpc/uvd.jpg
要注意的一點是..
AMD/ATi的後期處理(Post-Processing)是丟給SP來算的..
這種情況可能要依據SP的數量來判斷Post-Processing的處理能力..
例如可能在R4350/R4550的GPU下..
會因為SP數量過少的關係導致Post-Processing失效...
Post-Processing之前的流程是完全的硬線設計..
也就是UVD這塊..

==nVIDIA PureVideo HD結構==
http://j122251751.myweb.hinet.net/mpc/pvhd.jpg
nVIDIA整個流程都是直接硬線設計...
Post-Processing上..
SP並沒有插手處理...!!

一些編碼/解碼格式的比較
以從Media Info去分析主流的AVC例子..
一部分資訊...
Video
Format : AVC
Format/Info : Advanced Video Codec
Format profile : [email protected]
Format settings, CABAC : Yes
Format settings, ReFrames : 9 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 1mn 58s
Bit rate mode : Variable
Bit rate : 4 377 Kbps
Maximum bit rate : 12.3 Mbps
Width : 1 920 pixels
Height : 1 056 pixels
Display aspect ratio : 16/9
Frame rate mode : Constant
Frame rate : 23.976 fps
Resolution : 24 bits
Colorimetry : 4:2:0
Scan type : Progressive
Bits/(Pixel*Frame) : 0.090
Stream size : 61.7 MiB (98%)
Writing library : x264 core 65 r1016M dbc5ef0
http://j122251751.myweb.hinet.net/man/compchart2fana8.jpg
目前很多AVC格式影片都屬於AVC High..
上圖雖然說High Profile可以支持最多特性..
但不代表實做(implements)出來的Encoder會乖乖支持全部特性..
依然得看各家的Encoder支持特性為何?!.

文獻可以參考:
DirectX® Video Acceleration Specification for Windows Media Video® v8, v9 and vA Decoding (Including SMPTE 421M "VC-1")
http://www.microsoft.com/downloads/details.aspx?FamilyID=8792dfdb-8459-4cb7-adb4-fef30b609b31&displaylang=en
DirectX Video Acceleration Specification for H.264/AVC Decoding
http://www.microsoft.com/downloads/details.aspx?FamilyID=3d1c290b-310b-4ea2-bf76-714063a6d7a6&displaylang=en
DirectX VA: Accelerating Video Codec Processing
http://www.microsoft.com/whdc/device/media/directx_va/default.mspx
Windows Media Developer Center--DirectX Video Acceleration 2.0
http://msdn.microsoft.com/en-us/library/aa965263.aspx
Wiki--DirectX Video Acceleration
http://en.wikipedia.org/wiki/DirectX_Video_Acceleration
DTS-HD White Paper
http://www.dts.com/~/media/B962F033C9254AD4B62ECFC6293C9E86.ashx
About TrueHD
http://www.dolby.com/consumer/technology/trueHD.html

贊助商連結


chancewen
2008-10-03, 08:15 AM
插話一下,這套軟體有支援unicode影片檔名及字幕檔嗎?
ps:我要新ICON啦XD

billeccentrec
2008-10-03, 09:35 AM
應該是有,他會跑VobSub出來
至於KMP,自己有一個字幕程式,結果慘不忍睹(SSA)

basuya
2008-10-03, 11:49 AM
關注中!謝謝!
一直都用 KMPlayer,試用看看唷!

per1
2008-10-03, 01:07 PM
推薦的External Software Decoder或著Splitter:
/*項目格式
[元件名稱]
原件版本: [版本編號, Unknown]
支持格式: [format1, format2, format3, ... ,formatX]
Multi-Threading支持: [yes, no, none]
公司名稱: [名稱 or none]
DXVA支持: [yes or no]
特殊API支持: [api1, api2, api3, ... ,apiY]
更新支持: [持續, 終止開發, Unknown]
簡單說明: [內容]
*/

/*範例
CoreAVC
原件版本: 2.0
支持格式: H.264
Multi-Threading支持: yes
公司名稱: CoreCodec
DXVA支持: no
特殊API支持: nVIDIA CUDA API
更新支持: 持續
簡單說明:
CoreCodec CoreAVC® 2.0 for Windows is a complete solution for playing high quality HD H.264 videos on your Windows based computer.
•Supports Windows 7
•32/64 bit Support
•NVIDIA CUDA GPU support
•Supports up to 16 CPU Cores
•QuadHD Resolution Support
•Full Interlaced support
*/

==Video==

==Audio==

==Splitter==

per1
2008-10-03, 01:12 PM
應該是有,他會跑VobSub出來
至於KMP,自己有一個字幕程式,結果慘不忍睹(SSA)

當初MPC作者和VobSub作者是同一位..
所以...:P..

per1
2008-10-16, 05:26 PM
最新版:839..
建議更新..!!
因為前一版似乎有很奇怪的bug...
另外作者放上另一個MPC...
描述如下:
Media Player Classic looks just like Windows Media Player 6.4, but has many additional features. It has a built in DVD player with real-time zoom, support for AVI subtitles, QuickTime and RealVideo support (requires QuickTime and/or Real Player); built-in MPEG2/SVCD/DVD codec

per1
2008-10-21, 04:08 AM
最新版號:841...
18.10.2008
Update Traditional Chinese translation and Add Traditional Chinese into ChangeLog.
對繁體中文語系的更新..

沒啥特別改進...

dweuri
2008-10-21, 08:20 AM
可是作者的網頁還是1.1.604,為什麼其他網站的版號會比作者的還新?

per1
2008-10-21, 09:04 AM
可是作者的網頁還是1.1.604,為什麼其他網站的版號會比作者的還新?
Doom9的MPC-HC和官方作者是同一位...
只是人家並沒有把目前的最新版本正式發佈到官方網站上...

要說最原來的..
還是這個版本..
http://sourceforge.net/project/showfiles.php?group_id=82303
原來的作者早就沒有在更新了..