Commit 2b832a06 authored by Dikshita Agarwal's avatar Dikshita Agarwal Committed by Mauro Carvalho Chehab

media: venus: replace arrary index with enum for supported formats

Use enums to list supported formats for encoder and decoder
instead of array index which was a error prone design.
Signed-off-by: default avatarDikshita Agarwal <quic_dikshita@quicinc.com>
Signed-off-by: default avatarStanimir Varbanov <stanimir.k.varbanov@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 47f867cb
...@@ -83,6 +83,22 @@ struct venus_resources { ...@@ -83,6 +83,22 @@ struct venus_resources {
const char *fwname; 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 { struct venus_format {
u32 pixfmt; u32 pixfmt;
unsigned int num_planes; unsigned int num_planes;
......
...@@ -30,69 +30,82 @@ ...@@ -30,69 +30,82 @@
* - future firmware versions could add support for >1 planes * - future firmware versions could add support for >1 planes
*/ */
static const struct venus_format vdec_formats[] = { static const struct venus_format vdec_formats[] = {
{ [VENUS_FMT_NV12] = {
.pixfmt = V4L2_PIX_FMT_NV12, .pixfmt = V4L2_PIX_FMT_NV12,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
[VENUS_FMT_QC08C] = {
.pixfmt = V4L2_PIX_FMT_QC08C, .pixfmt = V4L2_PIX_FMT_QC08C,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
[VENUS_FMT_QC10C] = {
.pixfmt = V4L2_PIX_FMT_QC10C, .pixfmt = V4L2_PIX_FMT_QC10C,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_MPEG4, [VENUS_FMT_H264] = {
.pixfmt = V4L2_PIX_FMT_H264,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_MPEG2, [VENUS_FMT_VP8] = {
.pixfmt = V4L2_PIX_FMT_VP8,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_H263, [VENUS_FMT_VP9] = {
.pixfmt = V4L2_PIX_FMT_VP9,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_VC1_ANNEX_G, [VENUS_FMT_HEVC] = {
.pixfmt = V4L2_PIX_FMT_HEVC,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .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, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .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, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_VP8, [VENUS_FMT_MPEG4] = {
.pixfmt = V4L2_PIX_FMT_MPEG4,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_VP9, [VENUS_FMT_MPEG2] = {
.pixfmt = V4L2_PIX_FMT_MPEG2,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_XVID, [VENUS_FMT_H263] = {
.pixfmt = V4L2_PIX_FMT_H263,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, { },
.pixfmt = V4L2_PIX_FMT_HEVC, [VENUS_FMT_XVID] = {
.pixfmt = V4L2_PIX_FMT_XVID,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION, .flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
}, },
}; };
static const struct venus_format * static const struct venus_format *
...@@ -1575,8 +1588,8 @@ static const struct hfi_inst_ops vdec_hfi_ops = { ...@@ -1575,8 +1588,8 @@ static const struct hfi_inst_ops vdec_hfi_ops = {
static void vdec_inst_init(struct venus_inst *inst) static void vdec_inst_init(struct venus_inst *inst)
{ {
inst->hfi_codec = HFI_VIDEO_CODEC_H264; inst->hfi_codec = HFI_VIDEO_CODEC_H264;
inst->fmt_out = &vdec_formats[8]; inst->fmt_out = &vdec_formats[VENUS_FMT_H264];
inst->fmt_cap = &vdec_formats[0]; inst->fmt_cap = &vdec_formats[VENUS_FMT_NV12];
inst->width = frame_width_min(inst); inst->width = frame_width_min(inst);
inst->height = ALIGN(frame_height_min(inst), 32); inst->height = ALIGN(frame_height_min(inst), 32);
inst->crop.left = 0; inst->crop.left = 0;
......
...@@ -32,28 +32,33 @@ ...@@ -32,28 +32,33 @@
* - future firmware versions could add support for >1 planes * - future firmware versions could add support for >1 planes
*/ */
static const struct venus_format venc_formats[] = { static const struct venus_format venc_formats[] = {
{ [VENUS_FMT_NV12] = {
.pixfmt = V4L2_PIX_FMT_NV12, .pixfmt = V4L2_PIX_FMT_NV12,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_MPEG4, [VENUS_FMT_H264] = {
.pixfmt = V4L2_PIX_FMT_H264,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_H263, [VENUS_FMT_VP8] = {
.pixfmt = V4L2_PIX_FMT_VP8,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_H264, [VENUS_FMT_HEVC] = {
.pixfmt = V4L2_PIX_FMT_HEVC,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_VP8, [VENUS_FMT_MPEG4] = {
.pixfmt = V4L2_PIX_FMT_MPEG4,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, { },
.pixfmt = V4L2_PIX_FMT_HEVC, [VENUS_FMT_H263] = {
.pixfmt = V4L2_PIX_FMT_H263,
.num_planes = 1, .num_planes = 1,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, .type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
}, },
...@@ -1416,8 +1421,8 @@ static int m2m_queue_init(void *priv, struct vb2_queue *src_vq, ...@@ -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) static void venc_inst_init(struct venus_inst *inst)
{ {
inst->fmt_cap = &venc_formats[3]; inst->fmt_cap = &venc_formats[VENUS_FMT_H264];
inst->fmt_out = &venc_formats[0]; inst->fmt_out = &venc_formats[VENUS_FMT_NV12];
inst->width = 1280; inst->width = 1280;
inst->height = ALIGN(720, 32); inst->height = ALIGN(720, 32);
inst->out_width = 1280; inst->out_width = 1280;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment