January 3, 2017 · Radeon RX480 kodi AMD mpv RX 460 amdgpu-pro HEVC Main10 HEVC Main VDPAU VAAPI AVC H.264 H.265 Kodi 17

4K60 Kodi 17 Media Center feat RX 460 & Xbuntu 16.04

there are some quirks on HDMI 2.0 but they arnt that bad and their seems to be pretty complete support with the amdgpu-pro drivers

am using a Samsung UE55HU7505 55" 4K television using HDMI 2.0, you might not need amdgpu-pro but for my television i needed the pro drivers

But first we need to some background music for our work

Install amdgpu-pro, mpv & Kodi

First we install the latest beta/rc builds of kodi/mpv and the amd-gpu-pro driver ofc

Fixing vdpau & vaapi

Fixing Tearing

Section "OutputClass"
        Identifier "amdgpu-pro"
        MatchDriver "amdgpu"
        Driver "amdgpu"
EndSection

Section "Files"
        ModulePath "/opt/amdgpu-pro/lib/xorg/modules"
        ModulePath "/usr/lib/xorg/modules"
EndSection

Section "Device"
Identifier  "Card0"
Driver      "amdgpu"
BusID       "PCI:1:0:0"
Option      "DRI3" "1"
Option "TearFree" "on"
EndSection

Kodi 17

adding amdgpu temperature to kodi

nano $HOME/.kodi/userdata/advancedsettings.xml

<advancedsettings>
<gputempcommand>sensors amdgpu-pci-0100 | sed -ne "s/temp1: \+[-+]\([0-9]\+\).*/\1 C/p"</gputempcommand>
</advancedsettings>

Use mpv for HEVC Main10 Content (seem to work but we lose quality due to outdated surfaces and stuff but it will play in hardware on a underpowered system)

nano $HOME/.kodi/userdata/playercorefactory.xml

<playercorefactory>
 <players>
   <player name="mpv" type="ExternalPlayer" audio="false" video="true">
     <filename>mpv</filename>
     <args>--hwdec=vaapi --fs</args>
     <hidexbmc>false</hidexbmc>
     <hideconsole>false</hideconsole>
     <warpcursor>none</warpcursor>
   </player>
 </players>
 <rules action="prepend">
   <rule filetypes="mkv|mp4" filename=".*hevc.*" player="mpv"/>
 </rules>
</playercorefactory>

now we need to add kodi to autostart
Xfce Menu -> Settings (-> Xfce 4 Settings Manager) -> Session and Startup -> Application Autostart tab

Uninstall

### below is just testing and vainfo/vdpauinfo logs ###

mpv vdpau testing (thanks jell.yfish.us for samples, missing a HEVC Main 4k sample? )

wget http://jell.yfish.us/media/jellyfish-100-mbps-hd-h264.mkv
wget http://jell.yfish.us/media/jellyfish-100-mbps-hd-hevc.mkv
wget http://jell.yfish.us/media/jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv
wget http://jell.yfish.us/media/jellyfish-120-mbps-4k-uhd-h264.mkv
wget http://download.tsi.telecom-paristech.fr/gpac/dataset/dash/uhd/mux_sources/hevcds_2160p60_20M.mp4
wget http://download.tsi.telecom-paristech.fr/gpac/dataset/dash/uhd/mux_sources/hevcds_2160p60_Main10_20M.mp4
DISPLAY=:0 mpv --hwdec=vdpau --fs jellyfish-* hevcds_2160p60_*
Playing: jellyfish-100-mbps-hd-h264.mkv
 (+) Video --vid=1 (*) (h264)
Warning: LLVM emitted unknown config register: 0x4
Using hardware decoding (vdpau).
VO: [opengl] 1920x1080 vdpau
V: 00:00:30 / 00:00:30 (100%)
Playing: jellyfish-100-mbps-hd-hevc.mkv
 (+) Video --vid=1 (*) (hevc)

Using hardware decoding (vdpau).
VO: [opengl] 1920x1080 vdpau
V: 00:00:29 / 00:00:30 (99%)
Playing: jellyfish-120-mbps-4k-uhd-h264.mkv
 (+) Video --vid=1 (*) (h264)

Using hardware decoding (vdpau).
VO: [opengl] 3840x2160 vdpau
V: 00:00:29 / 00:00:30 (99%)
Playing: jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv
 (+) Video --vid=1 (*) (hevc)

Using software decoding.
VO: [opengl] 3840x2160 yuv420p10
V: 00:00:28 / 00:00:30 (94%)

rx 460 vdpauinfo report

vdpauinfo --display :0 > vdpau_rx460.txt

display: :0   screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0

Video surface:

name   width height types
-------------------------------------------
420    16384 16384  NV12 YV12 
422    16384 16384  UYVY YUYV 
444    16384 16384  Y8U8V8A8 V8U8Y8A8 

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                          --- not supported ---
MPEG2_SIMPLE                    3 65536  4096  4096
MPEG2_MAIN                      3 65536  4096  4096
H264_BASELINE                  52 65536  4096  4096
H264_MAIN                      52 65536  4096  4096
H264_HIGH                      52 65536  4096  4096
VC1_SIMPLE                      1 65536  4096  4096
VC1_MAIN                        2 65536  4096  4096
VC1_ADVANCED                    4 65536  4096  4096
MPEG4_PART2_SP                  3 65536  4096  4096
MPEG4_PART2_ASP                 5 65536  4096  4096
DIVX4_QMOBILE                  --- not supported ---
DIVX4_MOBILE                   --- not supported ---
DIVX4_HOME_THEATER             --- not supported ---
DIVX4_HD_1080P                 --- not supported ---
DIVX5_QMOBILE                  --- not supported ---
DIVX5_MOBILE                   --- not supported ---
DIVX5_HOME_THEATER             --- not supported ---
DIVX5_HD_1080P                 --- not supported ---
H264_CONSTRAINED_BASELINE      --- not supported ---
H264_EXTENDED                  --- not supported ---
H264_PROGRESSIVE_HIGH          --- not supported ---
H264_CONSTRAINED_HIGH          --- not supported ---
H264_HIGH_444_PREDICTIVE       --- not supported ---
HEVC_MAIN                      186 65536  4096  4096
HEVC_MAIN_10                   186 65536  4096  4096
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8 
R8G8B8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8 
R10G10B10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8 
B10G10R10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 A8I8 I8A8 

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         16384 16384
R8G8B8A8         16384 16384
R10G10B10A2      16384 16384
B10G10R10A2      16384 16384
A8               16384 16384

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     -
INVERSE_TELECINE                 -
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         -
HIGH QUALITY SCALING - L1        -
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y        48     4096
VIDEO_SURFACE_HEIGHT             y        48     4096
CHROMA_TYPE                      y  
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y  
CSC_MATRIX                       y  
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y  
LUMA_KEY_MAX_LUMA                y  

mpv vaapi testing

DISPLAY=:0 mpv --hwdec=vaapi --fs jellyfish-* hevcds_2160p60_*
Playing: Videos/jellyfish-100-mbps-hd-h264.mkv
 (+) Video --vid=1 (*) (h264)
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/amdgpu_drv_video.so
libva info: Found init function __vaDriverInit_0_39
Warning: LLVM emitted unknown config register: 0x4
libva info: va_openDriver() returns 0
Using hardware decoding (vaapi).
VO: [opengl] 1920x1080 vaapi
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-100-mbps-hd-hevc.mkv
 (+) Video --vid=1 (*) (hevc)
Using hardware decoding (vaapi).
VO: [opengl] 1920x1080 vaapi
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-120-mbps-4k-uhd-h264.mkv
 (+) Video --vid=1 (*) (h264)
Using hardware decoding (vaapi).
VO: [opengl] 3840x2160 vaapi
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/jellyfish-120-mbps-4k-uhd-hevc-10bit.mkv
 (+) Video --vid=1 (*) (hevc)
Using hardware decoding (vaapi).
VO: [opengl] 3840x2160 vaapi
V: 00:00:29 / 00:00:30 (99%)

Playing: Videos/hevcds_2160p60_20M.mp4
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 --alang=und (*) (aac)
AO: [pulse] 48000Hz stereo 2ch float
Using hardware decoding (vaapi).
AV: 00:02:31 / 00:02:31 (99%) A-V:  0.000

Playing: Videos/hevcds_2160p60_Main10_20M.mp4
 (+) Video --vid=1 (*) (hevc)
 (+) Audio --aid=1 --alang=und (*) (aac)
Using hardware decoding (vaapi).
AV: 00:02:31 / 00:02:31 (99%) A-V:  0.000 Dropped: 4


Exiting... (End of file)

VaInfo Report

DISPLAY=:0 vainfo
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/amdgpu_drv_video.so
libva info: Found init function __vaDriverInit_0_39
Warning: LLVM emitted unknown config register: 0x4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: mesa gallium vaapi
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264Baseline           :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

Sources (thank you all)

DigitalOcean Referral Badge
Keep my site online & receive a $200 60-day credit at DigitalOcean for your VPS Hosting
Cheaper Games on Instant-Gaming
Creative Commons Licence