media: venus: replace arrary index with enum for supported formats
authorDikshita Agarwal <quic_dikshita@quicinc.com>
Mon, 22 May 2023 06:17:09 +0000 (07:17 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 9 Jun 2023 13:02:38 +0000 (14:02 +0100)
Use enums to list supported formats for encoder and decoder
instead of array index which was a error prone design.

Signed-off-by: Dikshita Agarwal <quic_dikshita@quicinc.com>
Signed-off-by: Stanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/platform/qcom/venus/core.h
drivers/media/platform/qcom/venus/vdec.c
drivers/media/platform/qcom/venus/venc.c

index 12a42fb..e988ed4 100644 (file)
@@ -83,6 +83,22 @@ struct venus_resources {
        const char *fwname;
 };
 
+enum venus_fmt {
+       VENUS_FMT_NV12                  = 0,
+       VENUS_FMT_QC08C                 = 1,
+       VENUS_FMT_QC10C                 = 2,
+       VENUS_FMT_H264                  = 3,
+       VENUS_FMT_VP8                   = 4,
+       VENUS_FMT_VP9                   = 5,
+       VENUS_FMT_HEVC                  = 6,
+       VENUS_FMT_VC1_ANNEX_G           = 7,
+       VENUS_FMT_VC1_ANNEX_L           = 8,
+       VENUS_FMT_MPEG4                 = 9,
+       VENUS_FMT_MPEG2                 = 10,
+       VENUS_FMT_H263                  = 11,
+       VENUS_FMT_XVID                  = 12,
+};
+
 struct venus_format {
        u32 pixfmt;
        unsigned int num_planes;
index c6f0fd0..bab985b 100644 (file)
  * - future firmware versions could add support for >1 planes
  */
 static const struct venus_format vdec_formats[] = {
-       {
+       [VENUS_FMT_NV12] = {
                .pixfmt = V4L2_PIX_FMT_NV12,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
+       },
+       [VENUS_FMT_QC08C] = {
                .pixfmt = V4L2_PIX_FMT_QC08C,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
+       },
+       [VENUS_FMT_QC10C] = {
                .pixfmt = V4L2_PIX_FMT_QC10C,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_MPEG4,
+       },
+       [VENUS_FMT_H264] = {
+               .pixfmt = V4L2_PIX_FMT_H264,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_MPEG2,
+       },
+       [VENUS_FMT_VP8] = {
+               .pixfmt = V4L2_PIX_FMT_VP8,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_H263,
+       },
+       [VENUS_FMT_VP9] = {
+               .pixfmt = V4L2_PIX_FMT_VP9,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_VC1_ANNEX_G,
+       },
+       [VENUS_FMT_HEVC] = {
+               .pixfmt = V4L2_PIX_FMT_HEVC,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_VC1_ANNEX_L,
+       },
+       [VENUS_FMT_VC1_ANNEX_G] = {
+               .pixfmt = V4L2_PIX_FMT_VC1_ANNEX_G,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_H264,
+       },
+       [VENUS_FMT_VC1_ANNEX_L] = {
+               .pixfmt = V4L2_PIX_FMT_VC1_ANNEX_L,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_VP8,
+       },
+       [VENUS_FMT_MPEG4] = {
+               .pixfmt = V4L2_PIX_FMT_MPEG4,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_VP9,
+       },
+       [VENUS_FMT_MPEG2] = {
+               .pixfmt = V4L2_PIX_FMT_MPEG2,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_XVID,
+       },
+       [VENUS_FMT_H263] = {
+               .pixfmt = V4L2_PIX_FMT_H263,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_HEVC,
+       },
+       [VENUS_FMT_XVID] = {
+               .pixfmt = V4L2_PIX_FMT_XVID,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
                .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
        },
+
 };
 
 static const struct venus_format *
@@ -1575,8 +1588,8 @@ static const struct hfi_inst_ops vdec_hfi_ops = {
 static void vdec_inst_init(struct venus_inst *inst)
 {
        inst->hfi_codec = HFI_VIDEO_CODEC_H264;
-       inst->fmt_out = &vdec_formats[8];
-       inst->fmt_cap = &vdec_formats[0];
+       inst->fmt_out = &vdec_formats[VENUS_FMT_H264];
+       inst->fmt_cap = &vdec_formats[VENUS_FMT_NV12];
        inst->width = frame_width_min(inst);
        inst->height = ALIGN(frame_height_min(inst), 32);
        inst->crop.left = 0;
index 4666f42..b60772c 100644 (file)
  * - future firmware versions could add support for >1 planes
  */
 static const struct venus_format venc_formats[] = {
-       {
+       [VENUS_FMT_NV12] = {
                .pixfmt = V4L2_PIX_FMT_NV12,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_MPEG4,
+       },
+       [VENUS_FMT_H264] = {
+               .pixfmt = V4L2_PIX_FMT_H264,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_H263,
+       },
+       [VENUS_FMT_VP8] = {
+               .pixfmt = V4L2_PIX_FMT_VP8,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_H264,
+       },
+       [VENUS_FMT_HEVC] = {
+               .pixfmt = V4L2_PIX_FMT_HEVC,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_VP8,
+       },
+       [VENUS_FMT_MPEG4] = {
+               .pixfmt = V4L2_PIX_FMT_MPEG4,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
-       }, {
-               .pixfmt = V4L2_PIX_FMT_HEVC,
+       },
+       [VENUS_FMT_H263] = {
+               .pixfmt = V4L2_PIX_FMT_H263,
                .num_planes = 1,
                .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
        },
@@ -1416,8 +1421,8 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq,
 
 static void venc_inst_init(struct venus_inst *inst)
 {
-       inst->fmt_cap = &venc_formats[3];
-       inst->fmt_out = &venc_formats[0];
+       inst->fmt_cap = &venc_formats[VENUS_FMT_H264];
+       inst->fmt_out = &venc_formats[VENUS_FMT_NV12];
        inst->width = 1280;
        inst->height = ALIGN(720, 32);
        inst->out_width = 1280;