jlesage / docker-handbrake

Docker container for HandBrake
MIT License
932 stars 98 forks source link

[Bug] Intel QSV not showing with Arc A310 #382

Open gen-angry opened 4 months ago

gen-angry commented 4 months ago

Current Behavior

I can't seem to get QSV working in Handbrake and I'm not sure where to look further.

I am running this container in an ubuntu 24.10 machine using podman in rootless on my user account. The host machine is an i5-6500 with an Arc A310 card. It works well in jellyfin.

User account on host has both the video (44) and render (993) groups added.

al@ubuntuserver:~$ id
uid=1000(al) gid=1000(al) groups=1000(al),4(adm),24(cdrom),27(sudo),30(dip),44(video),46(plugdev),101(lxd),112(libvirt),993(render),994(kvm)

Attached container file below.

in the container seems to have the group passed ok?

/dev/dri # id
uid=0(root) gid=0(root) groups=0(root),65534
/dev/dri # ls -l
total 0
crw-rw---- 1 65534 65534 226,   1 Nov  4 23:40 card1
crw-rw---- 1 65534 65534 226, 128 Nov  4 23:40 renderD128
/dev/dri # 

When I cd to '/output' and do 'touch test.txt', the created file correctly shows as owned by my user:

-rw-r--r-- 1 al al 0 Nov  5 00:53 test.txt

so it is using my user account.

I found this command in an earlier issue #265 which seems to work and correctly find my card?:

/tmp # HandBrakeCLI --help | grep -A15 "video encoder:"
[00:36:11] Compile-time hardening features are enabled
Cannot load libnvidia-encode.so.1
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[00:36:11] hb_display_init: attempting VA driver 'iHD'
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[00:36:11] hb_display_init: using VA driver 'iHD'
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[00:36:11] qsv: is available on this system
[00:36:11] hb_init: starting libhb thread
[00:36:11] thread 72e0b8153b30 started ("libhb")
   -e, --encoder <string>  Select video encoder:
                               svt_av1
                               svt_av1_10bit
                               qsv_av1
                               qsv_av1_10bit
                               ffv1
                               x264
                               x264_10bit
                               qsv_h264
                               x265
                               x265_10bit
                               x265_12bit
                               qsv_h265
                               qsv_h265_10bit
                               mpeg4
                               mpeg2
HandBrake has exited.

Yet no QSV options in the GUI:

image

I'm not sure where to go from here.

Expected Behavior

QSV options to appear in the GUI and be usable.

Steps To Reproduce

Install this container using the container file that I had supplied above. Attach video and render groups to user account.

Environment

Container creation

podman quadlet container in user account.

My container file:

# handbrake.container
[Unit]
Description=Handbrake server

[Container]
ContainerName=handbrake
Image=jlesage/handbrake
PublishPort=5800:5800
AddDevice=/dev/dri:/dev/dri:rw
Environment=USER_ID=1000
Environment=GROUP_ID=1000
Environment=SUP_GROUP_IDS=44,993
Environment=TZ=America/Toronto
Environment=DARK_MODE=1
Environment=AUTOMATED_CONVERSION_USE_TRASH=0
PodmanArgs=--group-add keep-groups

Volume=/storage/handbrake/config:/config
Volume=/storage/handbrake/storage:/storage:ro
Volume=/storage/handbrake/auto:/watch
Volume=/storage/handbrake/output:/output

[Install]
WantedBy=default.target

[Service]
Restart=on-failure

Container log

[init        ] container is starting...
[cont-env    ] loading container environment variables...
[cont-env    ] APP_NAME: loading...
[cont-env    ] APP_VERSION: loading...
[cont-env    ] DISPLAY: executing...
[cont-env    ] DISPLAY: terminated successfully.
[cont-env    ] DISPLAY: loading...
[cont-env    ] DOCKER_IMAGE_PLATFORM: loading...
[cont-env    ] DOCKER_IMAGE_VERSION: loading...
[cont-env    ] EGL_LOG_LEVEL: executing...
[cont-env    ] EGL_LOG_LEVEL: terminated successfully.
[cont-env    ] EGL_LOG_LEVEL: loading...
[cont-env    ] GSK_RENDERER: executing...
[cont-env    ] GSK_RENDERER: terminated successfully.
[cont-env    ] GSK_RENDERER: loading...
[cont-env    ] GTK2_RC_FILES: executing...
[cont-env    ] GTK2_RC_FILES: terminated successfully.
[cont-env    ] GTK2_RC_FILES: loading...
[cont-env    ] GTK_THEME: executing...
[cont-env    ] GTK_THEME: terminated successfully.
[cont-env    ] GTK_THEME: loading...
[cont-env    ] HOME: loading...
[cont-env    ] INSTALL_PACKAGES_INTERNAL: executing...
[cont-env    ] INSTALL_PACKAGES_INTERNAL: terminated successfully.
[cont-env    ] INSTALL_PACKAGES_INTERNAL: not setting variable.
[cont-env    ] LIBGL_DRIVERS_PATH: executing...
[cont-env    ] LIBGL_DRIVERS_PATH: terminated successfully.
[cont-env    ] LIBGL_DRIVERS_PATH: loading...
[cont-env    ] PULSE_CONFIG_PATH: executing...
[cont-env    ] PULSE_CONFIG_PATH: terminated successfully.
[cont-env    ] PULSE_CONFIG_PATH: not setting variable.
[cont-env    ] PULSE_COOKIE: executing...
[cont-env    ] PULSE_COOKIE: terminated successfully.
[cont-env    ] PULSE_COOKIE: not setting variable.
[cont-env    ] PULSE_SERVER: executing...
[cont-env    ] PULSE_SERVER: terminated successfully.
[cont-env    ] PULSE_SERVER: not setting variable.
[cont-env    ] QT_STYLE_OVERRIDE: executing...
[cont-env    ] QT_STYLE_OVERRIDE: terminated successfully.
[cont-env    ] QT_STYLE_OVERRIDE: loading...
[cont-env    ] SUP_GROUP_IDS_INTERNAL: executing...
[cont-env    ] SUP_GROUP_IDS_INTERNAL: terminated successfully.
[cont-env    ] SUP_GROUP_IDS_INTERNAL: not setting variable.
[cont-env    ] TAKE_CONFIG_OWNERSHIP: loading...
[cont-env    ] XDG_CACHE_HOME: loading...
[cont-env    ] XDG_CONFIG_HOME: loading...
[cont-env    ] XDG_DATA_HOME: loading...
[cont-env    ] XDG_RUNTIME_DIR: loading...
[cont-env    ] XDG_STATE_HOME: loading...
[cont-env    ] container environment variables initialized.
[cont-secrets] loading container secrets...
[cont-secrets] container secrets loaded.
[cont-init   ] executing container initialization scripts...
[cont-init   ] 10-certs.sh: executing...
[cont-init   ] 10-certs.sh: terminated successfully.
[cont-init   ] 10-check-app-niceness.sh: executing...
[cont-init   ] 10-check-app-niceness.sh: terminated successfully.
[cont-init   ] 10-clean-logmonitor-states.sh: executing...
[cont-init   ] 10-clean-logmonitor-states.sh: terminated successfully.
[cont-init   ] 10-clean-tmp-dir.sh: executing...
[cont-init   ] 10-clean-tmp-dir.sh: terminated successfully.
[cont-init   ] 10-fontconfig-cache-dir.sh: executing...
[cont-init   ] 10-fontconfig-cache-dir.sh: terminated successfully.
[cont-init   ] 10-init-users.sh: executing...
[cont-init   ] 10-init-users.sh: terminated successfully.
[cont-init   ] 10-nginx.sh: executing...
[cont-init   ] 10-nginx.sh: terminated successfully.
[cont-init   ] 10-openbox.sh: executing...
[cont-init   ] 10-openbox.sh: terminated successfully.
[cont-init   ] 10-pkgs-mirror.sh: executing...
[cont-init   ] 10-pkgs-mirror.sh: terminated successfully.
[cont-init   ] 10-pulse.sh: executing...
[cont-init   ] 10-pulse.sh: terminated successfully.
[cont-init   ] 10-set-tmp-dir-perms.sh: executing...
[cont-init   ] 10-set-tmp-dir-perms.sh: terminated successfully.
[cont-init   ] 10-vnc-password.sh: executing...
[cont-init   ] 10-vnc-password.sh: terminated successfully.
[cont-init   ] 10-web-data.sh: executing...
[cont-init   ] 10-web-data.sh: terminated successfully.
[cont-init   ] 10-webauth.sh: executing...
[cont-init   ] 10-webauth.sh: terminated successfully.
[cont-init   ] 10-x11-unix.sh: executing...
[cont-init   ] 10-x11-unix.sh: terminated successfully.
[cont-init   ] 10-xdg-runtime-dir.sh: executing...
[cont-init   ] 10-xdg-runtime-dir.sh: terminated successfully.
[cont-init   ] 15-cjk-font.sh: executing...
[cont-init   ] 15-cjk-font.sh: terminated successfully.
[cont-init   ] 15-install-pkgs.sh: executing...
[cont-init   ] 15-install-pkgs.sh: terminated successfully.
[cont-init   ] 54-check-optical-drive.sh: executing...
[cont-init   ] 54-check-optical-drive.sh: looking for usable optical drives...
[cont-init   ] 54-check-optical-drive.sh: no usable optical drive found.
[cont-init   ] 54-check-optical-drive.sh: terminated successfully.
[cont-init   ] 54-check-qsv.sh: executing...
[cont-init   ] 54-check-qsv.sh: Processor: Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz
[cont-init   ] 54-check-qsv.sh: Microarchitecture: INTEL_SKL
[cont-init   ] 54-check-qsv.sh: Kernel: 6.8.0-48-generic
[cont-init   ] 54-check-qsv.sh: terminated successfully.
[cont-init   ] 54-check-trash-dir.sh: executing...
[cont-init   ] 54-check-trash-dir.sh: terminated successfully.
[cont-init   ] 55-handbrake.sh: executing...
[cont-init   ] 55-handbrake.sh: core dump file location: |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
[cont-init   ] 55-handbrake.sh: core dump file size: 0 (blocks)
[cont-init   ] 55-handbrake.sh: terminated successfully.
[cont-init   ] 85-take-config-ownership.sh: executing...
[cont-init   ] 85-take-config-ownership.sh: terminated successfully.
[cont-init   ] 89-info.sh: executing...
    ╭――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╮
    │                                                                      │
    │ Application:           HandBrake                                     │
    │ Application Version:   1.8.2                                         │
    │ Docker Image Version:  24.09.1                                       │
    │ Docker Image Platform: linux/amd64                                   │
    │                                                                      │
    ╰――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――╯
[cont-init   ] 89-info.sh: terminated successfully.
[cont-init   ] all container initialization scripts executed.
[init        ] giving control to process supervisor.
[supervisor  ] loading services...
[supervisor  ] loading service 'default'...
[supervisor  ] loading service 'logmonitor'...
[supervisor  ] service 'logmonitor' is disabled.
[supervisor  ] loading service 'logrotate'...
[supervisor  ] loading service 'app'...
[supervisor  ] loading service 'gui'...
[supervisor  ] loading service 'certsmonitor'...
[supervisor  ] service 'certsmonitor' is disabled.
[supervisor  ] loading service 'pulseaudio'...
[supervisor  ] service 'pulseaudio' is disabled.
[supervisor  ] loading service 'xcompmgr'...
[supervisor  ] loading service 'openbox'...
[supervisor  ] loading service 'xvnc'...
[supervisor  ] loading service 'nginx'...
[supervisor  ] loading service 'webauth'...
[supervisor  ] service 'webauth' is disabled.
[supervisor  ] loading service 'audiorecorder'...
[supervisor  ] service 'audiorecorder' is disabled.
[supervisor  ] loading service 'autovideoconverter'...
[supervisor  ] all services loaded.
[supervisor        ] starting services...
[supervisor        ] starting service 'xvnc'...
[xvnc              ] Xvnc TigerVNC 1.13.1 - built Jun 29 2024 04:33:24
[xvnc              ] Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
[xvnc              ] See https://www.tigervnc.org for information on TigerVNC.
[xvnc              ] Underlying X server release 12014000
[xvnc              ] Tue Nov  5 01:08:39 2024
[xvnc              ]  vncext:      VNC extension running!
[xvnc              ]  vncext:      Listening for VNC connections on /tmp/vnc.sock (mode 0660)
[xvnc              ]  vncext:      Listening for VNC connections on all interface(s), port 5900
[xvnc              ]  vncext:      created VNC server for screen 0
[supervisor        ] starting service 'openbox'...
[supervisor        ] starting service 'xcompmgr'...
[supervisor        ] starting service 'nginx'...
[nginx             ] Listening for HTTP connections on port 5800.
[supervisor        ] starting service 'app'...
[supervisor        ] starting service 'autovideoconverter'...
[autovideoconverter] Processing watch folder '/watch'...
[autovideoconverter] Watch folder '/watch' processing terminated.
[supervisor        ] all services started.

Container inspect

[
     {
          "Id": "ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b",
          "Created": "2024-11-05T01:08:32.90552386-05:00",
          "Path": "/init",
          "Args": [
               "/init"
          ],
          "State": {
               "OciVersion": "1.1.0",
               "Status": "running",
               "Running": true,
               "Paused": false,
               "Restarting": false,
               "OOMKilled": false,
               "Dead": false,
               "Pid": 2601,
               "ConmonPid": 2597,
               "ExitCode": 0,
               "Error": "",
               "StartedAt": "2024-11-05T01:08:33.436270073-05:00",
               "FinishedAt": "0001-01-01T00:00:00Z",
               "Health": {
                    "Status": "",
                    "FailingStreak": 0,
                    "Log": null
               },
               "CgroupPath": "/user.slice/user-1000.slice/user@1000.service/app.slice/handbrake.service/libpod-payload-ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b",
               "CheckpointedAt": "0001-01-01T00:00:00Z",
               "RestoredAt": "0001-01-01T00:00:00Z"
          },
          "Image": "29dcce132c696ce72f01b779f3cdebc99062a0c08ea0dba8d819a1665826187d",
          "ImageDigest": "sha256:a932aa8b9379d30c9ae2e735619d0684e8846b9191937bd085fc37fb069bfb9b",
          "ImageName": "docker.io/jlesage/handbrake:latest",
          "Rootfs": "",
          "Pod": "",
          "ResolvConfPath": "/run/user/1000/containers/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/resolv.conf",
          "HostnamePath": "/run/user/1000/containers/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/hostname",
          "HostsPath": "/run/user/1000/containers/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/hosts",
          "StaticDir": "/home/al/.local/share/containers/storage/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata",
          "OCIConfigPath": "/home/al/.local/share/containers/storage/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/config.json",
          "OCIRuntime": "crun",
          "ConmonPidFile": "/run/user/1000/containers/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/conmon.pid",
          "PidFile": "/run/user/1000/containers/overlay-containers/ee0bfeaf0f81b3213e7777256fd0b259c1c9c1422a98404418e7907867d2de4b/userdata/pidfile",
          "Name": "handbrake",
          "RestartCount": 0,
          "Driver": "overlay",
          "MountLabel": "",
          "ProcessLabel": "",
          "AppArmorProfile": "",
          "EffectiveCaps": [
               "CAP_CHOWN",
               "CAP_DAC_OVERRIDE",
               "CAP_FOWNER",
               "CAP_FSETID",
               "CAP_KILL",
               "CAP_NET_BIND_SERVICE",
               "CAP_SETFCAP",
               "CAP_SETGID",
               "CAP_SETPCAP",
               "CAP_SETUID",
               "CAP_SYS_CHROOT"
          ],
          "BoundingCaps": [
               "CAP_CHOWN",
               "CAP_DAC_OVERRIDE",
               "CAP_FOWNER",
               "CAP_FSETID",
               "CAP_KILL",
               "CAP_NET_BIND_SERVICE",
               "CAP_SETFCAP",
               "CAP_SETGID",
               "CAP_SETPCAP",
               "CAP_SETUID",
               "CAP_SYS_CHROOT"
          ],
          "ExecIDs": [],
          "GraphDriver": {
               "Name": "overlay",
               "Data": {
                    "LowerDir": "/home/al/.local/share/containers/storage/overlay/a6a477b928d4625154287d23b42ba17a17faf0854a2da294e28050aa33402a77/diff:/home/al/.local/share/containers/storage/overlay/9937003638d78e845772e9f806162c7d759a4ebd68ece0355d7748330377ceed/diff:/home/al/.local/share/containers/storage/overlay/88a8743d773e83d3979514a67d10710ede10c489f547e1e32bc553a763710d1d/diff:/home/al/.local/share/containers/storage/overlay/70f8aa97c745111a685ae847e98b6cec3b25d1234885c15c856edb0e2aa527bd/diff:/home/al/.local/share/containers/storage/overlay/1f4b58132d017bdb42a9873aa4deca765936180636d7091b44fd439586cd10b3/diff:/home/al/.local/share/containers/storage/overlay/43d42daf5324b1b7bd0469d93bc9f3c652d6471e67ec61ab46d62660296e0c12/diff:/home/al/.local/share/containers/storage/overlay/8e75d434cad0c5656caf0a63df0679457e7b3ae8ba69a581732171ecfceb7071/diff:/home/al/.local/share/containers/storage/overlay/d44a4d50b6c90e8ba426115b365a0810a2b5a0c699397cef39bdf0951c81a8ec/diff:/home/al/.local/share/containers/storage/overlay/65e9b2a6d27e7e8d9ce8d6d8a6bd7491dfa3cf3865728f1b4f1510ca9059345b/diff:/home/al/.local/share/containers/storage/overlay/d3a15e45244d8e8b5892de7ed73db1db049fe9b67de8d57e2827ccc30c0571d9/diff:/home/al/.local/share/containers/storage/overlay/39f7e842717ff773bd8f34edaa8fecfb93a3dfc1181c6e97fb3f2d9c5a1ff24c/diff:/home/al/.local/share/containers/storage/overlay/1c24d83e1aa989691efa79d5cbd084dd429ef44da69b54f204bc8d9dd15e0449/diff:/home/al/.local/share/containers/storage/overlay/c180b63e8d44354f5888457e3b6675fe878f8ccb644c49a887c5f7e203f154b5/diff:/home/al/.local/share/containers/storage/overlay/35439a5e9d2b07dd1bc376fa72f3e39256524e93e040e0a9c926bd2ede65daea/diff:/home/al/.local/share/containers/storage/overlay/11a39cd56c5d2c9bb98fdb1540b8e2dea97093f88a8200e182c369c451121b66/diff:/home/al/.local/share/containers/storage/overlay/74e0f2b0c62b14a9faf44d9b85937bb07b95ee91a649dd22f484ea8f615d16eb/diff:/home/al/.local/share/containers/storage/overlay/72bb86c95a326231d567c96115a8ce40c2fcfdaa8ee68c2d3201f54d8090bc51/diff:/home/al/.local/share/containers/storage/overlay/190a732c7164a5d040584caef174b8bff46002a878193dd01782c233aa386286/diff:/home/al/.local/share/containers/storage/overlay/410e57d1df71f8629d5ec14a0f2bfed56053439383aac23cbdbfc3b7189b35c7/diff:/home/al/.local/share/containers/storage/overlay/e50b5dab4442a93d205d8b710ea461e48495be0ea04ce07b8492023ef4a5dd68/diff:/home/al/.local/share/containers/storage/overlay/2fc3986635904aa5714e7523fb59db0e7f95a60a0d97ca6d53fc2952f399c44a/diff:/home/al/.local/share/containers/storage/overlay/5494d33748e85a4e3b69d5c85ace5379dd9c2d06bd9a1c25d0e0f203116933fe/diff:/home/al/.local/share/containers/storage/overlay/6d2212664e4718f6f94f8c283670a83d065a802424916812d7a65a9d36168957/diff:/home/al/.local/share/containers/storage/overlay/e2a2bef323c44359d1e1b2d488646c599f3e56939cf18de6701d61291ae02548/diff:/home/al/.local/share/containers/storage/overlay/dc19e913a8f5a2f2228a48a4ceb0bb0d1ed887961cda97f8c2a3201c72ab440f/diff:/home/al/.local/share/containers/storage/overlay/3302d0aa8840fda8fb991c4ab85481f2b16e2728df983c13114a6b3e53da85a1/diff:/home/al/.local/share/containers/storage/overlay/c3a352fdf429a40a5799f50e0c6bc137de0ccc7b813818660d4607f13233607f/diff:/home/al/.local/share/containers/storage/overlay/003291006e243742c690097c0e7a65089276d5031cdcb378b5703e7c85c60129/diff:/home/al/.local/share/containers/storage/overlay/d615628cb14a1874d1a6d99bb796749260e862f72ceb144a58d665cf0d135c41/diff:/home/al/.local/share/containers/storage/overlay/fa78f54dfa470f6e972ad9798bd1b5afd14242ab00828007bbb968a2187d6849/diff:/home/al/.local/share/containers/storage/overlay/242a19255e9aa176f6cdc5c6f4fd4ddcc0bfdd24f295ba1e7acbd13fef0166b5/diff:/home/al/.local/share/containers/storage/overlay/a0a4a6e325390c7de0de8ac7248db08e15abcc77f2bebcd64849e54bc45fee87/diff:/home/al/.local/share/containers/storage/overlay/2aa46a0464f0df5b8c47d96851dea1fcb562fb41df5075da5cab70c46c8202da/diff:/home/al/.local/share/containers/storage/overlay/2be6a70189ecebf1655407e31dbc95137f7ad22cce9a0849f7eb7de2c128a914/diff:/home/al/.local/share/containers/storage/overlay/619539b9c093ebb52ae6f1bd21d3c9e04186cdf705f82955705eab248eccb350/diff:/home/al/.local/share/containers/storage/overlay/fa447e610eb63f9d3698d76a1cc1eefa0f66780bc2278ffa9bbbfacddf67a96a/diff:/home/al/.local/share/containers/storage/overlay/8add674559e341b864bfbe3b915d1f5a29d410a91c813df45427a57a59758d18/diff:/home/al/.local/share/containers/storage/overlay/30042abebaccb85eaec69d3304a9e780e107013804f0a45b4f03747a09a12d44/diff:/home/al/.local/share/containers/storage/overlay/4e1530a6729ba9e11fb3122dfa0c17406b773a8f254080992e580f8dd9bc0f3a/diff:/home/al/.local/share/containers/storage/overlay/c91f52f212ebccbca7731dab4280b4c1a4a699a3d484699f48af346024aa5f3f/diff:/home/al/.local/share/containers/storage/overlay/92eef9653aafb9efefd1a1b79f531e8363fc95d1e3507e32a9657d0f12ae928d/diff:/home/al/.local/share/containers/storage/overlay/af9a70194aa4d12f967dbd4bcb1ce9c98ba42adb4ec05536080fd4560155e809/diff",
                    "MergedDir": "/home/al/.local/share/containers/storage/overlay/7e7f409444bb9a47afce82e61e964cdae780effdbc119ed91bdc7994ae32b51d/merged",
                    "UpperDir": "/home/al/.local/share/containers/storage/overlay/7e7f409444bb9a47afce82e61e964cdae780effdbc119ed91bdc7994ae32b51d/diff",
                    "WorkDir": "/home/al/.local/share/containers/storage/overlay/7e7f409444bb9a47afce82e61e964cdae780effdbc119ed91bdc7994ae32b51d/work"
               }
          },
          "Mounts": [
               {
                    "Type": "volume",
                    "Name": "a3fe7cc6f9b2a8533d7675eff43eb517c0aadbfbcf7648164c973663ba388980",
                    "Source": "/home/al/.local/share/containers/storage/volumes/a3fe7cc6f9b2a8533d7675eff43eb517c0aadbfbcf7648164c973663ba388980/_data",
                    "Destination": "/trash",
                    "Driver": "local",
                    "Mode": "",
                    "Options": [
                         "nodev",
                         "exec",
                         "nosuid",
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/storage/handbrake/output",
                    "Destination": "/output",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/storage/handbrake/config",
                    "Destination": "/config",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/storage/handbrake/storage",
                    "Destination": "/storage",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": false,
                    "Propagation": "rprivate"
               },
               {
                    "Type": "bind",
                    "Source": "/storage/handbrake/auto",
                    "Destination": "/watch",
                    "Driver": "",
                    "Mode": "",
                    "Options": [
                         "rbind"
                    ],
                    "RW": true,
                    "Propagation": "rprivate"
               }
          ],
          "Dependencies": [],
          "NetworkSettings": {
               "EndpointID": "",
               "Gateway": "",
               "IPAddress": "",
               "IPPrefixLen": 0,
               "IPv6Gateway": "",
               "GlobalIPv6Address": "",
               "GlobalIPv6PrefixLen": 0,
               "MacAddress": "",
               "Bridge": "",
               "SandboxID": "",
               "HairpinMode": false,
               "LinkLocalIPv6Address": "",
               "LinkLocalIPv6PrefixLen": 0,
               "Ports": {
                    "5800/tcp": [
                         {
                              "HostIp": "",
                              "HostPort": "5800"
                         }
                    ],
                    "5900/tcp": null
               },
               "SandboxKey": "/run/user/1000/netns/netns-906412a1-1f19-575b-24f4-4477d07d0293"
          },
          "Namespace": "",
          "IsInfra": false,
          "IsService": false,
          "KubeExitCodePropagation": "invalid",
          "lockNumber": 17,
          "Config": {
               "Hostname": "ee0bfeaf0f81",
               "Domainname": "",
               "User": "",
               "AttachStdin": false,
               "AttachStdout": false,
               "AttachStderr": false,
               "Tty": false,
               "OpenStdin": false,
               "StdinOnce": false,
               "Env": [
                    "APP_NICENESS=0",
                    "SECURE_CONNECTION=0",
                    "AUTOMATED_CONVERSION_OUTPUT_SUBDIR=",
                    "WEB_AUDIO=0",
                    "TZ=America/Toronto",
                    "GROUP_ID=1000",
                    "AUTOMATED_CONVERSION_OUTPUT_DIR=/output",
                    "container=podman",
                    "AUTOMATED_CONVERSION_SOURCE_MIN_DURATION=10",
                    "ENV=/root/.docker_rc",
                    "WEB_LISTENING_PORT=5800",
                    "AUTOMATED_CONVERSION_VIDEO_FILE_EXTENSIONS=",
                    "VNC_LISTENING_PORT=5900",
                    "AUTOMATED_CONVERSION_SOURCE_STABLE_TIME=5",
                    "DISPLAY_WIDTH=1920",
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/base/sbin:/opt/base/bin",
                    "AUTOMATED_CONVERSION_USE_TRASH=0",
                    "AUTOMATED_CONVERSION=1",
                    "HANDBRAKE_GUI_QUEUE_STARTUP_ACTION=NONE",
                    "AUTOMATED_CONVERSION_FORMAT=mp4",
                    "INSTALL_PACKAGES=",
                    "WEB_AUTHENTICATION=0",
                    "HANDBRAKE_DEBUG=0",
                    "AUTOMATED_CONVERSION_SOURCE_MAIN_TITLE_DETECTION=0",
                    "SECURE_CONNECTION_VNC_METHOD=SSL",
                    "DARK_MODE=1",
                    "CONTAINER_DEBUG=0",
                    "SUP_GROUP_IDS=44,993",
                    "KEEP_APP_RUNNING=0",
                    "ENABLE_CJK_FONT=0",
                    "UMASK=0022",
                    "AUTOMATED_CONVERSION_KEEP_SOURCE=1",
                    "WEB_AUTHENTICATION_DEFAULT_PASSWORD=",
                    "WEB_AUTHENTICATION_DEFAULT_USERNAME=",
                    "AUTOMATED_CONVERSION_OVERWRITE_OUTPUT=0",
                    "DISPLAY_HEIGHT=1080",
                    "AUTOMATED_CONVERSION_HANDBRAKE_CUSTOM_ARGS=",
                    "USER_ID=1000",
                    "AUTOMATED_CONVERSION_CHECK_INTERVAL=5",
                    "SECURE_CONNECTION_CERTS_CHECK_INTERVAL=60",
                    "AUTOMATED_CONVERSION_NON_VIDEO_FILE_ACTION=ignore",
                    "VNC_PASSWORD=",
                    "AUTOMATED_CONVERSION_MAX_WATCH_FOLDERS=5",
                    "AUTOMATED_CONVERSION_PRESET=General/Very Fast 1080p30",
                    "HANDBRAKE_GUI=1",
                    "AUTOMATED_CONVERSION_NON_VIDEO_FILE_EXTENSIONS=jpg jpeg bmp png gif txt nfo",
                    "LANG=en_US.UTF-8",
                    "AUTOMATED_CONVERSION_NO_GUI_PROGRESS=0",
                    "PACKAGES_MIRROR=",
                    "AUTOMATED_CONVERSION_INSTALL_PKGS=",
                    "HOME=/root",
                    "HOSTNAME=ee0bfeaf0f81"
               ],
               "Cmd": [
                    "/init"
               ],
               "Image": "docker.io/jlesage/handbrake:latest",
               "Volumes": null,
               "WorkingDir": "/tmp",
               "Entrypoint": "",
               "OnBuild": null,
               "Labels": {
                    "PODMAN_SYSTEMD_UNIT": "handbrake.service",
                    "org.label-schema.description": "Docker container for HandBrake",
                    "org.label-schema.name": "handbrake",
                    "org.label-schema.schema-version": "1.0",
                    "org.label-schema.vcs-url": "https://github.com/jlesage/docker-handbrake",
                    "org.label-schema.version": "24.09.1"
               },
               "Annotations": {
                    "io.container.manager": "libpod",
                    "io.podman.annotations.autoremove": "TRUE",
                    "io.podman.annotations.cid-file": "/run/user/1000/handbrake.cid",
                    "org.opencontainers.image.stopSignal": "15",
                    "run.oci.keep_original_groups": "1"
               },
               "StopSignal": 15,
               "HealthcheckOnFailureAction": "none",
               "CreateCommand": [
                    "/usr/bin/podman",
                    "run",
                    "--name=handbrake",
                    "--cidfile=/run/user/1000/handbrake.cid",
                    "--replace",
                    "--rm",
                    "--cgroups=split",
                    "--sdnotify=conmon",
                    "-d",
                    "--device=/dev/dri:/dev/dri:rw",
                    "-v",
                    "/storage/handbrake/config:/config",
                    "-v",
                    "/storage/handbrake/storage:/storage:ro",
                    "-v",
                    "/storage/handbrake/auto:/watch",
                    "-v",
                    "/storage/handbrake/output:/output",
                    "--publish",
                    "5800:5800",
                    "--env",
                    "AUTOMATED_CONVERSION_USE_TRASH=0",
                    "--env",
                    "DARK_MODE=1",
                    "--env",
                    "GROUP_ID=1000",
                    "--env",
                    "SUP_GROUP_IDS=44,993",
                    "--env",
                    "TZ=America/Toronto",
                    "--env",
                    "USER_ID=1000",
                    "--group-add",
                    "keep-groups",
                    "jlesage/handbrake"
               ],
               "Umask": "0022",
               "Timeout": 0,
               "StopTimeout": 10,
               "Passwd": true,
               "sdNotifyMode": "conmon",
               "sdNotifySocket": "/run/user/1000/systemd/notify"
          },
          "HostConfig": {
               "Binds": [
                    "a3fe7cc6f9b2a8533d7675eff43eb517c0aadbfbcf7648164c973663ba388980:/trash:rprivate,rw,nodev,exec,nosuid,rbind",
                    "/storage/handbrake/output:/output:rw,rprivate,rbind",
                    "/storage/handbrake/config:/config:rw,rprivate,rbind",
                    "/storage/handbrake/storage:/storage:ro,rprivate,rbind",
                    "/storage/handbrake/auto:/watch:rw,rprivate,rbind"
               ],
               "CgroupManager": "systemd",
               "CgroupMode": "private",
               "ContainerIDFile": "/run/user/1000/handbrake.cid",
               "LogConfig": {
                    "Type": "journald",
                    "Config": null,
                    "Path": "",
                    "Tag": "",
                    "Size": "0B"
               },
               "NetworkMode": "slirp4netns",
               "PortBindings": {
                    "5800/tcp": [
                         {
                              "HostIp": "",
                              "HostPort": "5800"
                         }
                    ]
               },
               "RestartPolicy": {
                    "Name": "",
                    "MaximumRetryCount": 0
               },
               "AutoRemove": true,
               "VolumeDriver": "",
               "VolumesFrom": null,
               "CapAdd": [],
               "CapDrop": [],
               "Dns": [],
               "DnsOptions": [],
               "DnsSearch": [],
               "ExtraHosts": [],
               "GroupAdd": [],
               "IpcMode": "shareable",
               "Cgroup": "",
               "Cgroups": "default",
               "Links": null,
               "OomScoreAdj": 0,
               "PidMode": "private",
               "Privileged": false,
               "PublishAllPorts": false,
               "ReadonlyRootfs": false,
               "SecurityOpt": [],
               "Tmpfs": {},
               "UTSMode": "private",
               "UsernsMode": "",
               "ShmSize": 65536000,
               "Runtime": "oci",
               "ConsoleSize": [
                    0,
                    0
               ],
               "Isolation": "",
               "CpuShares": 0,
               "Memory": 0,
               "NanoCpus": 0,
               "CgroupParent": "",
               "BlkioWeight": 0,
               "BlkioWeightDevice": null,
               "BlkioDeviceReadBps": null,
               "BlkioDeviceWriteBps": null,
               "BlkioDeviceReadIOps": null,
               "BlkioDeviceWriteIOps": null,
               "CpuPeriod": 0,
               "CpuQuota": 0,
               "CpuRealtimePeriod": 0,
               "CpuRealtimeRuntime": 0,
               "CpusetCpus": "",
               "CpusetMems": "",
               "Devices": [],
               "DiskQuota": 0,
               "KernelMemory": 0,
               "MemoryReservation": 0,
               "MemorySwap": 0,
               "MemorySwappiness": 0,
               "OomKillDisable": false,
               "PidsLimit": 2048,
               "Ulimits": [
                    {
                         "Name": "RLIMIT_NOFILE",
                         "Soft": 1048576,
                         "Hard": 1048576
                    },
                    {
                         "Name": "RLIMIT_NPROC",
                         "Soft": 256643,
                         "Hard": 256643
                    }
               ],
               "CpuCount": 0,
               "CpuPercent": 0,
               "IOMaximumIOps": 0,
               "IOMaximumBandwidth": 0,
               "CgroupConf": null
          }
     }
]

Anything else?

Thank you, would appreciate any advice if I missed something or doing something wrong.

edit: have since upgraded to ubuntu 24.10 and podman 5.0.3 due to needing podman 5 for another container. The issue persists though.

klydra commented 1 month ago

My ASROCK ARC 310 is working. Installed normal drivers on plain Ubuntu on Proxmox and passed through the render device. Did some troubleshooting with the Intel Driver and for my previous AMD card for jellyfin beforehand though.

Ra72xx commented 3 weeks ago

Has there been any progress on this? I experience the same with Podman on an N5105 chip.

HandBrakeCLI --help | grep -A15 "video encoder:"

shows

[21:01:54] hb_display_init: using VA driver 'iHD'
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[21:01:54] qsv: is available on this system

so it should work, but there is no QSV entry in the ui.

Jademalo commented 4 days ago

Having the same issue with the container running in a Proxmox LXC. Jellyfin works fine so I know how to passthrough the hardware encoder, and I'm certain it's working. When I go to try and select a hardware encoder in video, nothing is available.

HandBrakeCLI --help | grep -A15 "video encoder:"

[21:56:44] Compile-time hardening features are enabled
Cannot load libnvidia-encode.so.1
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[21:56:44] hb_display_init: attempting VA driver 'iHD'
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[21:56:44] hb_display_init: using VA driver 'iHD'
libva info: VA-API version 1.22.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
[21:56:44] qsv: is available on this system
[21:56:44] hb_init: starting libhb thread
[21:56:44] thread 79a7aeebdb30 started ("libhb")
   -e, --encoder <string>  Select video encoder:
                               svt_av1
                               svt_av1_10bit
                               qsv_av1
                               qsv_av1_10bit
                               ffv1
                               x264
                               x264_10bit
                               qsv_h264
                               x265
                               x265_10bit
                               x265_12bit
                               qsv_h265
                               qsv_h265_10bit
                               mpeg4
                               mpeg2
HandBrake has exited.

I get the following in the HandBrake activity log;

[21:42:46] Compile-time hardening features are enabled
Cannot load libnvidia-encode.so.1
[21:42:46] hb_qsv_make_adapters_list: MFXVideoCORE_QueryPlatform failed impl=0 err=-16
[21:42:46] qsv: is available on this system
[21:42:46] hb_init: starting libhb thread
[21:42:46] hb_init: starting libhb thread
[21:42:46] hb_init: starting libhb thread

Installing libva-utils and running vainfo --display drm --device /dev/dri/renderD129 gives me;

Trying display: drm
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.20.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.4.4 ()
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

Clearly it's being detected in the container, but I can't get it to actually initialise when handbrake is loaded. The only thing I can think might be the error is that the card is card1 and renderD128, rather than card0. I can't do - /dev/dri/card1:/dev/dri/card0 though, as that fails to run with;

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error creating device nodes: mount src=/dev/dri/card0, dst=/var/lib/docker/overlay2/c1499c1f9f02555f29ba8b8b989570433c62a3a02ea85ab03ea10bdfcbdb8daf/merged/dev/dri/card0, dstFd=/proc/thread-self/fd/8, flags=0x1000: no such file or directory: unknown
Jademalo commented 4 days ago

Actually now that I look at @gen-angry 's post in more detail, we do have that in common - Our primary card is card1 with renderD128.

I wonder if the issue is that it's not card0 with renderD128, or card1 with renderD129, and that's causing some sort of initilisation issue?

It also seems like even if I don't include /dev/dri:/dev/dri etc that they're still all accessible in the container, which makes me wonder if that line is even necessary now? And could that be the issue with not being able to crossbind a render device?

gen-angry commented 3 days ago

Actually now that I look at @gen-angry 's post in more detail, we do have that in common - Our primary card is card1 with renderD128.

I wonder if the issue is that it's not card0 with renderD128, or card1 with renderD129, and that's causing some sort of initilisation issue?

It also seems like even if I don't include /dev/dri:/dev/dri etc that they're still all accessible in the container, which makes me wonder if that line is even necessary now? And could that be the issue with not being able to crossbind a render device?

Good catch with the card1 vs card0. I have the onboard disabled entirely as it's not needed with the arc card so it is strange that mine is choosing to keep it card1 anyways.

One thing that I've noticed that fixes it is if I chmod 777 /dev/dri/card1 and /dev/dri/renderD128 on the host, then restart the container. Obviously Id rather not keep doing that though, it's not persistent through reboots and I don't want to make it that way. So in that case, it might work if I run the container as root but would greatly prefer to keep everything rootless for security reasons. I don't need to have it as root for jellyfin and immich which both work great, so I wonder if it's something weird with the way this software stack is set up and permissions.

al@202server:/dev/dri$ ls -l
total 0
drwxr-xr-x 2 root root         80 Mar 12 00:52 by-path
crw-rw---- 1 root video  226,   1 Mar 12 00:52 card1
crw-rw---- 1 root render 226, 128 Mar 12 00:52 renderD128
al@202server:/dev/dri$ groups
al adm cdrom sudo dip video plugdev lxd libvirt render
al@202server:/dev/dri$ 

my host user has both render and video groups on it and the render/video groups own the device paths. Then, I've also noticed in the readme, it says:

Changing, on the host, the group owning the /dev/dri device. For example, to change the group to video:

sudo chown root:video /dev/dri/*

so I need to change renderD128 to owned by group video as well? Maybe this is where the issue lies if that's what the software stack is expecting? If I do this, it feels like it would break access for my other containers so it wouldn't be a real solution.

Jademalo commented 3 days ago

I've got an IPMI so I've got a permanent card0 that I can't get rid of.

Interesting that chmod 777 on the host works, I've just tested that and it worked perfectly for me too. However user: 0:0 and adding the video and render groups to my docker compose file didn't. I also didn't need to pass the card through at all, just passing renderD128 (the VAAPI interface iirc?) worked absolutely fine.

I'm going to do some more testing, I have absolutely no idea why but this seems to be a permissions issue. It's strange that granting groups and running the container as root doesn't work though.