diff options
author | JohnnLee <johnnlee@google.com> | 2023-02-10 12:40:14 +0800 |
---|---|---|
committer | JohnnLee <johnnlee@google.com> | 2023-02-10 12:40:25 +0800 |
commit | ef619e539fbd7a3adc26f470fadfb56e36a1188d (patch) | |
tree | b8dfc38b770f6fdaee18cdb32e61c1b8b2ffaa7d | |
parent | e4187f63654ad04775a7b1558c46e13f50cbd15a (diff) | |
parent | 38e60daa0651919e6aca44f09977caada11430d4 (diff) | |
download | video-driver-ef619e539fbd7a3adc26f470fadfb56e36a1188d.tar.gz |
Merge branch 'LA.UM.9.12.C10.11.00.00.840.517' via branch 'qcom-msm-4.19-7250' into android-msm-pixel-4.19android-u-beta-2_r0.1android-u-beta-2.1_r0.1android-msm-redbull-4.19-u-beta2
Bug: 268575472
Change-Id: Ibf2d4e4a92f8a581498b29a8958cef5895616d43
Signed-off-by: JohnnLee <johnnlee@google.com>
-rw-r--r-- | msm/vidc/msm_venc.c | 32 | ||||
-rw-r--r-- | msm/vidc/vidc_hfi_helper.h | 2 |
2 files changed, 34 insertions, 0 deletions
diff --git a/msm/vidc/msm_venc.c b/msm/vidc/msm_venc.c index 50a27b0..b96a08a 100644 --- a/msm/vidc/msm_venc.c +++ b/msm/vidc/msm_venc.c @@ -1003,6 +1003,15 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = { ), .qmenu = roi_map_type, }, + { + .id = V4L2_CID_MPEG_VIDC_ENABLE_ONLY_BASE_LAYER_IR, + .name = "Enable Only Base Layer IR", + .type = V4L2_CTRL_TYPE_BOOLEAN, + .minimum = V4L2_MPEG_MSM_VIDC_DISABLE, + .maximum = V4L2_MPEG_MSM_VIDC_ENABLE, + .default_value = V4L2_MPEG_MSM_VIDC_DISABLE, + .step = 1, + }, }; #define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls) @@ -1971,6 +1980,7 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDC_VENC_BITRATE_SAVINGS: case V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET: case V4L2_CID_MPEG_VIDC_SUPERFRAME: + case V4L2_CID_MPEG_VIDC_ENABLE_ONLY_BASE_LAYER_IR: s_vpr_h(sid, "Control set: ID : 0x%x Val : %d\n", ctrl->id, ctrl->val); break; @@ -3266,6 +3276,9 @@ int msm_venc_set_intra_refresh_mode(struct msm_vidc_inst *inst) struct v4l2_ctrl *ctrl = NULL; struct hfi_intra_refresh intra_refresh; struct v4l2_format *f; + struct hfi_enable enable; + struct v4l2_ctrl *layer = NULL; + struct v4l2_ctrl *max_layer = NULL; if (!inst || !inst->core) { d_vpr_e("%s: invalid params %pK\n", __func__, inst); @@ -3277,6 +3290,13 @@ int msm_venc_set_intra_refresh_mode(struct msm_vidc_inst *inst) inst->rc_type == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR)) return 0; + /* Check for base layer only intra refresh in case of multiple layers */ + layer = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER); + max_layer = get_ctrl(inst, + V4L2_CID_MPEG_VIDC_VIDEO_HEVC_MAX_HIER_CODING_LAYER); + ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_ENABLE_ONLY_BASE_LAYER_IR); + enable.enable = !!ctrl->val; + intra_refresh.mode = HFI_INTRA_REFRESH_RANDOM; ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDC_VIDEO_INTRA_REFRESH_RANDOM); @@ -3301,6 +3321,18 @@ int msm_venc_set_intra_refresh_mode(struct msm_vidc_inst *inst) if (!intra_refresh.mbs) { intra_refresh.mode = HFI_INTRA_REFRESH_NONE; intra_refresh.mbs = 0; + } else { + if (enable.enable && layer->val && max_layer->val) { + s_vpr_h(inst->sid, "%s: Enable only base layer IR:%d\n", + __func__, enable.enable); + rc = call_hfi_op(hdev, session_set_property, + inst->session, + HFI_PROPERTY_PARAM_ENABLE_ONLY_BASE_LAYER_IR, + &enable, sizeof(enable)); + if (rc) + s_vpr_e(inst->sid, + "%s: set property failed\n", __func__); + } } s_vpr_h(inst->sid, "%s: %d %d\n", __func__, diff --git a/msm/vidc/vidc_hfi_helper.h b/msm/vidc/vidc_hfi_helper.h index 1448d4a..c0e9708 100644 --- a/msm/vidc/vidc_hfi_helper.h +++ b/msm/vidc/vidc_hfi_helper.h @@ -352,6 +352,8 @@ struct hfi_buffer_info { (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x039) #define HFI_PROPERTY_PARAM_HEVC_PPS_CB_CR_OFFSET \ (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x040) +#define HFI_PROPERTY_PARAM_ENABLE_ONLY_BASE_LAYER_IR \ + (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x041) #define HFI_PROPERTY_CONFIG_VENC_COMMON_START \ (HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000) |