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: 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>
This commit is contained in:
parent
47f867cb1b
commit
2b832a06a8
|
@ -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;
|
||||
|
|
|
@ -30,69 +30,82 @@
|
|||
* - 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,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
.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_H263,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
.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_VC1_ANNEX_L,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_H264] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H264,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_VP8] = {
|
||||
.pixfmt = V4L2_PIX_FMT_VP8,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
},
|
||||
[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_XVID,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_HEVC] = {
|
||||
.pixfmt = V4L2_PIX_FMT_HEVC,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
},
|
||||
[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,
|
||||
},
|
||||
[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,
|
||||
},
|
||||
[VENUS_FMT_MPEG4] = {
|
||||
.pixfmt = V4L2_PIX_FMT_MPEG4,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
},
|
||||
[VENUS_FMT_MPEG2] = {
|
||||
.pixfmt = V4L2_PIX_FMT_MPEG2,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
},
|
||||
[VENUS_FMT_H263] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H263,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
.flags = V4L2_FMT_FLAG_DYN_RESOLUTION,
|
||||
},
|
||||
[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;
|
||||
|
|
|
@ -32,31 +32,36 @@
|
|||
* - 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,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
}, {
|
||||
.pixfmt = V4L2_PIX_FMT_H263,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_H264] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H264,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_VP8] = {
|
||||
.pixfmt = V4L2_PIX_FMT_VP8,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
}, {
|
||||
},
|
||||
[VENUS_FMT_HEVC] = {
|
||||
.pixfmt = V4L2_PIX_FMT_HEVC,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
},
|
||||
[VENUS_FMT_MPEG4] = {
|
||||
.pixfmt = V4L2_PIX_FMT_MPEG4,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
},
|
||||
[VENUS_FMT_H263] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H263,
|
||||
.num_planes = 1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct venus_format *
|
||||
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue