media: amphion: vdec check format in enum_fmt
authorMing Qian <ming.qian@nxp.com>
Thu, 19 May 2022 08:43:46 +0000 (09:43 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 20 Jun 2022 09:30:34 +0000 (10:30 +0100)
vdec check the pixel format is supported by vpu,
or is it disabled.
And don't report it if the result is false

Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/amphion/vpu_malone.c
drivers/media/platform/amphion/vpu_malone.h
drivers/media/platform/amphion/vpu_rpc.c

index f29c223..7a06011 100644 (file)
@@ -309,6 +309,7 @@ struct malone_padding_scode {
 struct malone_fmt_mapping {
        u32 pixelformat;
        enum vpu_malone_format malone_format;
+       u32 is_disabled;
 };
 
 struct malone_scode_t {
@@ -568,6 +569,8 @@ static enum vpu_malone_format vpu_malone_format_remap(u32 pixelformat)
        u32 i;
 
        for (i = 0; i < ARRAY_SIZE(fmt_mappings); i++) {
+               if (fmt_mappings[i].is_disabled)
+                       continue;
                if (pixelformat == fmt_mappings[i].pixelformat)
                        return fmt_mappings[i].malone_format;
        }
@@ -575,6 +578,19 @@ static enum vpu_malone_format vpu_malone_format_remap(u32 pixelformat)
        return MALONE_FMT_NULL;
 }
 
+bool vpu_malone_check_fmt(enum vpu_core_type type, u32 pixelfmt)
+{
+       if (!vpu_imx8q_check_fmt(type, pixelfmt))
+               return false;
+
+       if (pixelfmt == V4L2_PIX_FMT_NV12M_8L128 || pixelfmt == V4L2_PIX_FMT_NV12M_10BE_8L128)
+               return true;
+       if (vpu_malone_format_remap(pixelfmt) == MALONE_FMT_NULL)
+               return false;
+
+       return true;
+}
+
 static void vpu_malone_set_stream_cfg(struct vpu_shared_addr *shared,
                                      u32 instance,
                                      enum vpu_malone_format malone_format)
index e5a5cbe..02a9d95 100644 (file)
@@ -40,5 +40,6 @@ int vpu_malone_pre_cmd(struct vpu_shared_addr *shared, u32 instance);
 int vpu_malone_post_cmd(struct vpu_shared_addr *shared, u32 instance);
 int vpu_malone_init_instance(struct vpu_shared_addr *shared, u32 instance);
 u32 vpu_malone_get_max_instance_count(struct vpu_shared_addr *shared);
+bool vpu_malone_check_fmt(enum vpu_core_type type, u32 pixelfmt);
 
 #endif
index 18a1647..676f7da 100644 (file)
@@ -195,7 +195,7 @@ static struct vpu_iface_ops imx8q_rpc_ops[] = {
        },
        [VPU_CORE_TYPE_DEC] = {
                .check_codec = vpu_imx8q_check_codec,
-               .check_fmt = vpu_imx8q_check_fmt,
+               .check_fmt = vpu_malone_check_fmt,
                .boot_core = vpu_imx8q_boot_core,
                .get_power_state = vpu_imx8q_get_power_state,
                .on_firmware_loaded = vpu_imx8q_on_firmware_loaded,