Commit fde6161d authored by Dikshita Agarwal's avatar Dikshita Agarwal Committed by Hans Verkuil
Browse files

media: iris: Add HEVC and VP9 formats for decoder



Extend the decoder driver's supported formats to include HEVC (H.265)
and VP9. This change updates the format enumeration (VIDIOC_ENUM_FMT)
and allows setting these formats via VIDIOC_S_FMT.

Reviewed-by: default avatarBryan O'Donoghue <bryan.odonoghue@linaro.org>
Acked-by: default avatarVikash Garodia <quic_vgarodia@quicinc.com>
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-HDK
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-QRD
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK
Signed-off-by: default avatarDikshita Agarwal <quic_dikshita@quicinc.com>
Tested-by: Vikash Garodia <quic_vgarodia@quicinc.com> # on sa8775p-ride
Signed-off-by: default avatarBryan O'Donoghue <bod@kernel.org>
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
parent c7501fa5
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -88,16 +88,29 @@ static int iris_hfi_gen1_sys_pc_prep(struct iris_core *core)
static int iris_hfi_gen1_session_open(struct iris_inst *inst)
{
	struct hfi_session_open_pkt packet;
	u32 codec = 0;
	int ret;

	if (inst->state != IRIS_INST_DEINIT)
		return -EALREADY;

	switch (inst->codec) {
	case V4L2_PIX_FMT_H264:
		codec = HFI_VIDEO_CODEC_H264;
		break;
	case V4L2_PIX_FMT_HEVC:
		codec = HFI_VIDEO_CODEC_HEVC;
		break;
	case V4L2_PIX_FMT_VP9:
		codec = HFI_VIDEO_CODEC_VP9;
		break;
	}

	packet.shdr.hdr.size = sizeof(struct hfi_session_open_pkt);
	packet.shdr.hdr.pkt_type = HFI_CMD_SYS_SESSION_INIT;
	packet.shdr.session_id = inst->session_id;
	packet.session_domain = HFI_SESSION_TYPE_DEC;
	packet.session_codec = HFI_VIDEO_CODEC_H264;
	packet.session_codec = codec;

	reinit_completion(&inst->completion);

+2 −0
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@
#define HFI_SESSION_TYPE_DEC				2

#define HFI_VIDEO_CODEC_H264				0x00000002
#define HFI_VIDEO_CODEC_HEVC				0x00002000
#define HFI_VIDEO_CODEC_VP9				0x00004000

#define HFI_ERR_NONE					0x0

+13 −1
Original line number Diff line number Diff line
@@ -416,7 +416,19 @@ static int iris_hfi_gen2_session_set_config_params(struct iris_inst *inst, u32 p
static int iris_hfi_gen2_session_set_codec(struct iris_inst *inst)
{
	struct iris_inst_hfi_gen2 *inst_hfi_gen2 = to_iris_inst_hfi_gen2(inst);
	u32 codec = HFI_CODEC_DECODE_AVC;
	u32 codec = 0;

	switch (inst->codec) {
	case V4L2_PIX_FMT_H264:
		codec = HFI_CODEC_DECODE_AVC;
		break;
	case V4L2_PIX_FMT_HEVC:
		codec = HFI_CODEC_DECODE_HEVC;
		break;
	case V4L2_PIX_FMT_VP9:
		codec = HFI_CODEC_DECODE_VP9;
		break;
	}

	iris_hfi_gen2_packet_session_property(inst,
					      HFI_PROP_CODEC,
+3 −0
Original line number Diff line number Diff line
@@ -104,6 +104,9 @@ enum hfi_color_format {
enum hfi_codec_type {
	HFI_CODEC_DECODE_AVC			= 1,
	HFI_CODEC_ENCODE_AVC			= 2,
	HFI_CODEC_DECODE_HEVC			= 3,
	HFI_CODEC_ENCODE_HEVC			= 4,
	HFI_CODEC_DECODE_VP9			= 5,
};

enum hfi_picture_type {
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@
 * @sequence_out: a sequence counter for output queue
 * @tss: timestamp metadata
 * @metadata_idx: index for metadata buffer
 * @codec: codec type
 * @last_buffer_dequeued: a flag to indicate that last buffer is sent by driver
 */

@@ -75,6 +76,7 @@ struct iris_inst {
	u32				sequence_out;
	struct iris_ts_metadata		tss[VIDEO_MAX_FRAME];
	u32				metadata_idx;
	u32				codec;
	bool				last_buffer_dequeued;
};

Loading