====== Linux VAAPI/VDPAU ======
* 그래픽 카드의 GPU를 사용하여 고성능으로 동영상 Video 재생
* nVidia에서는 VDPAU 라고 함.
* [[https://freedesktop.org/wiki/Software/vaapi/|freedesktop - vaapi]]
* https://wiki.archlinux.org/index.php/intel_graphics
* https://wiki.archlinux.org/index.php/Hardware_video_acceleration
* Intell, ATI 는 VAAPI
* [[windows:dxva]] 참조.
* [[http://blog.mymediasystem.net/avchd/mplayer-vaapi-on-oneiric-ubuntu-11-10-for-amdati-howto/|Mplayer-vaapi on Oneiric (Ubuntu 11.10) for AMD/ATI HowTo at Acmelabs' Blog]]
* [[http://drupal4hu.com/node/244|VAAPI on Ubuntu Karmic Linux]]
* https://linuxreviews.org/Intel_graphics
===== vainfo =====
sudo apt install vainfo
vainfo
# 해당 기기의 가속 가능한 코덱 정보 출력
libva info: VA-API version 1.8.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_8
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.8 (libva 2.8.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.2.0 ()
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264High : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointVLD
===== Intel =====
* [[linux:nvidia|Linux Nvidia Graphic Card]] / Intel Dual graphic 일 경우에도 ''on-demand'' 나, ''intel'' 모드로 두면, intel vaapi 드라이버로 잘 작동한다.
* Intel CPU Gen 8 이상
# 기본으로 intel-media-va-driver 가 설치되는데 non-free 버전으로 교체
sudo apt install intel-media-va-driver-non-free libva-drm2 libva-x11-2
* Intel CPU Gen 7 이하
sudo apt install i965-va-driver-shaders libva-drm2 libva-x11-2
# Utilities
sudo apt install intel-gpu-tools
# intel gpu 사용상황 확인 - Video 항목의 % 가 올라가면 GPU Video Encoding 을 사용하는 것이다.
sudo intel_gpu_top
===== AMD Radeon =====
* ''fglrx'' 드라이버 설치. ''fglrx-updates''와 ''fglrx''중 잘 안되는게 있을 수 있으므로 번갈아 해 볼 것.
* ''vaapi''로 선택.
* ''xvba-va-driver'' 설치
===== NVidia =====
* [[linux:nvidia|Linux Nvidia Graphic Card]]
* Proprietary 드라이버 설치
* ''libvdpau1'' 설치 : 이것은 vdpau 드라이버임. vaapi 와는 다른 형식의 가속기능.
* [[https://github.com/xuanruiqi/vdpau-va-driver-vp9|xuanruiqi/vdpau-va-driver-vp9: Experimental VP9 codec support for vdpau-va-driver (NVIDIA VDPAU-VAAPI wrapper) and chromium-vaapi]]
* [[https://github.com/freedesktop/vdpau-driver|freedesktop/vdpau-driver: HW video decode support for VDPAU platforms. e.g. NVIDIA]]
* [[https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-beta/+sourcepub/10036592/+listing-archive-extra|]]
==== nvidia-optimus ====
* 노트북등에 장착된 nvidia / intel dual graphic 일 경우
* ''prime-select nvidia'' 상태라도 intel GPU를 통해 ''vaapi'' 비디오 encoding/decoding기능이 작동한다.
* ''vainfo'' 명령의 결과로 아래와 유사하게 intel GPU 관련 값이 나와야 한다.
libva info: VA-API version 1.20.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.1.0 ()
* 따라서 굳이 nvidia-optimus 에서 ''nvidia-vaapi-driver'' 설치할 필요가 없다.
==== nvidia-vaapi-driver ====
* https://github.com/elFarto/nvidia-vaapi-driver/ : nvidia vdpua 와 vaapi 를 연결해주는 드라이버. nvdia 를 vaapi 지원 애플리케이션에서 호출할 수 있게 해준다.
sudo apt install nvidia-vaapi-driver
* 해당 github 문서에서 firefox 에서 활성화 하는 법 등이 문서화 돼 있음.
* **아직까진 성공해본 적 없음**
===== MPlayer =====
* 기본 MPlayer는 vdpau를 지원하고 있으므로 특별한 작업 불필요.
* [[https://launchpad.net/~sander-vangrieken/+archive/vaapi|VAAPI는 VAAPI용으로 컴파일된 MPlayer 필요]] - **더이상 개발안되고 있음**
sudo add-apt-repository ppa:sander-vangrieken/vaapi
sudo apt-get update
sudo apt-get install mplayer-vaapi
* ''-vo vaapi'' 혹은 ''-vo vdpau''옵션을 지정한다.
* [[linux:smplayer|Linux SMPlayer]] 등에서 설정할 때 **성능 -> 디코딩 thread = 1**로 두고 **Screenshot을 비활성화**해야 한다. 그렇지 않으면 vaapi 가 작동하지 않았다.
===== VLC =====
* [[:vlc|VLC]] PPA 등에서 **2.1 이상** 버전을 받아서 설치하고
* 3.x 부터는 VDPAU 만 지원하고 VAAPI 는 지원안한다고 함.
* [[http://wiki.videolan.org/VLC_VAAPI|VLC VAAPI]]
* **환경설정 -> 입력 & 코덱설정 -> 하드웨어 가속 디코딩**에서 적합한 드라이버 선택.
===== mpv =====
* [[linux:mpv|mpv]], ''mpv-handler''로 브라우저 H/W 가속 가능.
===== Browser =====
* [[https://askubuntu.com/questions/1291279/ubuntu-20-10-firefox-82-intel-hd-500-vaapi-hardware-acceleration|Ubuntu 20.10: Firefox 82+, Intel HD 500, Vaapi hardware acceleration - Ask Ubuntu]]
* [[https://www.linuxuprising.com/2021/01/how-to-enable-hardware-accelerated.html|How To Enable Hardware Accelerated Video Decode In Google Chrome, Brave, Vivaldi And Opera Browsers On Debian, Ubuntu Or Linux Mint - Linux Uprising Blog]] - 가장 잘 설명된 글. Chrome 버전에 따라서도 옵션이 다름.
* [[https://forum.manjaro.org/t/howto-enable-hardware-accelerated-video-decode-in-google-chrome-brave-vivaldi-and-opera-browsers/51895|[HowTo] Enable Hardware Accelerated Video Decode In Google Chrome, Brave, Vivaldi And Opera Browsers - Contributions / Tutorials - Manjaro Linux Forum]]
* [[https://wiki.archlinux.org/index.php/Firefox#Hardware_video_acceleration|Firefox - ArchWiki]]
* [[https://wiki.archlinux.org/index.php/Chromium#Hardware_video_acceleration|Chromium - ArchWiki]]
* [[https://wiki.debian.org/HardwareVideoAcceleration|HardwareVideoAcceleration - Debian Wiki]]
* [[https://forum.manjaro.org/t/howto-enable-hardware-video-acceleration-video-decode-in-google-chrome-brave-vivaldi-and-opera-browsers/51895|[HowTo] Enable Hardware Video Acceleration / Video Decode In Google Chrome, Brave, Vivaldi And Opera Browsers - Contributions / Tutorials - Manjaro Linux Forum]] : chrome 옵션 주는 방법. arch 계열 전용인듯.
* [[https://github.com/xtknight/vdpau-va-driver-vp9|xtknight/vdpau-va-driver-vp9: Experimental VP9 codec support for vdpau-va-driver (NVIDIA VDPAU-VAAPI wrapper) and chromium-vaapi]]
* [[https://ubuntuhandbook.org/index.php/2022/07/chromium-snap-package-to-finally-get-back-vaapi-hardware-decoding/|Chromium Snap Package to Finally Get back VAAPI Hardware Decoding | UbuntuHandbook]]
==== Google Chrome 버전 / Ubuntu ====
* [[https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/gpu/vaapi.md|Chromium Docs - VA-API]]
* [[https://debugpointnews.com/va-api-chromium-wayland/|Chromium Merges Code for Native VA-API Acceleration with Wayland]] 2024년 공식적으로 VAAPI 지원이 머지되었음
* 데스크탑 애플리케이션 실행 정보 파일을 로컬로 박사하고, 해당 파일의 명령 실행부(''Exec'')에 VAAPI 활성화 옵션을 모두 추가해주고 잠시 기다리면 이제 항상 VAAPI 활성 상태로 크롬이 실행된다.
mkdir -p ~/.local/share/applications
cp /usr/share/applications/google-chrome.desktop ~/.local/share/applications/google-chrome.desktop
# wayland
google-chrome-stable --enable-features=VaapiVideoDecodeLinuxGL --use-gl=angle --use-angle=gl --ozone-platform=wayland
# x11
google-chrome-stable --enable-features=VaapiVideoDecodeLinuxGL --use-gl=angle --use-angle=gl --ozone-platform=x11
''%%--ozone-platform-wayland%%'' 옵션을 켜면 [[linux:inputmethod:ibus|iBus]] 한글 입력이 안됐음.
해당 옵션을 제거해도 아무 문제없이 하드웨어 디코딩이 작동했으므로 옵션 제거.
* chrome 확장으로 지원하지 않는 디코더는 중단시켜야 함. [[computer:lg_gram_14_14zd90n_v|LG Gram 14 14ZD90N-V]]의 경우 ''Block AV1'' 해 둠.
* [[https://chromewebstore.google.com/detail/omkfmpieigblcllmkgbflkikinpkodlk?hl=ko|enhandec h264ify]]
* [[https://chromewebstore.google.com/detail/h264ify/aleakchihdccplidncghkekgioiakgal?hl=ko|h264ify]]
=== Nvidia ===
sudo apt install libva-drm2 libva-x11-2
* [[https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-dev/+files/vdpau-va-driver_0.7.4-7ubuntu1~ppa2~20.04.1_amd64.deb|vdpau-va-driver_0.7.4-7ubuntu1~ppa2~20.04.1_amd64.deb]] 다운로드
* [[https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-dev/+files/libvdpau1_1.4-2~ubuntu20.04.1_amd64.deb|libvdpau1_1.4-2~ubuntu20.04.1_amd64.deb]] 다운로드
sudo dpkg -i vdpau-va-driver_0.7.4-7ubuntu1_ppa2_20.04.1_amd64.deb \
libvdpau1_1.4-2_ubuntu20.04.1_amd64.deb
sudo apt-mark hold libvdpau1 # libvdpau1 이 구버전이라서 버전업 중단시킴.
* nvidia 의 경우 VP9 지원을 하는 GPU더라도, 위에 설치한 라이브러리가 이를 지원하지 않기 때문에 [[https://chrome.google.com/webstore/detail/enhanced-h264ify/omkfmpieigblcllmkgbflkikinpkodlk?hl=ko|enhanced-h264ify]] 혹은 [[https://chrome.google.com/webstore/detail/h264ify/aleakchihdccplidncghkekgioiakgal?hl=ko|h264ify]] 확장으로 VP9 대신 h264 동영상을 전송하게 강제해야함(**Block VP9**).
* 단, **Youtube의 경우 VP9 을 끄면, 4K 동영상은 지원안하는 것**으로 보임. 1080p 까지만 지원.
* 보통 nvidia 탑재 PC는 사양이 높기 때문에, 1080p 의 경우 가속을 하건 안하건 큰 차이가 안남.
* 따라서 굳이 GPU 가속 설정 할 필요가 없어보임.
==== Firefox ====
* vaapi 만 지원한다.
* [[https://wiki.archlinux.org/title/Firefox#Hardware_video_acceleration|Firefox - ArchWiki]]
* [[https://fedoraproject.org/wiki/Firefox_Hardware_acceleration|Firefox Hardware acceleration - Fedora Project Wiki]]
* [[https://ubuntuhandbook.org/index.php/2021/08/enable-hardware-video-acceleration-va-api-for-firefox-in-ubuntu-20-04-18-04-higher/|Enable Hardware Video Acceleration (VA-API) For Firefox in Ubuntu 20.04 / 18.04 & Higher | UbuntuHandbook]]
* 위의 Intel GPU 관련 드라이버를 설치하고
* ''about:config'' 에서 ''media.ffmpeg.vaapi.enabled=true'' 로 변경하면 거의 그냥 된다.
* 2024년 현재, 아무것도 안해도 그냥 됐다.
* [[linux:wayland|Wayland]] Ubuntu 23.10 에서는 불필요한 설정. ''~/.config/environment.d/999-mozilla-vaapi.conf''
MOZ_ENABLE_WAYLAND=1
* [[linux:snap|Snap]] Firefox 의 경우 vaapi 지원이 됐다 안됐다하기도 함. [[linux:flatpak|Flatpak]] 버전은 됐음.
==== firefox - nvidia-vaapi-driver ====
* [[https://github.com/elFarto/nvidia-vaapi-driver/issues/23| Allow running in Flatpak Firefox #23]] : for ''nvidia-vaapi-driver'' : 현재 flatpak 에서 ''nvidia-vaapi-driver'' 를 지원하지 않기 때문에 복잡한 설정 필요함.
* ''nvidia-vaapi-driver'' 버전이 바뀔 때 마다 재실행해줘야함.
#!/bin/sh
DRI_PATH=${HOME}/.var/app/org.mozilla.firefox/dri
echo "Clearing firefox flatpak overrides"
flatpak override --user --reset org.mozilla.firefox
echo "Adding firefox flatpak overrides"
flatpak override --user --env=LIBVA_DRIVER_NAME=nvidia \
--env=LIBVA_DRIVERS_PATH=${DRI_PATH} \
--env=LIBVA_MESSAGING_LEVEL=1 \
--env=MOZ_DISABLE_RDD_SANDBOX=1 \
--env=NVD_BACKEND=direct \
org.mozilla.firefox
# uncomment the following if you use keepass running on the host
# flatpak override --user --filesystem=xdg-run/app/org.keepassxc.KeePassXC org.mozilla.firefox
echo "Copying nvidia vaapi driver into ${DRI_PATH}"
mkdir -p ${DRI_PATH}
cp /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so ${DRI_PATH}/nvidia_drv_video.so
cat <<"EOF"
Now open about:config and change `gfx.webrender.all` and `media.ffmpeg.vaapi.enabled` to true.
EOF
* ''flatpak info --show-runtime org.mozilla.firefox'' 실행 결과 버전에 맞게 ''ffmpeg-full'' flatpak 설치
flatpak info --show-runtime org.mozilla.firefox
# 결과가 22.08 이라면
flatpak install org.freedesktop.Platform.ffmpeg-full//22.08
* OS 와 동일한 nvidia 드라이버는 아마도 자동 설치 돼 있을것임(안 되면 flatpak update 해볼것)
==== Browser GPU 가속여부 확인 ====
* Intel : ''intel_gpu_top'' 명령에서 **Video** 항목이 증가하는지 확인
* Nvidia : ''nvidia-smi -q -g 0 -d UTILIZATION -l 1'' 에서 **Decoder** 항목이 증가하는지 확인.
* 4K 동영상을 틀어보면, GPU 가속이 활성화 됐을 때는 CPU 점유율이 낮고, 안됐을 때는 매우 높음을 알 수 있다.