Bläddra i källkod

Merge "video: driver: Add encoder complexity to decide power mode"

qctecmdr 4 år sedan
förälder
incheckning
71bb59790c

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

@@ -1536,6 +1536,10 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
 		1, V4L2_MPEG_MSM_VIDC_DISABLE,
 		V4L2_CID_MPEG_VIDC_METADATA_SUBFRAME_OUTPUT,
 		HFI_PROP_SUBFRAME_OUTPUT},
+	{COMPLEXITY, ENC, H264 | HEVC,
+		0, 100,
+		1, 100,
+		V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY},
 };
 
 /*

+ 8 - 0
driver/variant/iris2/src/msm_vidc_iris2.c

@@ -1109,6 +1109,14 @@ int msm_vidc_decide_quality_mode_iris2(struct msm_vidc_inst* inst)
 	max_hq_mbpf = core->capabilities[MAX_MBPF_HQ].value;;
 	max_hq_mbps = core->capabilities[MAX_MBPS_HQ].value;;
 
+	/* NRT session to have max quality unless client configures least complexity */
+	if (!is_realtime_session(inst) && mbpf <= max_hq_mbpf) {
+		mode = MSM_VIDC_MAX_QUALITY_MODE;
+		if (!capability->cap[COMPLEXITY].value)
+			mode = MSM_VIDC_POWER_SAVE_MODE;
+		goto exit;
+	}
+
 	/* Power saving always disabled for CQ and LOSSLESS RC modes. */
 	if (capability->cap[LOSSLESS].value ||
 		(mbpf <= max_hq_mbpf && mbps <= max_hq_mbps))

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

@@ -463,6 +463,7 @@ enum msm_vidc_inst_capability_type {
 	META_ENC_QP_METADATA,
 	META_ROI_INFO,
 	META_DEC_QP_METADATA,
+	COMPLEXITY,
 	INST_CAP_MAX,
 };
 

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

@@ -182,6 +182,7 @@ static const struct msm_vidc_cap_name cap_name_arr[] = {
 	{META_ENC_QP_METADATA,           "META_ENC_QP_METADATA"       },
 	{META_ROI_INFO,                  "META_ROI_INFO"              },
 	{META_DEC_QP_METADATA,           "META_DEC_QP_METADATA"       },
+	{COMPLEXITY,                     "COMPLEXITY"                 },
 	{INST_CAP_MAX,                   "INST_CAP_MAX"               },
 };
 

+ 3 - 0
include/uapi/vidc/media/v4l2_vidc_extensions.h

@@ -134,6 +134,9 @@ enum v4l2_mpeg_vidc_blur_types {
 	(V4L2_CID_MPEG_VIDC_BASE + 0x2D)
 #define V4L2_CID_MPEG_VIDC_METADATA_DEC_QP_METADATA                           \
 	(V4L2_CID_MPEG_VIDC_BASE + 0x2E)
+/* Encoder Complexity control */
+#define V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY                                   \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x2F)
 
 /* Deprecate below controls once availble in gki and gsi bionic header */
 #ifndef V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID