On Tue Aug 11 17:04:14 2026 +0000, Tharit Tangkijwanichakul wrote:
> The default value of a compound control is zero initialized when no
> explicit default is provided. For V4L2_CTRL_TYPE_HEVC_SPS this results
> in chroma_format_idc being set to 0, which represents monochrome video.
> 
> Most stateless HEVC decoders do not support monochrome video. In
> particular, the VDPU38x variant of rkvdec fails v4l2-compliance in two
> tests related to V4L2_CID_STATELESS_HEVC_SPS.  The Control ioctls test
> reads the control with GET_EXT_CTRLS and writes the same value
> back; TRY_EXT_CTRLS then returns -EINVAL because the VDPU38x
> rkvdec_hevc_validate_sps() rejects sps->chroma_format_idc == 0.
> 
>     v4l2-compliance 1.33.0-5491, 64 bits, 64-bit time_t
>     v4l2-compliance SHA: b32589c51481 2026-07-16 08:51:38
>     Control ioctls:
>         fail: v4l2-test-controls.cpp(942):
>         try_ext_ctrls returned an error (22)
>       test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
>     Buffer ioctls:
>         fail: v4l2-test-buffers.cpp(3102): node->streamon(q.g_type())
>         fail: v4l2-test-buffers.cpp(3157): testBlockingDQBuf(node, m2m_q)
>       test blocking wait: FAIL
> 
> Set the common HEVC SPS compound control default to
> chroma_format_idc = 1, corresponding to 4:2:0.
> 
> Fixes: c9a59dc2acc7 ("media: rkvdec: Add HEVC support for the VDPU381 
> variant")
> Cc: [email protected]
> Signed-off-by: Tharit Tangkijwanichakul <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/v4l2-core/v4l2-ctrls-core.c | 7 +++++++
 1 file changed, 7 insertions(+)

---

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c 
b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 5b8a594fb9e2..9caca56478d1 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -115,6 +115,7 @@ static void std_init_compound(const struct v4l2_ctrl *ctrl, 
u32 idx,
        struct v4l2_ctrl_fwht_params *p_fwht_params;
        struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
        struct v4l2_ctrl_av1_sequence *p_av1_sequence;
+       struct v4l2_ctrl_hevc_sps *p_hevc_sps;
        void *p = ptr.p + idx * ctrl->elem_size;
 
        if (ctrl->p_def.p_const)
@@ -188,6 +189,12 @@ static void std_init_compound(const struct v4l2_ctrl 
*ctrl, u32 idx,
                 */
                memset(p_h264_scaling_matrix, 16, 
sizeof(*p_h264_scaling_matrix));
                break;
+       case V4L2_CTRL_TYPE_HEVC_SPS:
+               p_hevc_sps = p;
+
+               /* 4:2:0 */
+               p_hevc_sps->chroma_format_idc = 1;
+               break;
        }
 }
 
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to