Log in

View Full Version : Performance Comparison Results - H.264/AVC Codecs: FFDshow, CoreAVC Pro, MPC-HC


JakFrost
20th March 2009, 04:49
This is a little informal performance comparison that I put together quickly on my system today while trying to figure out which H.264/AVC decoder used the least amount of processor time. The tests here are based on my aging system while some background tasks were running and were captured manually with Performance Monitor counter logs feature so they should not be used as a strict benchmark but they do give a very good impression of how the codecs compare.

I've been a big fan of FFDshow for all my audio and video decoding and I really like this software but some folks were pushing me towards using other decoder codecs so today I decided to give them a try. I got CoreAVC and also read the details about how to successfully enable DXVA (DirecX Video Acceleration) for Media Player Classic Home Cinema.

Conclusion: I found that Media Player Classic Home Cinema - H.264/AVC (DXVA) decoder filter uses only ~4% CPU to decode a complex 1080p movie scene and CoreAVC 1.9.5 Pro with CUDA Enabled at uses 3x more at ~15% CPU, and FFDshow software libraries FFmpeg-MT using 25x more at 105% and libavcodec using 33x more at 128%.

Note: On a computer with a Dual Core processor and multi-threaded applications the % Processor Used counter for the process might will be higher than 100% if the threads are executed on different cores at the same time. This is evident in the FFDshow results with peaks of 162% and 167% percent.



Results

FFDshow (FFmpeg-MT & libavcodec)

Video Codec: FFDshow rev2737 2009-03-02 clsid sse icl10 (http://sourceforge.net/project/showfiles.php?group_id=173941&package_id=199416&release_id=439938)

FFDshow (FFmpeg-MT)

Codec Config: FFmpeg-MT
Decoding: Software - CPU (Dual Core) 2-threads

http://forum.doom9.org/attachment.php?attachmentid=9644&d=1237521658

FFDshow (libavcodec)

Codec Config: libavcondec
Decoding: Software - CPU (Dual Core) 2-threads

http://forum.doom9.org/attachment.php?attachmentid=9645&d=1237521663



CoreAVC Professional

Video Codec: CoreAVC 1.9.5 Professional (http://www.coreavc.com/)

CUDA Off

Codec Config: CUDA Off, Deinterlace Single, Auto Everything Else
Decoding: Software - CPU (Dual Core)

http://forum.doom9.org/attachment.php?attachmentid=9642&d=1237521647

CUDA On

Codec Config: CUDA On, Deinterlace Hardware, Auto Everything Else
Decoding: Hardware - nVidia GPU Acceleration

http://forum.doom9.org/attachment.php?attachmentid=9643&d=1237521653



Media Player Classic Home Cinema - H.264/AVC (DXVA)

Video Codec: Media Player Classic Home Cinema 1.2.908.0 32-bits (http://sourceforge.net/project/showfiles.php?group_id=170561)

MPC-HC - H.264/AVC (DXVA)

Codec Config: Default - Threads 2, Deblocking Default, Errors Careful, IDCT Auto
Decoding: Hardware - DirectX Video Acceleration

http://forum.doom9.org/attachment.php?attachmentid=9646&d=1237521667



Specifications

Software

Operating System: Microsoft Windows XP SP3 32-bit (http://www.microsoft.com/windows/windows-xp/)

Splitter: Haali Matroska Splitter - 2009-01-11 (http://haali.cs.msu.ru/mkv/)

Player Config: DirectShow Video: VMR9 Renderless, 3D Surfaces, Bilinear

Video Driver: nVidia ForceWare 182.08 2009-03-03 (http://www.nvidia.com/object/winxp_182.08_whql.html)

Audio Codec Config: FFDshow Audio Codec: AC3/E-AC3/DTS = libavcodec, Output: Pass-through (S/PDIF, HDMI) = Enabled for AC3 & DTS

Hardware

CPU: AMD Opteron 175 Dual-Core 2.2 GHz 1 MB 90 nm 939 11x CCBWE 0543TPMW VID 1.350 V (http://www.amd.com/us-en/Processors/ProductInformation/0,,30_118_8796_9240,00.html) - 2,475 MHz (225x11x4), 1.55 V (1.55 V x 100.0 %)
FAN: Zalman CNPS9500 LED 92 mm Fan+Heatsink (http://www.zalman.co.kr/ENG/product/Product_Read.asp?idx=277) + Arctic Silver 5 Thermal Paste 99.9 % (http://www.arcticsilver.com/as5.htm) - 35 C Idle, 45 C Load
MOB: DFI LanParty UT SLI-DR Expert 939 nF4 PCI-e Rev.AA0 (http://us.dfi.com.tw/portal/CM/cmproduct/XX_cmproddetail/XX_WbProdsWindow?action=e&downloadType=&windowstate=normal&mode=view&downloadFlag=false&itemId=479) - BIOS: 2006-04-06 Modded, LDT 1.20 V, Chipset 1.52 V, 42 C Load
RAM: Mushkin 4x 1 GB XP4000 Redline 991493 DDR500 3-3-2-8 2.6-2.9 V CE-6 (http://www.mushkin.com/doc/products/memory_detail.asp?ID=273) - 233 MHz (1:1) 2T 3-3-2-8, 2.80 V
VID: eVGA nVidia GTX 260 896 MB G92 192c 576/999 MHz PCI-e 2.0 16x 2xDVI 1xSVid 1xHDTV (http://www.evga.com/products/moreInfo.asp?pn=896-P3-1260-AR) - 600/1100 MHz, VGA to 19" CRT, HDMI 60' to 50" Plasma TV.

Source


General
Complete name : Sky Crawlers (2008) [1080p AVC; 6.1ch DTS-ES].mkv
Format : Matroska
File size : 7.93 GiB
Duration : 2h 2mn
Overall bit rate : 9 283 Kbps

Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4.1
Format settings, CABAC : Yes
Format settings, ReFrames : 10 frames
Muxing mode : Container profile=Unknown@4.1
Codec ID : V_MPEG4/ISO/AVC
Duration : 2h 2mn
Bit rate : 7 370 Kbps
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16/9
Frame rate : 23.976 fps
Resolution : 24 bits
Colorimetry : 4:2:0
Scan type : Progressive
Bits/(Pixel*Frame) : 0.148

Dark Shikari
20th March 2009, 05:39
Er, so you didn't actually really compare any decoders, you only compared software vs hardware decoding?

I'm pretty sure we already knew that a decoder that doesn't use the CPU will use less CPU than a decoder that does.

JakFrost
20th March 2009, 05:53
Er, so you didn't actually really compare any decoders, you only compared software vs hardware decoding?

I'm pretty sure we already knew that a decoder that doesn't use the CPU will use less CPU than a decoder that does.

This was just something I put together myself this afternoon to see how much of a difference the CPU usage is. I wasn't really going for hard benchmarks that is why I didn't take into account any quality or dropped frame issues and I wasn't strict with the test system or timing of the tests.

What else did you have in mind in terms of comparing decoders?

Another user already mentioned doing this again with more complex video with a sample of High@L5.1 with more than 12 reference frames. I have two samples that have 13 or 16 frames and I'm going to try them tomorrow and see what happens then.

Dark Shikari
20th March 2009, 06:03
This was just something I put together myself this afternoon to see how much of a difference the CPU usage is. I wasn't really going for hard benchmarks that is why I didn't take into account any quality or dropped frame issues and I wasn't strict with the test system or timing of the tests.

What else did you have in mind in terms of comparing decoders?FFDshow vs FFDshow-mt vs CoreAVC vs DivX vs Mainconcept vs Flash vs Elecard etc etc etc? (all without PureVideo)

Kado
20th March 2009, 09:45
You missed the DivX7 h.264 decoder. But nvidia now decodes everything in hardware!

JakFrost
20th March 2009, 15:27
FFDshow vs FFDshow-mt vs CoreAVC vs DivX vs Mainconcept vs Flash vs Elecard etc etc etc? (all without PureVideo)

Okay, that sounds like a good list. I have most of these already but I'm missing Flash and Elecard so I'm going to get those today. On top of this I even have CyberLink PowerDVD and Intermedia WinDVD so maybe I can throw that into the list.

I'll try to write up a timed testing script also to capture Perfmon (typeperf.exe), start the playback (MPC-HC), time it, then stop, and close Perfmon.

Should I use an actual renderer like VMR9 renderless, 3D Surfaces, Bilinear along with AC3/DTS S/PDIF sound pass-through for a realistic result or just go for synthetic and just do Null renderer and no audio?

THX-UltraII
20th March 2009, 16:04
Am I correct with the following:

When I play .mkv files I have the possibility to drop CoreAVC (software decoding) and let my card do the decoding. I can achieve this by check the 2 boxes H264/AVC in the Internal Filters/Transform Filters in MPC-HC correct?

If the above statement is true, than there are some options that can be changed in the filter:

- Decoding thread number: 1,2,3,4,5 or 6 <=what do I have to pick here?
- H264 skip deblocking mode: None, Default, Non Reference, Bidirectional, Non keyframes or All frames <=what do I have to pick here?
- Error resilience: Careful, Compliant, Aggressive or Very Aggressive<=what do I have to pick here?
- IDCT algorithm: Auto, Lib Mpeg2 MMX, Simple MMX<=what do I have to pick here?
- Read AR from stream <=check or uncheck?

cheers

JakFrost
20th March 2009, 16:11
When I play .mkv files I have the possibility to drop CoreAVC (software decoding) and let my card do the decoding. I can achieve this by check the 2 boxes H264/AVC in the Internal Filters/Transform Filters in MPC-HC correct?


Please start a new thread to ask about your MPC-HC settings, and keep this one on topic of performance comparisons. On top of your question, the settings you are asking for are actually listed in the top post if you look carefully.

THX-UltraII
20th March 2009, 16:34
Please start a new thread to ask about your MPC-HC settings, and keep this one on topic of performance comparisons. On top of your question, the settings you are asking for are actually listed in the top post if you look carefully.

yes, but I want to know what those settings do actually.

JakFrost
20th March 2009, 18:50
yes, but I want to know what those settings do actually.

Start your own thread please, and keep this one on topic of performance, not what those settings do.

Kado
20th March 2009, 19:58
You can actually use DXVAChecker to benchmark the software decoders but use VMR7 so you don't have the 60 Frames maximum limitation.

My results using Haruhi video (http://rapidshare.com/files/113536801/Suzumiya_Haruhi_no_Yuuutsu_-_C4_-_Special_Ending_-__Hitsuji__e569a2b7_.mkv.html), using "benchmark" and a "single pass":
ffdshow-mt rev 2777=> avg=128 / min=90 / max=199
MPC-HC video decoder rev 1010=> avg=107 / min=77 / max=246
CoreAVC Professional v1.9.5.0=> avg=178 / min=137 / max=302
DivX v7.1 decoder=> avg=175 / min=117 / max 249
Cyberlink pdvd 8 decoder=> avg=143 / min=115 / max=200

I have no other h264 decoders, cpu is a Pentium D currently @ 3.6GHz (960MHz FSB) and ram is @ 800MHz 5.5.5.12.