Jump to content

Rockchip kernels with RGA/MPP VPU hw acceleration


Recommended Posts

Posted

Can someone explain the purpose of the different kernels available in the Armbian repos and Armbian Github?

linux-image-legacy-media/bookworm 24.5.1 arm64
   Armbian Linux legacy kernel image 5.10.110-legacy-media

linux-image-current-media/bookworm 24.5.1 arm64
   Armbian Linux current kernel image 6.1.92-current-media

linux-image-current-rockchip64/bookworm 25.2.3 arm64
   Armbian Linux current kernel image 6.12.19-current-rockchip64

 

The linux-image-legacy-media and linux-image-current-media kernels are on BSP kernel versions 5.10 and 6.1. But aren't suffixed with the vendor name, which is typically done for BSP kernels.

 

The linux-image-current-rockchip64 kernel is on a mainline version of 6.12.19. Why is it suffixed with rockchip64?

 

There are also kernels such as rk-6.1-rkr5 that are not in the repos, but can be built from https://github.com/armbian/linux-rockchip

These are on BSP kernel versions such as 5.10 and 6.1.

 

What is the purpose of the armbian-bsp packages such as armbian-bsp-cli-rock64-current and armbian-bsp-desktop-rock64-current? What are their differences?

 

Do any of these kernels support RGA/MPP Rockchip VPU hw acceleration?
The Jellyfin docs state,

Quote

Make sure dma_heap, dri, mpp_service and rga exist in /dev. Otherwise upgrade your BSP kernel to 5.10 LTS and newer.


6.12.19-current-rockchip64 is missing rga and mpp

root@rock64:~# uname -r
6.12.19-current-rockchip64

root@rock64:~# ls -l /dev | grep -E "mpp|rga|dri|dma_heap"
drwxr-xr-x 2 root root          80 Jan  1  1970 dma_heap
drwxr-xr-x 3 root root         120 Mar 21 10:59 dri

root@rock64:~# lsmod | grep rockchip
rockchip_vdec          77824  0
v4l2_vp9               20480  2 rockchip_vdec,hantro_vpu
v4l2_h264              16384  2 rockchip_vdec,hantro_vpu
rockchip_rga           20480  0
videobuf2_dma_contig    20480  2 rockchip_vdec,hantro_vpu
videobuf2_dma_sg       16384  1 rockchip_rga
v4l2_mem2mem           24576  3 rockchip_vdec,hantro_vpu,rockchip_rga
videobuf2_v4l2         20480  4 rockchip_vdec,hantro_vpu,rockchip_rga,v4l2_mem2mem
videodev              237568  5 rockchip_vdec,videobuf2_v4l2,hantro_vpu,rockchip_rga,v4l2_mem2mem
snd_soc_rockchip_spdif    12288  0
snd_soc_rockchip_i2s    24576  4
videobuf2_common       53248  8 rockchip_vdec,videobuf2_dma_contig,videobuf2_v4l2,hantro_vpu,rockchip_rga,videobuf2_dma_sg,v4l2_mem2mem,videobuf2_memops
mc                     53248  6 rockchip_vdec,videodev,videobuf2_v4l2,hantro_vpu,videobuf2_common,v4l2_mem2mem
snd_soc_core          204800  7 snd_soc_spdif_tx,snd_soc_hdmi_codec,snd_soc_rockchip_spdif,snd_soc_rk3328,snd_soc_simple_card_utils,snd_soc_rockchip_i2s,snd_soc_simple_card
nvmem_rockchip_efuse    12288  0
rockchipdrm           180224  0
dw_hdmi_qp             20480  1 rockchipdrm
dw_mipi_dsi            16384  1 rockchipdrm
dw_hdmi                45056  2 dw_hdmi_i2s_audio,rockchipdrm
analogix_dp            40960  1 rockchipdrm
drm_display_helper    131072  4 rockchipdrm,dw_hdmi,analogix_dp,dw_hdmi_qp

 

I did get ffmpeg hw acceleration working using v4l2request from https://github.com/jernejsk/FFmpeg/tree/v4l2-request-n7.1 using the 6.12.19-current-rockchip64 kernel. But wanted to see if jellyfin-ffmpeg7 or https://github.com/nyanmisaka/ffmpeg-rockchip performed better. 

v4l2request does 49 fps, software decoding does 60 fps, but uses 2.6x more cpu.

root@rock64:~/github/FFmpeg# ffmpeg -hwaccel v4l2request -i 1080p.264 -f null - -benchmark
ffmpeg version 904a851 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --enable-v4l2-request --enable-libudev --enable-libdrm --enable-gnutls --prefix="$HOME/ffmpeg_build"
  libavutil      59. 39.100 / 59. 39.100
  libavcodec     61. 19.100 / 61. 19.100
  libavformat    61.  7.100 / 61.  7.100
  libavdevice    61.  3.100 / 61.  3.100
  libavfilter    10.  4.100 / 10.  4.100
  libswscale      8.  3.100 /  8.  3.100
  libswresample   5.  3.100 /  5.  3.100
Input #0, h264, from '/root/1080p.264':
  Duration: N/A, bitrate: N/A
  Stream #0:0: Video: h264 (Main), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 59.94 tbr, 1200k tbn
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Press [q] to stop, [?] for help
[h264 @ 0xaaaaf4be97b0] Using V4L2 media driver rkvdec (6.12.19) for S264
Output #0, null, to 'pipe:':
  Metadata:
    encoder         : Lavf61.7.100
  Stream #0:0: Video: wrapped_avframe, nv12(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 29.97 fps, 29.97 tbn
      Metadata:
        encoder         : Lavc61.19.100 wrapped_avframe
[out#0/null @ 0xaaaaf4be7320] video:485KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
frame= 1129 fps= 49 q=-0.0 Lsize=N/A time=00:00:37.67 bitrate=N/A speed=1.64x    
bench: utime=21.094s stime=2.279s rtime=22.936s
bench: maxrss=72164KiB

 

Posted

Alright, didn't know they are still there. Well as mentioned media won't receive any further updates since all functionally is merged into standard branches.

 

Anyway, Rock64 is rk3399 I think and you should be good to go with mainline kernel, either current which is 6.12.y or edge which is 6.14-rc7 atm.

 

The branches at https://github.com/armbian/linux-rockchip are made from Rockchip BSP code and mostly for rk35xx socs. I don't think there is much work there for rk3399.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines