@@ -150,6 +150,20 @@ static int vidioc_enum_fmt(struct file *file, void *priv,
unsigned int num_fmts, i, j = 0;
bool skip_mode_none;
+ /*
+ * The HEVC decoder on the G2 core needs a little quirk to offer NV12
+ * only on the capture side. Once the post-processor logic is used,
+ * we will be able to expose NV12_4L4 and NV12 as the other cases,
+ * and therefore remove this quirk.
+ */
+ if (capture && ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_HEVC_SLICE) {
+ if (f->index == 0) {
+ f->pixelformat = V4L2_PIX_FMT_NV12;
+ return 0;
+ }
+ return -EINVAL;
+ }
+
/*
* When dealing with an encoder:
* - on the capture side we want to filter out all MODE_NONE formats.
@@ -134,7 +134,7 @@ static const struct hantro_fmt imx8m_vpu_dec_fmts[] = {
static const struct hantro_fmt imx8m_vpu_g2_dec_fmts[] = {
{
- .fourcc = V4L2_PIX_FMT_NV12,
+ .fourcc = V4L2_PIX_FMT_NV12_4L4,
.codec_mode = HANTRO_MODE_NONE,
},
{