Jellyfin Forum
SOLVED: Low Transcoding FPS with Intel A380 - Printable Version

+- Jellyfin Forum (https://forum.jellyfin.org)
+-- Forum: Support (https://forum.jellyfin.org/f-support)
+--- Forum: Troubleshooting (https://forum.jellyfin.org/f-troubleshooting)
+--- Thread: SOLVED: Low Transcoding FPS with Intel A380 (/t-solved-low-transcoding-fps-with-intel-a380)

Pages: 1 2


Low Transcoding FPS with Intel A380 - container_ship - 2024-07-03

Hello.
I run my Jellyfin instance in the official Docker container. My full Setup is proxmox 8.2.2 > ubuntu 23.10 VM > docker > jellyfin (like this post).
I followed the official guide and got everything up and running.

Output of lshw -C display inside the ubuntu VM:

*-display
      description: VGA compatible controller
      product: DG2 [Arc A380]
      vendor: Intel Corporation
      physical id: 0
      bus info: pci@0000:01:00.0
      logical name: /dev/fb0
      version: 05
      width: 64 bits
      clock: 33MHz
      capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
      configuration: depth=32 driver=i915 latency=0 mode=1920x1080 resolution=1920,1080 visual=truecolor xres=1920 yres=1080
      resources: iomemory:60-5f irq:39 memory:fb000000-fbffffff memory:600000000-7ffffffff memory:c0000-dffff[/code]


Output of ls -l /dev/dri

total 0
drwxr-xr-x 2 root root        80 Jul  3 17:35 by-path
crw-rw---- 1 root video  226,  0 Jul  3 17:35 card0
crw-rw---- 1 root render 226, 128 Jul  3 17:35 renderD128


Output of docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/vainfo
Code:
Trying display: drm
libva info: VA-API version 1.21.0
libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_21
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.21 (libva 2.21.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.2.3 (7c1c775)
vainfo: Supported profile and entrypoints
      VAProfileNone                  : VAEntrypointVideoProc
      VAProfileNone                  : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileH264Main              : VAEntrypointVLD
      VAProfileH264Main              : VAEntrypointEncSliceLP
      VAProfileH264High              : VAEntrypointVLD
      VAProfileH264High              : VAEntrypointEncSliceLP
      VAProfileJPEGBaseline          : VAEntrypointVLD
      VAProfileJPEGBaseline          : VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileHEVCMain              : VAEntrypointVLD
      VAProfileHEVCMain              : VAEntrypointEncSliceLP
      VAProfileHEVCMain10            : VAEntrypointVLD
      VAProfileHEVCMain10            : VAEntrypointEncSliceLP
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointEncSliceLP
      VAProfileVP9Profile1            : VAEntrypointVLD
      VAProfileVP9Profile1            : VAEntrypointEncSliceLP
      VAProfileVP9Profile2            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointEncSliceLP
      VAProfileVP9Profile3            : VAEntrypointVLD
      VAProfileVP9Profile3            : VAEntrypointEncSliceLP
      VAProfileHEVCMain12            : VAEntrypointVLD
      VAProfileHEVCMain422_10        : VAEntrypointVLD
      VAProfileHEVCMain422_10        : VAEntrypointEncSliceLP
      VAProfileHEVCMain422_12        : VAEntrypointVLD
      VAProfileHEVCMain444            : VAEntrypointVLD
      VAProfileHEVCMain444            : VAEntrypointEncSliceLP
      VAProfileHEVCMain444_10        : VAEntrypointVLD
      VAProfileHEVCMain444_10        : VAEntrypointEncSliceLP
      VAProfileHEVCMain444_12        : VAEntrypointVLD
      VAProfileHEVCSccMain            : VAEntrypointVLD
      VAProfileHEVCSccMain            : VAEntrypointEncSliceLP
      VAProfileHEVCSccMain10          : VAEntrypointVLD
      VAProfileHEVCSccMain10          : VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444        : VAEntrypointVLD
      VAProfileHEVCSccMain444        : VAEntrypointEncSliceLP
      VAProfileAV1Profile0            : VAEntrypointVLD
      VAProfileAV1Profile0            : VAEntrypointEncSliceLP
      VAProfileHEVCSccMain444_10      : VAEntrypointVLD
      VAProfileHEVCSccMain444_10      : VAEntrypointEncSliceLP

Output of docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v verbose -init_hw_device vaapi=va -init_hw_device opencl@va
Code:
ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      58.  2.100 / 58.  2.100
  libavcodec    60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter    9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample  4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
[AVHWDeviceContext @ 0x6313d5e5b480] Trying to use DRM render node for device 0.
[AVHWDeviceContext @ 0x6313d5e5b480] libva: VA-API version 1.21.0
[AVHWDeviceContext @ 0x6313d5e5b480] libva: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x6313d5e5b480] libva: Found init function __vaDriverInit_1_21
[AVHWDeviceContext @ 0x6313d5e5b480] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x6313d5e5b480] Initialised VAAPI connection: version 1.21
[AVHWDeviceContext @ 0x6313d5e5b480] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 24.2.3 (7c1c775).
[AVHWDeviceContext @ 0x6313d5e5b480] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x6313d5e8cbc0] 0.0: Intel(R) OpenCL Graphics / Intel(R) Arc(TM) A380 Graphics
[AVHWDeviceContext @ 0x6313d5e8cbc0] Intel QSV to OpenCL mapping function found (clCreateFromVA_APIMediaSurfaceINTEL).
[AVHWDeviceContext @ 0x6313d5e8cbc0] Intel QSV in OpenCL acquire function found (clEnqueueAcquireVA_APIMediaSurfacesINTEL).
[AVHWDeviceContext @ 0x6313d5e8cbc0] Intel QSV in OpenCL release function found (clEnqueueReleaseVA_APIMediaSurfacesINTEL).
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

Output of docker exec -it jellyfin /usr/lib/jellyfin-ffmpeg/ffmpeg -v debug -init_hw_device opencl
Code:
ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=amd64 --enable-libshaderc --enable-libplacebo --enable-vulkan --enable-vaapi --enable-amf --enable-libvpl --enable-ffnvcodec --enable-cuda --enable-cuda-llvm --enable-cuvid --enable-nvdec --enable-nvenc
  libavutil      58.  2.100 / 58.  2.100
  libavcodec    60.  3.100 / 60.  3.100
  libavformat    60.  3.100 / 60.  3.100
  libavdevice    60.  1.100 / 60.  1.100
  libavfilter    9.  3.100 /  9.  3.100
  libswscale      7.  1.100 /  7.  1.100
  libswresample  4. 10.100 /  4. 10.100
  libpostproc    57.  1.100 / 57.  1.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
Reading option '-init_hw_device' ... matched as option 'init_hw_device' (initialise hardware device) with argument 'opencl'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument debug.
Applying option init_hw_device (initialise hardware device) with argument opencl.
[AVHWDeviceContext @ 0x57aa60e97500] 1 OpenCL platforms found.
[AVHWDeviceContext @ 0x57aa60e97500] 1 OpenCL devices found on platform "Intel(R) OpenCL Graphics".
[AVHWDeviceContext @ 0x57aa60e97500] 0.0: Intel(R) OpenCL Graphics / Intel(R) Arc(TM) A380 Graphics
[AVHWDeviceContext @ 0x57aa60e97500] cl_intel_va_api_media_sharing found as platform extension.
[AVHWDeviceContext @ 0x57aa60e97500] Media sharing must be enabled on context creation to use QSV to OpenCL mapping.
[AVHWDeviceContext @ 0x57aa60e97500] QSV to OpenCL mapping not usable.
Successfully parsed a group of options.
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

I activated HWA (QSV with tone mapping and low power encoding for HEVC and H.264, everything else set to default) inside jellyfin and transcoding with tone mapping works however only with 50fps (without tone mapping) or 40 fps with tone mapping (from 4k > 1080p).
This seems very low in regards that I have a A380.

Did I forget some settings?

I already tried the linuxserver docker version but tone mapping didn't work here at all.

My CPU is a i5 12400F, so I think HWA is ignored and instead jellyfin uses software transcoding.


RE: Low Transcoding FPS with Intel A380 - TheDreadPirate - 2024-07-03

I'm assuming you mean without tone mapping for that first one (50 fps).

If you selected Quick Sync, Jellyfin doesn't just ignore that. And it doesn't fallback to CPU transcoding. If you select Quick Sync and it doesn't work for some reason it will just fail.

Can you share your ffmpeg log? One with tone mapping and one without tone mapping?

Also, once we get this sorted out, I recommend you upgrade the VM to 24.04. 23.10 is EOL on July 11. Make a backup of you VM then...

Code:
sudo apt update ; sudo apt upgrade ; sudo do-release-upgrade



RE: Low Transcoding FPS with Intel A380 - container_ship - 2024-07-03

Your assumption is correct.

ffmpeg log with tone mapping: https://pastebin.com/Bnx8L5mj

ffmpeg log without tone mapping: https://pastebin.com/em2weAfK


RE: Low Transcoding FPS with Intel A380 - TheDreadPirate - 2024-07-03

You are definitely using QSV in those logs.

Can you clarify if Ubuntu is a VM or LXC?

You linked another post in your opening. If Ubuntu is a VM, did you ensure that the linux-firmware package was installed?

Code:
sudo apt list --installed | grep firmware

If Ubuntu is a LXC, you will need to ensure that the non-free linux firmware package is installed on Proxmox.

Code:
sudo apt list --installed | grep firmware-linux-nonfree

You may also have to ensure that the HuC and GuC firmwares are actually present as that other user noted that HuC was missing on their system for some reason.


RE: Low Transcoding FPS with Intel A380 - container_ship - 2024-07-03

Ubuntu is a VM and the linux-firmware package is installed.

linux-firmware/mantic-updates,now 20230919.git3672ccab-0ubuntu2.10 amd64 [installed]

Edit: Ahhhh HuC and GuC are missing... sudo cat /sys/kernel/debug/dri/0/gt/uc/guc_info and sudo cat /sys/kernel/debug/dri/0/gt/uc/huc_info don't exist


RE: Low Transcoding FPS with Intel A380 - TheDreadPirate - 2024-07-03

The location of guc and huc info is weird and not consistent. I found mine in /sys/kernel/debug/dri/1/gt0/uc/huc_info.


RE: Low Transcoding FPS with Intel A380 - container_ship - 2024-07-03

Ok I added dg2_huc_gsc.bin to /lib/firmware/i915/ but nothing changed.


Edit: For people reading this in the future. I nuked my VM with this so I don't recommend adding it.


RE: Low Transcoding FPS with Intel A380 - TheDreadPirate - 2024-07-03

I just looked at your log again, the one without tone mapping. While you aren't tone mapping you are still converting the color space since the source video is HDR. So I'm thinking there is still an impact to performance when converting color spaces.

I ran some tests on my system without tone mapping, but with a 4K HDR source video, and there is a significant drop in performance compared to a SDR source video. About the same performance as what you described. See my signature for my system specs.

So I'm thinking what you are seeing is normal.


RE: Low Transcoding FPS with Intel A380 - container_ship - 2024-07-03

Well if that's the case than so be it. I checked my SDR content and here I get over 200 fps.

Little fun fact to close this, my system is based on yours. I always came across your posts while researching hardware for Jellyfin so I took some inspiration.


RE: Low Transcoding FPS with Intel A380 - nyanmisaka - 2024-07-04

Hardware decoding is not enabled.