2018-07-05, 18:24
old version for 16.04
All EGL code was merged into Krypton - you can savely use kodi v17 based builds!
Reporting issues:
It is mandatory to always provide a full Debug Log that shows the issue. You can restart kodi before hand, reproduce and then post the logfile, by using pastebinit (sudo apt-get install pastebinit) - the following commands need to be run as the user running kodi (kodi if you followed the howto):
Issue reports without those logfiles are ignored or the posts deleted as they waste everybody's time.
Introduction
This is a new era for VAAPI. We worked together with the intel mesa people in order to get rid of the vaPutSurface method, that was the only way, besides some cpu intensive copying, to get the decoded surfaces via a texture from pixmap method to display. This always needed twice the amount of surfaces, as all the decoded surfaces needed to be copied and transfered to a texture again. Besides the additional gpu memory, this copy used too much performance and therefore high quality content like 3840x2160 with 60 frames (60p) were not really watchable even on highly performant hardware.
Besides the performance issue, this putSurface method always scaled the limited color range of the original files to FULL RGB. Introducing Banding or even worse it was scaled twice, e.g. back to limited, by the driver itself. All this won't happen anymore, cause the new zero copy approach allows us to directly render the decoded NV12 surface with our own shader. So all color conversions are in our hands now. You can savely use "Prefer VAAPI Render Method" set to on again and don't need to waste CPU cycles with bypassing this Method. All colors will be fine. If you have a Limited Range TV - you need to set "Use Limited Range" to On additionally. Also make sure that your GPU itself is running at full range, which this howto and also all OpenELEC images will do by default.
Furthermore we got implemented a feature called dithering, which will add random noise to the color scaled image when it is output on a FULL RGB monitor / lcd. So even perfect full range without any banding is now possible for VAAPI decoded material.
This thread is for guiding and testing this new approach, mainly implemented by - whom else - fernetmenta. The dithering algorithm realization in the shader was done by laurim. Wsnipex has done the packaging for the Ubuntu ppa for ease of use.
While we are trying to get this code tested and merged into kodi v17 - the daily builds and updates might get rough from time to time, whenever big changes appear in kodi. This code won't go into kodi v15 as development started right now. Also v16 does not have this code.
To use hevc-vaapi a Braswell or newer architecture is needed. Haswell and Broadwell and older arches will use the CPU for decoding.
So in short: Whatever is possible on linux nowadays on Intel hardware we have here in this build.
This thread is a follow up of: http://forum.kodi.tv/showthread.php?tid=165707
Playing 3840x2160 60p with lanczos3 (down)scaling on a 1080p display at 60hz.
Installation
-1.) Hardware Requirements / Software Requirements
SNB, IVB, HSW, BSW, BDW Intel Hardware
This installation is based upon the server iso for Ubuntu 16.04 64 bit: http://cdimage.ubuntu.com/ubuntu-server/...-amd64.iso (Until 16.04 is released, this links to the daily server iso images).
0.) Basic Installation and script tuning
First install the server iso as you would normally do, don't select any additional packages besides perhaps ssh. Also make sure to not use "encrypted home directory" cause this render the simple systemd service unusable. After installation continue with the following steps:
Allow "everyone" to start the Xserver
Now edit /etc/X11/Xwrapper.config and add the following into a new line at the end of the file:
Create the kodi user and it add it the relevant groups. If you have created the kodi user during installation only do the usermod part.
Now we give the permission to shutdown, suspend the computer, therefore create the file /etc/polkit-1/localauthority/50-local.d/custom-actions.pkla with the following content (don't introduce line breaks, especially the Action= line must be exactly one line (especially no linebreaks or auto ".." in freedesktop.login1.*), verify this):
We need a simple systemd service file (this one actively waits on network connection, see: network-online.target remove that if you don't need to wait)
Create the following file and put the listing into it: /etc/systemd/system/kodi.service
edit /etc/security/limits.conf and add before the end. remember kodi is the username, not the application. This will allow your user to get the audio thread a bit more priority.
All EGL code was merged into Krypton - you can savely use kodi v17 based builds!
Reporting issues:
It is mandatory to always provide a full Debug Log that shows the issue. You can restart kodi before hand, reproduce and then post the logfile, by using pastebinit (sudo apt-get install pastebinit) - the following commands need to be run as the user running kodi (kodi if you followed the howto):
Code:
dpkg -l |grep mesa | pastebinit
DISPLAY=:0 vainfo | pastebinit
cat ~/.kodi/temp/kodi.log | pastebinit
dmesg | pastebinit
id | pastebinit
amixer | pastebinit
Issue reports without those logfiles are ignored or the posts deleted as they waste everybody's time.
Introduction
This is a new era for VAAPI. We worked together with the intel mesa people in order to get rid of the vaPutSurface method, that was the only way, besides some cpu intensive copying, to get the decoded surfaces via a texture from pixmap method to display. This always needed twice the amount of surfaces, as all the decoded surfaces needed to be copied and transfered to a texture again. Besides the additional gpu memory, this copy used too much performance and therefore high quality content like 3840x2160 with 60 frames (60p) were not really watchable even on highly performant hardware.
Besides the performance issue, this putSurface method always scaled the limited color range of the original files to FULL RGB. Introducing Banding or even worse it was scaled twice, e.g. back to limited, by the driver itself. All this won't happen anymore, cause the new zero copy approach allows us to directly render the decoded NV12 surface with our own shader. So all color conversions are in our hands now. You can savely use "Prefer VAAPI Render Method" set to on again and don't need to waste CPU cycles with bypassing this Method. All colors will be fine. If you have a Limited Range TV - you need to set "Use Limited Range" to On additionally. Also make sure that your GPU itself is running at full range, which this howto and also all OpenELEC images will do by default.
Furthermore we got implemented a feature called dithering, which will add random noise to the color scaled image when it is output on a FULL RGB monitor / lcd. So even perfect full range without any banding is now possible for VAAPI decoded material.
This thread is for guiding and testing this new approach, mainly implemented by - whom else - fernetmenta. The dithering algorithm realization in the shader was done by laurim. Wsnipex has done the packaging for the Ubuntu ppa for ease of use.
While we are trying to get this code tested and merged into kodi v17 - the daily builds and updates might get rough from time to time, whenever big changes appear in kodi. This code won't go into kodi v15 as development started right now. Also v16 does not have this code.
To use hevc-vaapi a Braswell or newer architecture is needed. Haswell and Broadwell and older arches will use the CPU for decoding.
So in short: Whatever is possible on linux nowadays on Intel hardware we have here in this build.
This thread is a follow up of: http://forum.kodi.tv/showthread.php?tid=165707
Playing 3840x2160 60p with lanczos3 (down)scaling on a 1080p display at 60hz.
Installation
-1.) Hardware Requirements / Software Requirements
SNB, IVB, HSW, BSW, BDW Intel Hardware
This installation is based upon the server iso for Ubuntu 16.04 64 bit: http://cdimage.ubuntu.com/ubuntu-server/...-amd64.iso (Until 16.04 is released, this links to the daily server iso images).
0.) Basic Installation and script tuning
First install the server iso as you would normally do, don't select any additional packages besides perhaps ssh. Also make sure to not use "encrypted home directory" cause this render the simple systemd service unusable. After installation continue with the following steps:
Code:
sudo apt-get update
sudo apt-get install ssh python-software-properties software-properties-common xorg xserver-xorg-legacy alsa-utils mesa-utils git-core librtmp1 lirc libmad0 lm-sensors libmpeg2-4 avahi-daemon libnfs8 libva1 vainfo i965-va-driver linux-firmware dbus-x11 udisks2 openbox pastebinit udevil
sudo apt-get dist-upgrade
Allow "everyone" to start the Xserver
Code:
sudo dpkg-reconfigure xserver-xorg-legacy
Now edit /etc/X11/Xwrapper.config and add the following into a new line at the end of the file:
Code:
needs_root_rights=yes
Create the kodi user and it add it the relevant groups. If you have created the kodi user during installation only do the usermod part.
Code:
sudo adduser kodi
sudo usermod -a -G cdrom,audio,video,plugdev,users,dialout,dip,input kodi
Now we give the permission to shutdown, suspend the computer, therefore create the file /etc/polkit-1/localauthority/50-local.d/custom-actions.pkla with the following content (don't introduce line breaks, especially the Action= line must be exactly one line (especially no linebreaks or auto ".." in freedesktop.login1.*), verify this):
Code:
[Actions for kodi user]
Identity=unix-user:kodi
Action=org.freedesktop.login1.*;org.freedesktop.udisks.*
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Untrusted Upgrade]
Identity=unix-user:kodi
Action=org.debian.apt.upgrade-packages;org.debian.apt.update-cache
ResultAny=yes
ResultInactive=yes
ResultActive=yes
We need a simple systemd service file (this one actively waits on network connection, see: network-online.target remove that if you don't need to wait)
Create the following file and put the listing into it: /etc/systemd/system/kodi.service
Code:
[Unit]
Description = kodi-standalone using xinit
Requires = dbus.service
After = systemd-user-sessions.service network.target sound.target network-online.target
[Service]
User = kodi
Group = kodi
Type = simple
PAMName=login
ExecStart = /usr/bin/xinit /usr/bin/dbus-launch --exit-with-session /usr/bin/openbox-session -- :0 -nolisten tcp vt7
Restart = on-abort
[Install]
WantedBy = multi-user.target
edit /etc/security/limits.conf and add before the end. remember kodi is the username, not the application. This will allow your user to get the audio thread a bit more priority.
Code:
kodi - nice -1