HEVC Decoding in Linux for Braswell
When I reviewed the Braswell-based NUC5CPYH earlier I wrote that hardware accelerated HEVC (sometimes also known as H.265) video decoding support did not fully exist in Linux. However, the situation has changed very recently. The defacto standard Linux video framework, FFmpeg, codebase now contains the code for hardware decoding on Intel hardware that supports HEVC decoding (currently only Braswell, soon Skylake also).
If you have the knowhow to build yourself a Linux-based Kodi system according to the post #1 in this Kodi forum thread (the post is kept up-to-date), you can get yourself a system that has Kodi 16 alpha version with HEVC HW decoding inbuilt for Intel Braswell. This only makes sense if you have NUC5CPYH or NUC5PPYH of course.
If you have already installed a system according to that post earlier you can update yours by issuing two commands:
sudo apt-get update sudo apt-get dist-upgrade
UPDATE: There’s also development build of OpenELEC with HEVC decoding support for Braswell now. See the post in the Kodi forums here.
HEVC Decoding Performance
I’ve been playing around with my NUC5CPYH and watching various HEVC clips. Obviously anything at the full HD resolution (1080p) works fine, but more interestingly the device is able to decode 4K (3840×2160) HEVC videos rather well. Even if the software is in its very early stages the results are very encouraging.
- 2160p24: playback was smooth
- 2160p30: some videos were totally smooth, on some videos I saw frames skipped
- 2160p50: a small amount of frames skipped and dropped (very watchable still)
- 2160p60: significant amount of frames skipped and dropped (disturbing jerkiness at times, yet surprisingly watchable)
These results are seen on the NUC5CPYH which has the N3050 CPU and 12 execution units in the GPU. Based on my discussions with NUC5PPYH owners, the 16 execution units in the GPU of that model help make a difference when it comes to 50p/60p playback at 4k resolution. One user told me that the statistics show frames being skipped at 60p, but he thought the playback was visually perfect.
All in all, excellent performance from the low-cost NUC. The Braswell NUC has indeed raised the bar. Instead of asking “Will it do proper deinterlacing of SD content?” the question is now “Will it do 4K HEVC at 60 frames per second?” and while the NUC5CPYH won’t do (at least yet) 4k HEVC at 60 frames per second, it comes quite close. And who knows where we’ll end up as the driver and software development goes on. Remember that in any case there’s no way to get more than 4K at 30 fps out from the box as it only has HDMI 1.4a interface and HDMI 1.4a maximum is 4K at 30 fps. 60 fps 4k decoding is only needed for content that is in that format, but it will always need to be scaled down to 1080p or other resolutions.
It’ll probably take a month or two before all the HEVC support is properly integrated in the actual releases of Kodi and OpenELEC. The current development build of OpenELEC delivers good results already now though.
How do the Braswell CPU’s handle the more CPU intensive KODI skins like Transparency? Is scrolling through the movie list and loading of fanart smooth? I currently run my KODI on a desktop class CPU, as the early generation mini-pc’s didn’t have the CPU power to run Transparency smoothly.
Have you tested the various h.265 parameters? HW decoding is still very limited it seems
i.e. what about 10-bit profiles? Main 10 and High 10p?
This is important because Netflix uses 10-bit hevc and I think it will become increasing common, especially with Ultra HD discs (the successor to bluray) and future streaming to be more efficient. Nothing supports High 10p AFAIK and only Skylake supports decoding Main 10p profile.
Not sure if you are familiar but sometimes there are limiations with reference frame counts (I or B, etc), GOP length, etc Most people will probably stick to profiles but there are other parameters that fall outside the profiles that remain within the h.265 spec.
There’s no 10-bit support in Braswell and as far as I understand even Skylake won’t bring 10-bit support. Kaby Lake should be the first Intel CPU to have HW decoding of 10-bit HEVC. Some NVidia graphics cards have 10-bit decoding support (Maxwell I think it was) but even they output 8 bits only.
Thanks for the review, nice read and informative! One question though: I noticed that the NUC has a SPDIF-port, will that work with a cable like this one: http://www.allekabels.nl/spdif-kabel/5807/1162722/spdif-optische-kabel.html ?
That would really save me an hdmi audio extractor as my receiver doesn’t have a hdmi interface.
I think that’s exactly the kind of cable you should use. The end looking like the traditional 3.5 mm connector should be going to the NUC and the traditional SPDIF connector to your receiver.
I figure out that the the max FPS for the HEVC (8-bit) decode in Braswell processor is 30 FPS for 2160p, and 120 FPS for 1080p. In which in that case, will may experience stuttering/frame skips while playing videos over high fps in 4K.
I also tested VP9 decode on my chromebook, with a maximum res of 1080p at 30 FPS, it plays perfectly on YT. And I’ve used h264ify-enhanced to disable 60 FPS for VP9 decode on YT (caps at 720p or 1080p if 1080p is 30fps).