How to enable HW acceleration in video decoding in GStreamer or FFMPEG with v4l2m2m patches? I’m using the latest debian version released a few days ago. I tried everything but nothing works it seems that venus is outputting the proprietary qualcomm compressed formats qc08c by default and even forced to nv12 stills outputs that way, if i force the negotiation in v4l2 ioctl in v4l2 context to nv12 it stills output nv12 with a modifier using qualcomm compressed format so it is not usable in upstream please fix the debian image or kernel do drop the qc08c / qc10c formats or give the qualcomm source code regarding this formats, right now the upstream doesn’t know how to deal with this formats, or nv12 with compressed qualcomm modifiers, please patch the kernel or venus firmware so only nv12 planar is outputed without any modifier on and disable the qualcomm compressed formats qc08c and qc10c from being outputed at all.
We are currently syncing this issue internally.
@kinkin i was investigating a little bit why is venus decoder enabled in debian shouldn’t be the iris the new one enabled?
File:rubikpi.zip
Link:查看分享
Password:4ocg
Expiry:2025-09-29 17:56:06
Please download the package via the link and then run the following command:
dpkg -i --force-overwrite gstreamer1.0-rubikpi3_1.26.1-1_arm64.deb
dpkg -i --force-overwrite gstreamer1.0-plugins-base-rubikpi3_1.26.1-1_arm64.deb
dpkg -i --force-overwrite gstreamer1.0-plugins-good-rubikpi3_1.26.1-1_arm64.deb
dpkg -i --force-overwrite gstreamer1.0-plugins-bad-rubikpi3_1.26.1-1_arm64.deb
Not working :
debian@rubikpi:~/Documentos$ gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-plugin-scanner:3589): GStreamer-WARNING **: 12:51:31.591: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstsrt.so': libsrt.so.1.5: cannot open shared object file: No such file or directory
(gst-launch-1.0:3588): GStreamer-Wayland-CRITICAL **: 12:51:31.997: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstQTDemux:qtdemux0: Internal data stream error.
Additional debug info:
../gst/isomp4/qtdemux.c(7570): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:qtdemux0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true > log.txt
(gst-launch-1.0:3612): GStreamer-Wayland-CRITICAL **: 12:52:28.640: gst_wl_window_ensure_fullscreen: assertion 'self' failed
ERROR: from element /GstPipeline:pipeline0/GstQTDemux:qtdemux0: Internal data stream error.
Additional debug info:
../gst/isomp4/qtdemux.c(7570): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:qtdemux0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
debian@rubikpi:~/Documentos$ gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true 2> log.txt
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3646): GStreamer-Wayland-CRITICAL **: 12:52:48.097: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Redistribute latency...
ERROR: from element /GstPipeline:pipeline0/GstQTDemux:qtdemux0: Internal data stream error.
Additional debug info:
../gst/isomp4/qtdemux.c(7570): gst_qtdemux_loop (): /GstPipeline:pipeline0/GstQTDemux:qtdemux0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ sudo gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-plugin-scanner:3659): GStreamer-WARNING **: 12:52:57.078: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstsrt.so': libsrt.so.1.5: cannot open shared object file: No such file or directory
(gst-plugin-scanner:3659): GStreamer-WARNING **: 12:52:57.718: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstgtk4.so': /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstgtk4.so: undefined symbol: gst_gl_display_x11_new_with_display
(gst-launch-1.0:3658): GStreamer-Wayland-CRITICAL **: 12:52:57.947: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ sudo gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3678): GStreamer-Wayland-CRITICAL **: 12:53:02.858: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ sudo gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3684): GStreamer-Wayland-CRITICAL **: 12:53:08.853: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ export XDG_RUNTIME_DIR=/dev/socket/weston
export WAYLAND_DISPLAY=wayland-1
debian@rubikpi:~/Documentos$ sudo gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3695): GStreamer-Wayland-CRITICAL **: 12:53:27.216: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3698): GStreamer-Wayland-CRITICAL **: 12:53:31.791: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
debian@rubikpi:~/Documentos$ sudo -l
Entradas Defaults correspondentes para debian em localhost:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
O utilizador debian pode executar os seguintes comandos em localhost:
(ALL : ALL) ALL
debian@rubikpi:~/Documentos$ sudo -i
root@rubikpi:~# export XDG_RUNTIME_DIR=/dev/socket/weston
export WAYLAND_DISPLAY=wayland-1
root@rubikpi:~# cd home
-bash: cd: home: Ficheiro ou pasta inexistente
root@rubikpi:~# cd /home
root@rubikpi:/home# cd debian/
root@rubikpi:/home/debian# ls
'Área de Trabalho' Imagens prime probe_p010.c test
Documentos Modelos prime.c Público Transferências
Emulators Música probe_p010 sudo Vídeos
root@rubikpi:/home/debian# cd Documentos/
root@rubikpi:/home/debian/Documentos# gst-launch-1.0 filesrc location=input2.mp4 ! qtdemux ! h265parse ! v4l2h265dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
(gst-launch-1.0:3749): GStreamer-Wayland-CRITICAL **: 12:54:28.993: gst_wl_window_ensure_fullscreen: assertion 'self' failed
Setting pipeline to PAUSED ...
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...
root@rubikpi:/home/debian/Documentos#
Any change of having a ffmpeg build too? with shared libs i would like to run kodi
.
We are currently syncing this issue internally.
Thank you for your suggestion. Our team will initiate the relevant research and development activities accordingly.
Any news? I tested ubuntu image (stock no changes) and it have the same problem black screen on HEVC 10 Bit videos or artifacts in image in debian(with my custom ffmpeg). It seems that it have problems in the msm_vdec driver because it try to parse the HEVC as a VP8/VP9 video, according to dmesg logs in the stock ubuntu image. You can use the jellyfish as a reference for testing that is what i’m using Video for testing. 8bit video HEVC are broken too in ubuntu but ok in debian, in the ubuntu there are grey frames after every decoded frame and a playback slowness. Can please get in touch with Qualcomm. Thank you.
Could you please share your detailed test steps and commands?
Our R&D team is currently working on this matter and will also liaise with Qualcomm in parallel. Thank you for your feedback.
When i have time i will give you detailed steps of what i’m doing but for now for giving you guys a fast path of testing is in ubuntu destkop install kodi via apt-get.
sudo apt-get install kodi, after install check it is the debian version, since it is the one available in the ubuntu repo’s, enable DRM prime HW decoding in settings, play the video https://repo.jellyfin.org/archive/jellyfish/media/jellyfish-3-mbps-hd-hevc-10bit.mkv
you will have black screen, crazy screen.
You can try to use the headless kodi too version via gbm by logging out wayland desktop version and logging in via kodi session in session selection, enabling DRM Prime try to open the video, same thing.
When i have a bit of time will post all the test i have done until now and all the things i tried including patches and so on, but what i posted should be enough for you now.
If you use the jellifish HEVC video 8 bit is broken too https://repo.jellyfin.org/test-videos/SDR/HEVC%208bit/Test%20Jellyfin%201080p%20HEVC%208bit%203M.mp4 … at least in the ubuntu ok in debian.