mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
media: iris: Add support for AV1 format in iris decoder
Extend iris decoder driver to support format V4L2_PIX_FMT_AV1. This change updates the format enumeration (VIDIOC_ENUM_FMT) and allows setting AV1 format via VIDIOC_S_FMT for gen2 and beyond. Gen1 iris hardware decoder does not support AV1 format. Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Reviewed-by: Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com> Signed-off-by: Deepa Guthyappa Madivalara <deepa.madivalara@oss.qualcomm.com> Tested-by: Val Packett <val@packett.cool> Signed-off-by: Bryan O'Donoghue <bod@kernel.org> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
151096542e
commit
10ac84abd4
|
|
@ -139,6 +139,7 @@ enum hfi_codec_type {
|
|||
HFI_CODEC_DECODE_HEVC = 3,
|
||||
HFI_CODEC_ENCODE_HEVC = 4,
|
||||
HFI_CODEC_DECODE_VP9 = 5,
|
||||
HFI_CODEC_DECODE_AV1 = 7,
|
||||
};
|
||||
|
||||
enum hfi_picture_type {
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ enum iris_fmt_type_out {
|
|||
IRIS_FMT_H264,
|
||||
IRIS_FMT_HEVC,
|
||||
IRIS_FMT_VP9,
|
||||
IRIS_FMT_AV1,
|
||||
};
|
||||
|
||||
enum iris_fmt_type_cap {
|
||||
|
|
|
|||
|
|
@ -217,6 +217,8 @@ struct iris_platform_data {
|
|||
u64 dma_mask;
|
||||
const char *fwname;
|
||||
u32 pas_id;
|
||||
struct iris_fmt *inst_iris_fmts;
|
||||
u32 inst_iris_fmts_size;
|
||||
struct platform_inst_caps *inst_caps;
|
||||
const struct platform_inst_fw_cap *inst_fw_caps_dec;
|
||||
u32 inst_fw_caps_dec_size;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include "iris_hfi_gen1_defines.h"
|
||||
#include "iris_vpu_buffer.h"
|
||||
#include "iris_vpu_common.h"
|
||||
#include "iris_instance.h"
|
||||
|
||||
#include "iris_platform_sc7280.h"
|
||||
|
||||
|
|
@ -19,7 +20,22 @@
|
|||
#define BITRATE_PEAK_DEFAULT (BITRATE_DEFAULT * 2)
|
||||
#define BITRATE_STEP 100
|
||||
|
||||
static const struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
|
||||
static struct iris_fmt platform_fmts_sm8250_dec[] = {
|
||||
[IRIS_FMT_H264] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H264,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_HEVC] = {
|
||||
.pixfmt = V4L2_PIX_FMT_HEVC,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_VP9] = {
|
||||
.pixfmt = V4L2_PIX_FMT_VP9,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_inst_fw_cap inst_fw_cap_sm8250_dec[] = {
|
||||
{
|
||||
.cap_id = PIPE,
|
||||
/* .max, .min and .value are set via platform data */
|
||||
|
|
@ -337,6 +353,8 @@ const struct iris_platform_data sm8250_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu-1.0/venus.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8250_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8250_dec),
|
||||
.inst_caps = &platform_inst_cap_sm8250,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
|
||||
|
|
@ -386,6 +404,8 @@ const struct iris_platform_data sc7280_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu/vpu20_p1.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8250_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8250_dec),
|
||||
.inst_caps = &platform_inst_cap_sm8250,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8250_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8250_dec),
|
||||
|
|
|
|||
|
|
@ -19,6 +19,25 @@
|
|||
#define VIDEO_ARCH_LX 1
|
||||
#define BITRATE_MAX 245000000
|
||||
|
||||
static struct iris_fmt platform_fmts_sm8550_dec[] = {
|
||||
[IRIS_FMT_H264] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H264,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_HEVC] = {
|
||||
.pixfmt = V4L2_PIX_FMT_HEVC,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_VP9] = {
|
||||
.pixfmt = V4L2_PIX_FMT_VP9,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_AV1] = {
|
||||
.pixfmt = V4L2_PIX_FMT_AV1,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct platform_inst_fw_cap inst_fw_cap_sm8550_dec[] = {
|
||||
{
|
||||
.cap_id = PROFILE_H264,
|
||||
|
|
@ -759,6 +778,8 @@ const struct iris_platform_data sm8550_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu/vpu30_p4.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8550_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
|
||||
.inst_caps = &platform_inst_cap_sm8550,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
|
||||
|
|
@ -809,7 +830,6 @@ const struct iris_platform_data sm8550_data = {
|
|||
.dec_output_prop_vp9 = sm8550_vdec_subscribe_output_properties_vp9,
|
||||
.dec_output_prop_vp9_size =
|
||||
ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9),
|
||||
|
||||
.dec_ip_int_buf_tbl = sm8550_dec_ip_int_buf_tbl,
|
||||
.dec_ip_int_buf_tbl_size = ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl),
|
||||
.dec_op_int_buf_tbl = sm8550_dec_op_int_buf_tbl,
|
||||
|
|
@ -851,6 +871,8 @@ const struct iris_platform_data sm8650_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu/vpu33_p4.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8550_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
|
||||
.inst_caps = &platform_inst_cap_sm8550,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
|
||||
|
|
@ -933,6 +955,8 @@ const struct iris_platform_data sm8750_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu/vpu35_p4.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8550_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
|
||||
.inst_caps = &platform_inst_cap_sm8550,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
|
||||
|
|
@ -1019,6 +1043,8 @@ const struct iris_platform_data qcs8300_data = {
|
|||
.dma_mask = 0xe0000000 - 1,
|
||||
.fwname = "qcom/vpu/vpu30_p4_s6.mbn",
|
||||
.pas_id = IRIS_PAS_ID,
|
||||
.inst_iris_fmts = platform_fmts_sm8550_dec,
|
||||
.inst_iris_fmts_size = ARRAY_SIZE(platform_fmts_sm8550_dec),
|
||||
.inst_caps = &platform_inst_cap_qcs8300,
|
||||
.inst_fw_caps_dec = inst_fw_cap_sm8550_dec,
|
||||
.inst_fw_caps_dec_size = ARRAY_SIZE(inst_fw_cap_sm8550_dec),
|
||||
|
|
|
|||
|
|
@ -67,21 +67,6 @@ void iris_vdec_inst_deinit(struct iris_inst *inst)
|
|||
kfree(inst->fmt_src);
|
||||
}
|
||||
|
||||
static const struct iris_fmt iris_vdec_formats_out[] = {
|
||||
[IRIS_FMT_H264] = {
|
||||
.pixfmt = V4L2_PIX_FMT_H264,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_HEVC] = {
|
||||
.pixfmt = V4L2_PIX_FMT_HEVC,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
[IRIS_FMT_VP9] = {
|
||||
.pixfmt = V4L2_PIX_FMT_VP9,
|
||||
.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct iris_fmt iris_vdec_formats_cap[] = {
|
||||
[IRIS_FMT_NV12] = {
|
||||
.pixfmt = V4L2_PIX_FMT_NV12,
|
||||
|
|
@ -101,8 +86,8 @@ find_format(struct iris_inst *inst, u32 pixfmt, u32 type)
|
|||
unsigned int i;
|
||||
switch (type) {
|
||||
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
|
||||
fmt = iris_vdec_formats_out;
|
||||
size = ARRAY_SIZE(iris_vdec_formats_out);
|
||||
fmt = inst->core->iris_platform_data->inst_iris_fmts;
|
||||
size = inst->core->iris_platform_data->inst_iris_fmts_size;
|
||||
break;
|
||||
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
|
||||
fmt = iris_vdec_formats_cap;
|
||||
|
|
@ -131,8 +116,8 @@ find_format_by_index(struct iris_inst *inst, u32 index, u32 type)
|
|||
|
||||
switch (type) {
|
||||
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
|
||||
fmt = iris_vdec_formats_out;
|
||||
size = ARRAY_SIZE(iris_vdec_formats_out);
|
||||
fmt = inst->core->iris_platform_data->inst_iris_fmts;
|
||||
size = inst->core->iris_platform_data->inst_iris_fmts_size;
|
||||
break;
|
||||
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
|
||||
fmt = iris_vdec_formats_cap;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user