Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: hantro: Add quirk for NV12/NV12_4L4 capture format

The G2 core decoder engine produces NV12_4L4 format,
which is a simple NV12 4x4 tiled format. The driver currently
hides this format by always enabling the post-processor engine,
and therefore offering NV12 directly.

This is done without using the logic in hantro_postproc.c
and therefore makes it difficult to add VP9 cleanly.

Since fixing this is not easy, add a small quirk to force
NV12 if HEVC was configured, but otherwise declare NV12_4L4
as the pixel format in imx8mq_vpu_g2_variant.dec_fmts.

This will be used by the VP9 decoder which will be added soon.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

authored by

Ezequiel Garcia and committed by
Mauro Carvalho Chehab
bb91e46e 53a3e710

+15 -1
+14
drivers/staging/media/hantro/hantro_v4l2.c
··· 151 151 bool skip_mode_none; 152 152 153 153 /* 154 + * The HEVC decoder on the G2 core needs a little quirk to offer NV12 155 + * only on the capture side. Once the post-processor logic is used, 156 + * we will be able to expose NV12_4L4 and NV12 as the other cases, 157 + * and therefore remove this quirk. 158 + */ 159 + if (capture && ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_HEVC_SLICE) { 160 + if (f->index == 0) { 161 + f->pixelformat = V4L2_PIX_FMT_NV12; 162 + return 0; 163 + } 164 + return -EINVAL; 165 + } 166 + 167 + /* 154 168 * When dealing with an encoder: 155 169 * - on the capture side we want to filter out all MODE_NONE formats. 156 170 * - on the output side we want to filter out all formats that are
+1 -1
drivers/staging/media/hantro/imx8m_vpu_hw.c
··· 134 134 135 135 static const struct hantro_fmt imx8m_vpu_g2_dec_fmts[] = { 136 136 { 137 - .fourcc = V4L2_PIX_FMT_NV12, 137 + .fourcc = V4L2_PIX_FMT_NV12_4L4, 138 138 .codec_mode = HANTRO_MODE_NONE, 139 139 }, 140 140 {