소스 검색

Merge "video: driver: Enable encoder and decoder metadata" into video-kernel-waipio.lnx.1.0

Linux Build Service Account 4 년 전
부모
커밋
f49fc1e66e

+ 84 - 0
driver/platform/waipio/src/msm_vidc_waipio.c

@@ -951,6 +951,90 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
 
 	{CODEC_CONFIG, DEC, H264|HEVC, 0, 1, 1, 0,
 		V4L2_CID_MPEG_VIDC_CODEC_CONFIG},
+
+	{META_LTR_MARK_USE, ENC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS,
+		HFI_PROP_LTR_MARK_USE_DETAILS},
+
+	{META_SEQ_HDR_NAL, ENC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL,
+		HFI_PROP_METADATA_SEQ_HEADER_NAL},
+
+	{META_DPB_MISR, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR,
+		HFI_PROP_DPB_LUMA_CHROMA_MISR},
+
+	{META_OPB_MISR, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR,
+		HFI_PROP_OPB_LUMA_CHROMA_MISR},
+
+	{META_INTERLACE, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_INTERLACE,
+		HFI_PROP_INTERLACE_INFO},
+
+	{META_CONCEALED_MB_CNT, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT,
+		HFI_PROP_CONEALED_MB_COUNT},
+
+	{META_HIST_INFO, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO,
+		HFI_PROP_HISTOGRAM_INFO},
+
+	{META_SEI_MASTERING_DISP, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR,
+		HFI_PROP_SEI_MASTERING_DISPLAY_COLOUR},
+
+	{META_SEI_CLL, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL,
+		HFI_PROP_SEI_CONTENT_LIGHT_LEVEL},
+
+	{META_HDR10PLUS, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS,
+		HFI_PROP_SEI_HDR10PLUS_USERDATA},
+
+	{META_EVA_STATS, ENC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS,
+		HFI_PROP_EVA_STAT_INFO},
+
+	{META_BUF_TAG, DEC | ENC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG,
+		HFI_PROP_BUFFER_TAG},
+
+	{META_SUBFRAME_OUTPUT, DEC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT,
+		HFI_PROP_SUBFRAME_OUTPUT},
+
+	{META_ROI_INFO, ENC, CODECS_ALL,
+		V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
+		1, V4L2_MPEG_MSM_VIDC_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO,
+		HFI_PROP_ROI_INFO},
 };
 
 /*

+ 49 - 0
driver/vidc/inc/msm_vidc_driver.h

@@ -61,6 +61,55 @@ static inline is_internal_buffer(enum msm_vidc_buffer_type buffer_type)
 		buffer_type == MSM_VIDC_BUF_VPSS;
 }
 
+static inline bool is_input_meta_enabled(struct msm_vidc_inst *inst)
+{
+	bool enabled = false;
+
+	if (is_decode_session(inst)) {
+		enabled = inst->capabilities->cap[META_BUF_TAG].value ?
+			true : false;
+	} else if (is_encode_session(inst)) {
+		enabled = (inst->capabilities->cap[META_LTR_MARK_USE].value ||
+			inst->capabilities->cap[META_SEQ_HDR_NAL].value ||
+			inst->capabilities->cap[META_EVA_STATS].value ||
+			inst->capabilities->cap[META_BUF_TAG].value);
+	}
+	return enabled;
+}
+
+static inline bool is_output_meta_enabled(struct msm_vidc_inst *inst)
+{
+	bool enabled = false;
+
+	if (is_decode_session(inst)) {
+		enabled = (inst->capabilities->cap[META_DPB_MISR].value ||
+			inst->capabilities->cap[META_OPB_MISR].value ||
+			inst->capabilities->cap[META_INTERLACE].value ||
+			inst->capabilities->cap[META_CONCEALED_MB_CNT].value ||
+			inst->capabilities->cap[META_HIST_INFO].value ||
+			inst->capabilities->cap[META_SEI_MASTERING_DISP].value ||
+			inst->capabilities->cap[META_SEI_CLL].value ||
+			inst->capabilities->cap[META_BUF_TAG].value ||
+			inst->capabilities->cap[META_SUBFRAME_OUTPUT].value);
+	} else if (is_encode_session(inst)) {
+		enabled = inst->capabilities->cap[META_BUF_TAG].value ?
+			true : false;
+	}
+	return enabled;
+}
+
+static inline bool is_meta_enabled(struct msm_vidc_inst *inst, unsigned int type)
+{
+	bool enabled = false;
+
+	if (type == MSM_VIDC_BUF_INPUT)
+		enabled = is_input_meta_enabled(inst);
+	else if (type == MSM_VIDC_BUF_OUTPUT)
+		enabled = is_output_meta_enabled(inst);
+
+	return enabled;
+}
+
 static inline bool is_linear_colorformat(enum msm_vidc_colorformat_type colorformat)
 {
 	return colorformat == MSM_VIDC_FMT_NV12 ||

+ 14 - 0
driver/vidc/inc/msm_vidc_internal.h

@@ -340,6 +340,20 @@ enum msm_vidc_inst_capability_type {
 	CODED_FRAMES,
 	BIT_DEPTH,
 	CODEC_CONFIG,
+	META_LTR_MARK_USE,
+	META_SEQ_HDR_NAL,
+	META_DPB_MISR,
+	META_OPB_MISR,
+	META_INTERLACE,
+	META_CONCEALED_MB_CNT,
+	META_HIST_INFO,
+	META_SEI_MASTERING_DISP,
+	META_SEI_CLL,
+	META_HDR10PLUS,
+	META_EVA_STATS,
+	META_BUF_TAG,
+	META_SUBFRAME_OUTPUT,
+	META_ROI_INFO,
 	INST_CAP_MAX,
 };
 

+ 50 - 18
driver/vidc/src/msm_vdec.c

@@ -1189,6 +1189,14 @@ int msm_vdec_start_input(struct msm_vidc_inst *inst)
 	core = inst->core;
 	s_vpr_h(inst->sid, "%s()\n", __func__);
 
+	if (is_input_meta_enabled(inst) &&
+		!inst->vb2q[INPUT_META_PORT].streaming) {
+		s_vpr_e(inst->sid,
+			"%s: Meta port must be streamed on before data port\n",
+			__func__);
+		goto error;
+	}
+
 	//rc = msm_vidc_check_session_supported(inst);
 	if (rc)
 		goto error;
@@ -1390,6 +1398,14 @@ int msm_vdec_start_output(struct msm_vidc_inst *inst)
 		return -EINVAL;
 	}
 
+	if (is_output_meta_enabled(inst) &&
+		!inst->vb2q[OUTPUT_META_PORT].streaming) {
+		s_vpr_e(inst->sid,
+			"%s: Meta port must be streamed on before data port\n",
+			__func__);
+		goto error;
+	}
+
 	rc = msm_vdec_set_output_properties(inst);
 	if (rc)
 		goto error;
@@ -1556,15 +1572,23 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
 		fmt = &inst->fmts[INPUT_META_PORT];
 		fmt->type = INPUT_META_PLANE;
 		fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC;
-		fmt->fmt.meta.buffersize = call_session_op(core, buffer_size,
-				inst, MSM_VIDC_BUF_INPUT_META);
-		inst->buffers.input_meta.min_count =
-				inst->buffers.input.min_count;
-		inst->buffers.input_meta.extra_count =
-				inst->buffers.input.extra_count;
-		inst->buffers.input_meta.actual_count =
-				inst->buffers.input.actual_count;
-		inst->buffers.input_meta.size = fmt->fmt.meta.buffersize;
+		if (is_input_meta_enabled(inst)) {
+			fmt->fmt.meta.buffersize = call_session_op(core,
+				buffer_size, inst, MSM_VIDC_BUF_INPUT_META);
+			inst->buffers.input_meta.min_count =
+					inst->buffers.input.min_count;
+			inst->buffers.input_meta.extra_count =
+					inst->buffers.input.extra_count;
+			inst->buffers.input_meta.actual_count =
+					inst->buffers.input.actual_count;
+			inst->buffers.input_meta.size = fmt->fmt.meta.buffersize;
+		} else {
+			fmt->fmt.meta.buffersize = 0;
+			inst->buffers.input_meta.min_count = 0;
+			inst->buffers.input_meta.extra_count = 0;
+			inst->buffers.input_meta.actual_count = 0;
+			inst->buffers.input_meta.size = 0;
+		}
 		s_vpr_h(inst->sid,
 			"%s: input meta: size %d min_count %d extra_count %d\n",
 			__func__, fmt->fmt.meta.buffersize,
@@ -1623,15 +1647,23 @@ int msm_vdec_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
 		fmt = &inst->fmts[OUTPUT_META_PORT];
 		fmt->type = OUTPUT_META_PLANE;
 		fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC;
-		fmt->fmt.meta.buffersize = call_session_op(core, buffer_size,
-				inst, MSM_VIDC_BUF_OUTPUT_META);
-		inst->buffers.output_meta.min_count =
-				inst->buffers.output.min_count;
-		inst->buffers.output_meta.extra_count =
-				inst->buffers.output.extra_count;
-		inst->buffers.output_meta.actual_count =
-				inst->buffers.output.actual_count;
-		inst->buffers.output_meta.size = fmt->fmt.meta.buffersize;
+		if (is_output_meta_enabled(inst)) {
+			fmt->fmt.meta.buffersize = call_session_op(core,
+				buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META);
+			inst->buffers.output_meta.min_count =
+					inst->buffers.output.min_count;
+			inst->buffers.output_meta.extra_count =
+					inst->buffers.output.extra_count;
+			inst->buffers.output_meta.actual_count =
+					inst->buffers.output.actual_count;
+			inst->buffers.output_meta.size = fmt->fmt.meta.buffersize;
+		} else {
+			fmt->fmt.meta.buffersize = 0;
+			inst->buffers.output_meta.min_count = 0;
+			inst->buffers.output_meta.extra_count = 0;
+			inst->buffers.output_meta.actual_count = 0;
+			inst->buffers.output_meta.size = 0;
+		}
 		s_vpr_h(inst->sid,
 			"%s: output meta: size %d min_count %d extra_count %d\n",
 			__func__, fmt->fmt.meta.buffersize,

+ 50 - 18
driver/vidc/src/msm_venc.c

@@ -729,6 +729,14 @@ int msm_venc_start_input(struct msm_vidc_inst *inst)
 	core = inst->core;
 	s_vpr_h(inst->sid, "%s()\n", __func__);
 
+	if (is_input_meta_enabled(inst) &&
+		!inst->vb2q[INPUT_META_PORT].streaming) {
+		s_vpr_e(inst->sid,
+			"%s: Meta port must be streamed on before data port\n",
+			__func__);
+		goto error;
+	}
+
 	//rc = msm_vidc_check_session_supported(inst);
 	if (rc)
 		goto error;
@@ -836,6 +844,14 @@ int msm_venc_start_output(struct msm_vidc_inst *inst)
 		return -EINVAL;
 	}
 
+	if (is_output_meta_enabled(inst) &&
+		!inst->vb2q[OUTPUT_META_PORT].streaming) {
+		s_vpr_e(inst->sid,
+			"%s: Meta port must be streamed on before data port\n",
+			__func__);
+		goto error;
+	}
+
 	rc = msm_venc_set_output_properties(inst);
 	if (rc)
 		goto error;
@@ -950,15 +966,23 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
 		fmt = &inst->fmts[INPUT_META_PORT];
 		fmt->type = INPUT_META_PLANE;
 		fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC;
-		fmt->fmt.meta.buffersize = call_session_op(core, buffer_size,
-				inst, MSM_VIDC_BUF_INPUT_META);
-		inst->buffers.input_meta.min_count =
-				inst->buffers.input.min_count;
-		inst->buffers.input_meta.extra_count =
-				inst->buffers.input.extra_count;
-		inst->buffers.input_meta.actual_count =
-				inst->buffers.input.actual_count;
-		inst->buffers.input_meta.size = fmt->fmt.meta.buffersize;
+		if (is_input_meta_enabled(inst)) {
+			fmt->fmt.meta.buffersize = call_session_op(core,
+				buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META);
+			inst->buffers.input_meta.min_count =
+					inst->buffers.input.min_count;
+			inst->buffers.input_meta.extra_count =
+					inst->buffers.input.extra_count;
+			inst->buffers.input_meta.actual_count =
+					inst->buffers.input.actual_count;
+			inst->buffers.input_meta.size = fmt->fmt.meta.buffersize;
+		} else {
+			fmt->fmt.meta.buffersize = 0;
+			inst->buffers.input_meta.min_count = 0;
+			inst->buffers.input_meta.extra_count = 0;
+			inst->buffers.input_meta.actual_count = 0;
+			inst->buffers.input_meta.size = 0;
+		}
 		s_vpr_h(inst->sid,
 			"%s: input meta: size %d min_count %d extra_count %d\n",
 			__func__, fmt->fmt.meta.buffersize,
@@ -1036,15 +1060,23 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
 		fmt = &inst->fmts[OUTPUT_META_PORT];
 		fmt->type = OUTPUT_META_PLANE;
 		fmt->fmt.meta.dataformat = V4L2_META_FMT_VIDC;
-		fmt->fmt.meta.buffersize = call_session_op(core, buffer_size,
-				inst, MSM_VIDC_BUF_OUTPUT_META);
-		inst->buffers.output_meta.min_count =
-				inst->buffers.output.min_count;
-		inst->buffers.output_meta.extra_count =
-				inst->buffers.output.extra_count;
-		inst->buffers.output_meta.actual_count =
-				inst->buffers.output.actual_count;
-		inst->buffers.output_meta.size = fmt->fmt.meta.buffersize;
+		if (is_output_meta_enabled(inst)) {
+			fmt->fmt.meta.buffersize = call_session_op(core,
+				buffer_size, inst, MSM_VIDC_BUF_OUTPUT_META);
+			inst->buffers.output_meta.min_count =
+					inst->buffers.output.min_count;
+			inst->buffers.output_meta.extra_count =
+					inst->buffers.output.extra_count;
+			inst->buffers.output_meta.actual_count =
+					inst->buffers.output.actual_count;
+			inst->buffers.output_meta.size = fmt->fmt.meta.buffersize;
+		} else {
+			fmt->fmt.meta.buffersize = 0;
+			inst->buffers.output_meta.min_count = 0;
+			inst->buffers.output_meta.extra_count = 0;
+			inst->buffers.output_meta.actual_count = 0;
+			inst->buffers.output_meta.size = 0;
+		}
 		s_vpr_h(inst->sid,
 			"%s: output meta: size %d min_count %d extra_count %d\n",
 			__func__, fmt->fmt.meta.buffersize,

+ 28 - 4
driver/vidc/src/msm_vidc_control.c

@@ -133,14 +133,38 @@ static const char *msm_vidc_get_priv_ctrl_name(u32 sid, u32 control_id)
 		return "Blur Resolution";
 	case V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_CUSTOM_MATRIX:
 		return "CSC Custom Matrix";
-	case V4L2_CID_MPEG_VIDC_METADATA_ENABLE:
-		return "Metadata Enable";
-	case V4L2_CID_MPEG_VIDC_METADATA_DISABLE:
-		return "Metadata Disable";
 	case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY:
 		return "H264 Display Delay";
 	case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE:
 		return "H264 Display Delay Enable";
+	case V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS:
+		return "LTR Mark Use Details Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL:
+		return "Seq Header NAL Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR:
+		return "DPB Luma-Chroma MISR Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR:
+		return "OPB Luma-Chroma MISR Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_INTERLACE:
+		return "Interlace Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT:
+		return "Concealed MB Count Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO:
+		return "Historgram Info Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR:
+		return "SEI Mastering Display Color Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL:
+		return "SEI Content Lighting Level Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS:
+		return "HDR10PLUS Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS:
+		return "EVA Stats Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG:
+		return "Buffer Tag Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT:
+		return "Subframe Output Metadata";
+	case V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO:
+		return "ROI Info Metadata";
 	default:
 		s_vpr_e(sid, "%s: ctrl name not available for ctrl id %#x\n",
 			__func__, control_id);

+ 7 - 0
driver/vidc/src/msm_vidc_driver.c

@@ -833,6 +833,13 @@ int msm_vidc_queue_buffer(struct msm_vidc_inst *inst, struct vb2_buffer *vb2)
 
 	print_vidc_buffer(VIDC_HIGH, "qbuf", inst, buf);
 	meta = get_meta_buffer(inst, buf);
+	if (!meta) {
+		if (is_meta_enabled(inst, buf->type)) {
+			print_vidc_buffer(VIDC_ERR, "missing meta for",
+				inst, buf);
+			return -EINVAL;
+		}
+	}
 	rc = venus_hfi_queue_buffer(inst, buf, meta);
 	if (rc)
 		return rc;

+ 27 - 2
include/uapi/vidc/media/v4l2_vidc_extensions.h

@@ -71,10 +71,35 @@ enum v4l2_mpeg_vidc_blur_types {
 	(V4L2_CID_MPEG_VIDC_BASE + 0x12)
 
 /* various Metadata - encoder & decoder */
-#define V4L2_CID_MPEG_VIDC_METADATA_ENABLE                                    \
+#define V4L2_CID_MPEG_VIDC_METADATA_LTR_MARK_USE_DETAILS                      \
 	(V4L2_CID_MPEG_VIDC_BASE + 0x13)
-#define V4L2_CID_MPEG_VIDC_METADATA_DISABLE                                   \
+#define V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL                            \
 	(V4L2_CID_MPEG_VIDC_BASE + 0x14)
+#define V4L2_CID_MPEG_VIDC_METADATA_DPB_LUMA_CHROMA_MISR                      \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x15)
+#define V4L2_CID_MPEG_VIDC_METADATA_OPB_LUMA_CHROMA_MISR                      \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x16)
+#define V4L2_CID_MPEG_VIDC_METADATA_INTERLACE                                 \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x17)
+#define V4L2_CID_MPEG_VIDC_METADATA_CONCEALED_MB_COUNT                         \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x18)
+#define V4L2_CID_MPEG_VIDC_METADATA_HISTOGRAM_INFO                            \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x19)
+#define V4L2_CID_MPEG_VIDC_METADATA_SEI_MASTERING_DISPLAY_COLOUR              \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1A)
+#define V4L2_CID_MPEG_VIDC_METADATA_SEI_CONTENT_LIGHT_LEVEL                   \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1B)
+#define V4L2_CID_MPEG_VIDC_METADATA_HDR10PLUS                                 \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1C)
+#define V4L2_CID_MPEG_VIDC_METADATA_EVA_STATS                                 \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1D)
+#define V4L2_CID_MPEG_VIDC_METADATA_BUFFER_TAG                                \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1E)
+#define V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT                           \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x1F)
+#define V4L2_CID_MPEG_VIDC_METADATA_ROI_INFO                                  \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x20)
+
 enum v4l2_mpeg_vidc_metapayload_header_flags {
 	METADATA_FLAGS_NONE             = 0,
 	METADATA_FLAGS_TOP_FIELD        = (1 << 0),