From ca17de823f14307056f41f826dc69109bb4f2bab Mon Sep 17 00:00:00 2001 From: Santhosh Behara Date: Thu, 20 May 2021 19:50:19 +0530 Subject: [PATCH] msm: vidc: Add support for encoder complexity Add support for encoder complexity handling. Enable lowpower mode if the complexity is 0. Change-Id: Ife290b377c844e5b1d3be93b2509c787f8e05c59 Signed-off-by: Santhosh Behara --- include/uapi/vidc/media/msm_vidc_utils.h | 2 ++ msm/vidc/msm_venc.c | 15 +++++++++++++++ msm/vidc/msm_vidc_clocks.c | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/include/uapi/vidc/media/msm_vidc_utils.h b/include/uapi/vidc/media/msm_vidc_utils.h index e45ffa06f231..73ff48f86ca4 100644 --- a/include/uapi/vidc/media/msm_vidc_utils.h +++ b/include/uapi/vidc/media/msm_vidc_utils.h @@ -261,6 +261,8 @@ enum v4l2_mpeg_vidc_video_bitrate_savings_type { (V4L2_CID_MPEG_MSM_VIDC_BASE + 135) #define V4L2_CID_MPEG_VIDC_VIDEO_DISABLE_TIMESTAMP_REORDER \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 136) +#define V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 137) #define V4L2_CID_MPEG_VIDC_VIDEO_UNKNOWN \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 0xFFF) diff --git a/msm/vidc/msm_venc.c b/msm/vidc/msm_venc.c index bc15a1383ed4..68a9118d6c4f 100644 --- a/msm/vidc/msm_venc.c +++ b/msm/vidc/msm_venc.c @@ -596,6 +596,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { .step = 1, .menu_skip_mask = 0, }, + { + .id = V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY, + .name = "Encoder complexity", + .type = V4L2_CTRL_TYPE_INTEGER, + .minimum = 0, + .maximum = 100, + .default_value = 100, + .step = 1, + .qmenu = NULL, + }, { .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE, .name = "Set Hier coding type", @@ -1976,6 +1986,11 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDC_VENC_BITRATE_BOOST: inst->boost_enabled = true; break; + case V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY: + if (is_realtime_session(inst)) { + s_vpr_h(sid, "Client is setting complexity for RT session\n"); + } + break; case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE: inst->entropy_mode = msm_comm_v4l2_to_hfi( V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE, diff --git a/msm/vidc/msm_vidc_clocks.c b/msm/vidc/msm_vidc_clocks.c index 68841ff06206..7ddf39a1ba70 100644 --- a/msm/vidc/msm_vidc_clocks.c +++ b/msm/vidc/msm_vidc_clocks.c @@ -1434,6 +1434,7 @@ static inline int msm_vidc_power_save_mode_enable(struct msm_vidc_inst *inst, void *pdata = NULL; struct hfi_device *hdev = NULL; u32 hfi_perf_mode; + struct v4l2_ctrl *ctrl; hdev = inst->core->device; if (inst->session_type != MSM_VIDC_ENCODER) { @@ -1443,6 +1444,9 @@ static inline int msm_vidc_power_save_mode_enable(struct msm_vidc_inst *inst, return 0; } + ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VENC_COMPLEXITY); + if (!is_realtime_session(inst) && !ctrl->val) + enable = true; prop_id = HFI_PROPERTY_CONFIG_VENC_PERF_MODE; hfi_perf_mode = enable ? HFI_VENC_PERFMODE_POWER_SAVE : HFI_VENC_PERFMODE_MAX_QUALITY;