• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Videobeschleunigung HEVC 4k mit nvidia?

mr44er

Well-Known Member
Themenstarter #1
Ich hab hier zuviel Mangel an Basiswissen und was man so im Netz findet, würzt das ganze noch mit grober Verwirrung nach. :(

Eingebaut ist folgende Karte:
vgapci0@pci0:1:0:0: class=0x030000 card=0x1c8210de chip=0x1c8210de rev=0xa1 hdr=0x00
vendor = 'NVIDIA Corporation'
device = 'GP107 [GeForce GTX 1050 Ti]'
class = display
subclass = VGA

Also die 'große' mit 4GB. Installiert ist der nvidia-driver 390.87_2

Die aktuelle handgetippelte conf unter .../xorg.conf.d/:
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 1050 Ti"
#Option "TripleBuffer" "1"
Option "ForceCompositionPipeline" "1"
Option "ForceFullCompositionPipeline" "1"
#Option "ColorSpace" "GPU-0.HDMI-0: YCbCr444"
#Option "ColorRange" "GPU-0.HDMI-0: Limited"
Option "DPMS" "1"
#Option "HardDPMS" "1"
EndSection

#Section "Screen"
# Identifier "Screen0"
# DefaultDepth 30
#EndSection

display: :0 screen: 0
API version: 1
Information string: NVIDIA VDPAU Driver Shared Library 390.87 Tue Aug 21 15:52:44 PDT 2018

Video surface:

name width height types
-------------------------------------------
420 8192 8192 NV12 YV12
422 8192 8192 UYVY YUYV

Decoder capabilities:

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

Output surface:

name width height nat types
----------------------------------------------------
B8G8R8A8 32768 32768 y Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8
R10G10B10A2 32768 32768 y Y8U8V8A8 V8U8Y8A8 A4I4 I4A4 A8I8 I8A8

Bitmap surface:

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

Video mixer:

feature name sup
------------------------------------
DEINTERLACE_TEMPORAL y
DEINTERLACE_TEMPORAL_SPATIAL y
INVERSE_TELECINE y
NOISE_REDUCTION y
SHARPNESS y
LUMA_KEY y
HIGH QUALITY SCALING - L1 y
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 1 8192
VIDEO_SURFACE_HEIGHT y 1 8192
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

Ich starte mpv folgendermaßen:

Code:
mpv --player-operation-mode=pseudo-gui --vo=vdpau --hwdec=vdpau
http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_2160p_60fps_normal.mp4 -> das ist H264 und läuft butterweich bei ~20% CPU-Auslastung auf dem 4k-Monitor, ebenso butterweich sind die schnellen Skips zu einer anderen Stelle ohne Grafikfehler

https://4kmedia.org/samsung-travel-with-my-pet-hdr-uhd-4k-demo/ -> das ist H265 (+HDR) und läuft extrem zähflüssig, die CPU schuftet bei ~80% rum, wenn ich skippe, dann ist erstmal alles gräulich und verzerrt. Quasi chrome-optik.
'mpv --player-operation-mode=pseudo-gui --vo=vdpau --hwdec=vdpau' -> Hierbei sind die Farben auffallend blass, aber nicht falsch.
'mpv --player-operation-mode=pseudo-gui --vo=gpu --hwdec=vdpau' -> Hier sind die Farben knallig, wie es sein sollte, denke ich mal. (10bit auf 8bit runtergerechnet oder gedithered?)

Trotzdem beides stark ruckelig.

Auf youtube läuft 2160p@30fps butterweich, aber die CPU ist fast am Anschlag. 2160p@60fps endet als Daumenkino.

Mach ich was falsch? Im Netz habe ich noch die Aussage gefunden, dass nur unter Windows 'HEVC_MAIN_10' freigeschaltet ist.
Außerdem, dass youtube nur VP9 ausliefert oberhalb von 1920x1080 und VP9 generell nicht durch vdpau beschleunigt werden kann. Chromium wurde noch empfohlen, aber das bringt die gleichen Ergebnisse hinsichtlich Daumenkino bei 4k60fps wie der Firefox.

https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
-> Die GP107 soll es laut der Tabelle können. :confused:

https://tome.one/playing-10bit-hevc-videos-on-linux-with-nvidia-and-mpv.html
-> Ist das heute noch relevant? Bei den ports finde ich nur zu ffmpeg die Option 'nonfree'
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#2
Auf jeden Fall willst du --vo=gpu --profile=gpu-hq --hwdec=vdpau. Den GPU Output, da alle anderen Outputs nur aus historischen Gründen noch da sind und nicht mehr aktiv entwickelt werden. Das High Quality Profile, da es diverse Bildverbesserungen erst aktiviert. Braucht allerdings auch Leistung. Und VDPAU als Hardware Decoder. Damit sollte es gehen. Tut es das nicht, was wohl der Fall ist, kannst du:

  • Im nvidia-settings nachschauen, ob die Karte wirklich HVEC decodieren kann. Ich hab gerade keine Nvidia-Karte zur Hand, aber es gibt da einen Tab mit einer Übersicht aller unterstützten Formate. Wenn sie es können soll und es nicht auftaucht, könnte sich ein Treiberupdate lohnen. Die von FreeBSD ausgelieferte 390 ist inzwischen schon fast antik mit Sammlerwert.
  • mpv mit -v starten. Das gibt viel schöne Ausgabe, darin steht auch, wie er versucht per GPU zu dekodieren und ob es klappt. Leider oft nicht wirklich sinnvoll, warum es schiefgeht.
Nachtrag: Die Intel-GPU in meinen Thinkpad decodiert das Video anstandlos, mpv erzeugt nur ~35% CPU-Last.
 

mr44er

Well-Known Member
Themenstarter #3
--vo=gpu --profile=gpu-hq --hwdec=vdpau Marschiert bei 'bbb_sunflower_2160p_60fps_normal.mp4' butterweich und auch sonst alles, was ich dem so hinwerfe an h264.

Im nvidia-settings kann ich währenddessen die Video Engine Utilization bei ~40% sehen.

Konsole dabei:
$ mpv --player-operation-mode=pseudo-gui --vo=gpu --profile=gpu-hq --hwdec=vdpau -v
[cplayer] Command line options: '--player-operation-mode=pseudo-gui' '--vo=gpu' '--profile=gpu-hq' '--hwdec=vdpau' '-v'
[cplayer] mpv 0.29.1 Copyright © 2000-2018 mpv/MPlayer/mplayer2 projects
[cplayer] built on Tue May 21 01:27:52 UTC 2019
[cplayer] ffmpeg library versions:
[cplayer] libavutil 56.22.100
[cplayer] libavcodec 58.35.100
[cplayer] libavformat 58.20.100
[cplayer] libswscale 5.3.100
[cplayer] libavfilter 7.40.101
[cplayer] libswresample 3.3.100
[cplayer] ffmpeg version: 4.1.3
[cplayer]
[cplayer] Configuration: /wrkdirs/usr/ports/multimedia/mpv/work/waf-2.0.9/waf-light configure --docdir=/usr/local/share/examples/mpv --htmldir=/usr/local/share/doc/mpv/html --mandir=/usr/local/man --disable-debug-build --disable-optimize --disable-pdf --disable-rubberband --disable-vapoursynth --disable-vapoursynth-lazy --enable-libmpv-shared --disable-alsa --enable-libarchive --disable-caca --enable-html --enable-dvdnav --enable-dvdread --disable-jack --disable-lcms2 --disable-libbluray --lua=52fbsd --disable-openal --disable-pulse --disable-sndio --enable-tv --enable-dvbin --disable-zsh-comp --enable-vaapi-wayland --prefix=/usr/local -j1
[cplayer] List of enabled features: 52fbsd asm atomics audio-input bsd-fstatfs build-date cplayer cplugins drmprime dvbin dvdnav dvdread dvdread-common egl-helpers egl-x11 fchmod ffmpeg gbm gbm.h gl gl-wayland gl-x11 glob glob-posix gnuc gpl iconv jpeg libaf libarchive libass libass-osd libav-any libavcodec libavdevice libdl libm libmpv-shared librt libv4l2 lua oss-audio plain-gl posix posix-or-mingw posix-spawn posix-spawn-native pthreads shaderc shaderc-shared stdatomic tv tv-v4l2 uchardet vaapi vaapi-egl vaapi-glx vaapi-wayland vaapi-x-egl vaapi-x11 vdpau vdpau-gl-x11 videodev vulkan wayland wayland-protocols x11 xv zlib
[cplayer] Reading config file /usr/local/etc/mpv/encoding-profiles.conf

Beim 'Samsung Travel With My Pet HDR UHD 4K Demo.ts' spuckt das log auch nicht mehr aus und die Video Engine Utilization ist bei 0%, was man auch am Daumenkino sieht.

Was du zur Anzeige in den Tabs bei nvidia-settings meinst, wird auch komplett von vdpauinfo ausgegeben. Habe ein paar Screenshots dazu gemacht.

Die Intel-GPU in meinen Thinkpad decodiert das Video anstandlos, mpv erzeugt nur ~35% CPU-Last.
Ungeheuerlich! ;) Habe leider mein Thinkpad nicht vorort, sonst hätte ich das da mal gestestet.

http://www.jell.yfish.us/

Von da habe ich mal getestet (45,90,110mbps), MAIN10 habe ich bewusst ausgelassen. Sie laufen so lala, CPU auf Anschlag und bei allen steht die Video Engine Utilization auf 0 und nichts im log.
 

Anhänge

mr44er

Well-Known Member
Themenstarter #4
Die Karte hat definitiv Feature Set H:
Feature Set H are capable of hardware-accelerated decoding of 8192x8192 (8k resolution) H.265/HEVC video streams

Ich habe jetzt manuell Version 430.14 installiert.

Die Video Engine Utilisation greift jetzt bei HEVC 8bit, wenn ich den mpv benutze. CPU dadurch bei ~20%, playback und skipping nun butterweich wie bei H264 :)


Peru in 4k ruckelt im Firefox weiterhin wie gehabt, jedoch im Chromium gehts fast flüssig, aber die CPU-Auslastung ist auf Anschlag da die video engine nicht benutzt wird.

Samsung Travel With My Pet HDR UHD 4K Demo.ts ruckelt im mpv wie gehabt. Jedes hevc-video in 10bit ruckelt, Bitrate und Auflösung egal.
Kann ich dem nicht mit einem Filter beikommen?