[PATCH v3 0/7] media: rkvdec: Add HEVC backend

Detlev Casanova detlev.casanova at collabora.com
Tue Sep 9 11:12:09 PDT 2025


Hi Jonas,

On 9/5/25 12:19, Jonas Karlman wrote:
> This series add a HEVC backend to the Rockchip Video Decoder driver.
>
> With the dependent H.264 High 10 and 4:2:2 profile support series
> finally merged there is finally time to send a v2 with minor changes and
> a suggested code style fix of this series. v1 of this series has been
> fully functional up until recent unstaging of the rkvdec driver.
>
> A version of this HEVC backend has been in use by the LibreELEC distro
> for the past 5+ years [1]. It was initially created based on a copy of
> the H264 backend, unstable HEVC uAPI controls and a cabac table + scaling
> matrix functions shamelessly copied 1:1 from the Rockchip mpp library.
>
> It has since then been extended to use the stable HEVC uAPI controls and
> improved opon e.g. to include support for rk3288 and fix decoding issues
> by Alex Bee and Nicolas Dufresne.
>
> The version submitted in this series is based on the code currently used
> by the LibreELEC distro, excluding hard/soft reset, and with cabac table
> and scaling matrix functions picked from Sebastian Fricke prior series
> to add a HEVC backend [2].
>
> Big thanks to Alex Bee, Nicolas Dufresne and Sebastian Fricke for making
> this series possible!
>
> Patch 1 add the new HEVC backend.
> Patch 2-3 add variants support to the driver.
> Patch 4 add support for a rk3288 variant.
> Patch 5 add a rk3328 variant to work around hw quirks.
> Patch 6-7 add device tree node for rk3288.
>
> This was tested on a ROCK Pi 4 (RK3399) and Rock64 (RK3328):
>
>    v4l2-compliance 1.30.1, 64 bits, 64-bit time_t
>    ...
>    Total for rkvdec device /dev/video1: 49, Succeeded: 49, Failed: 0, Warnings: 0
>
>    Running test suite JCT-VC-HEVC_V1 with decoder FFmpeg-H.265-v4l2request
>    ...
>    Ran 137/147 tests successfully
>
>    Running test suite JCT-VC-MV-HEVC with decoder FFmpeg-H.265-v4l2request
>    ...
>    Ran 9/9 tests successfully
>
> And on a TinkerBoard (RK3288):
>
>    v4l2-compliance 1.30.1, 32 bits, 32-bit time_t
>    ...
>    Total for rkvdec device /dev/video3: 49, Succeeded: 49, Failed: 0, Warnings: 0
>
>    Running test suite JCT-VC-HEVC_V1 with decoder FFmpeg-H.265-v4l2request
>    ...
>    Ran 137/147 tests successfully
>
>    Running test suite JCT-VC-MV-HEVC with decoder FFmpeg-H.265-v4l2request
>    ...
>    Ran 9/9 tests successfully
>
> The WPP_x_ericsson tests from test suite JCT-VC-HEVC_V1 has been showing
> a mix of both Success and/or Fail result for FFmpeg-H.265-v4l2request.
>
> Full summary of fluster run can be found at [3].
>
> Please note that there is a known issue with concurrent decoding,
> decoding errors in one decode session may affect a separate session.
> The only known mitigation to this is to pause decoding for some time
> and/or do a full HW reset, something to handle in future series.
I also tested on Rock Pi 4 SE (but with Gstreamer instead of FFmpeg) and 
can
confirm the same results, so, for the whole series:

Tested-by: Detlev Casanova <detlev.casanova at collabora.com> # RK3399

Best regards,

Detlev

> Changes in v3:
> - Change to use file_to_rkvdec_ctx()
> - Rename assemble_hw_rps to assemble_sw_rps
> - Use a reference to rkvdec_variant instead of copying capabilities and
>    quirks to rkvdec_dev
> - Add num_regs field to rkvdec_variant, currently not used for anything
> - Add and use rkvdec_quirks_disable_qos() helper to apply qos quirk
> - Collect t-b and r-b tags
> Link to v2: https://lore.kernel.org/linux-media/20250810212454.3237486-1-jonas@kwiboo.se
>
> Changes in v2:
> - Rabase after h264 high10/422 merge and unstaging of rkvdec driver
> - Use new_value in transpose_and_flatten_matrices()
> - Add NULL check for ctrl->new_elems in rkvdec_hevc_run_preamble()
> - Set RKVDEC_WR_DDR_ALIGN_EN for RK3328
> - Adjust code style in rkvdec_enum_coded_fmt_desc()
> - Collect a-b tag
> - Drop merged vdec node reg size patches
> Link to v1: https://lore.kernel.org/linux-media/20231105233630.3927502-1-jonas@kwiboo.se
>
> [1] https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch
> [2] https://lore.kernel.org/linux-media/20230101-patch-series-v2-6-2-rc1-v2-0-fa1897efac14@collabora.com/
> [3] https://gist.github.com/Kwiboo/0ea22df1c9c3f3a48479d3f7ec28169d
>
> Alex Bee (4):
>    media: rkvdec: Add variants support
>    media: rkvdec: Add RK3288 variant
>    media: rkvdec: Disable QoS for HEVC and VP9 on RK3328
>    ARM: dts: rockchip: Add vdec node for RK3288
>
> Jonas Karlman (3):
>    media: rkvdec: Add HEVC backend
>    media: rkvdec: Implement capability filtering
>    media: dt-bindings: rockchip,vdec: Add RK3288 compatible
>
>   .../bindings/media/rockchip,vdec.yaml         |    1 +
>   arch/arm/boot/dts/rockchip/rk3288.dtsi        |   17 +-
>   .../media/platform/rockchip/rkvdec/Makefile   |    2 +-
>   .../rockchip/rkvdec/rkvdec-hevc-data.c        | 1848 +++++++++++++++++
>   .../platform/rockchip/rkvdec/rkvdec-hevc.c    |  820 ++++++++
>   .../platform/rockchip/rkvdec/rkvdec-regs.h    |    4 +
>   .../platform/rockchip/rkvdec/rkvdec-vp9.c     |    4 +
>   .../media/platform/rockchip/rkvdec/rkvdec.c   |  198 +-
>   .../media/platform/rockchip/rkvdec/rkvdec.h   |   17 +
>   9 files changed, 2890 insertions(+), 21 deletions(-)
>   create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-hevc-data.c
>   create mode 100644 drivers/media/platform/rockchip/rkvdec/rkvdec-hevc.c
>



More information about the Linux-rockchip mailing list