소스 검색

video-driver: disable dynamic low latency

Dynamic low latency causes decoder input PSC triggered
for every IDR frame, leading to clock increasing.
And this also causes power higher
for VT call. Thus, need the following changes:

1. Disable dynamic low latency when low latency mode
is enabled;
2. DO NOT allow config low latency mode after
stream on.

Change-Id: Ia57f4c75617214b0352b263425ad9b445ff95524
Signed-off-by: Zhongbo Shi <[email protected]>
Zhongbo Shi 3 년 전
부모
커밋
afa424d529
4개의 변경된 파일3개의 추가작업 그리고 40개의 파일을 삭제
  1. 1 1
      driver/platform/waipio/src/msm_vidc_waipio.c
  2. 0 1
      driver/vidc/inc/msm_vidc_control.h
  3. 1 9
      driver/vidc/src/msm_vdec.c
  4. 1 29
      driver/vidc/src/msm_vidc_control.c

+ 1 - 1
driver/platform/waipio/src/msm_vidc_waipio.c

@@ -518,7 +518,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
 		1, V4L2_MPEG_MSM_VIDC_DISABLE,
 		V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST,
 		HFI_PROP_SEQ_CHANGE_AT_SYNC_FRAME,
-		CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
+		CAP_FLAG_INPUT_PORT},
 
 	{LTR_COUNT, ENC, H264|HEVC,
 		0, 2, 1, 0,

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

@@ -102,7 +102,6 @@ int msm_vidc_set_csc_custom_matrix(void *instance,
 	enum msm_vidc_inst_capability_type cap_id);
 int msm_vidc_set_session_priority(void* instance,
 	enum msm_vidc_inst_capability_type cap_id);
-int msm_vidc_set_seq_change_at_sync_frame(void *instance);
 int msm_vidc_set_level(void *instance,
 	enum msm_vidc_inst_capability_type cap_id);
 int msm_vidc_set_s32(void *instance,

+ 1 - 9
driver/vidc/src/msm_vdec.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020-2022, The Linux Foundation. All rights reserved.
  */
 
 #include <media/v4l2_vidc_extensions.h>
@@ -967,10 +967,6 @@ static int msm_vdec_set_output_properties(struct msm_vidc_inst *inst)
 	if (rc)
 		return rc;
 
-	rc = msm_vidc_set_seq_change_at_sync_frame(inst);
-	if (rc)
-		return rc;
-
 	return rc;
 }
 
@@ -2371,10 +2367,6 @@ int msm_vdec_process_cmd(struct msm_vidc_inst *inst, u32 cmd)
 		msm_vidc_allow_dcvs(inst);
 		msm_vidc_power_data_reset(inst);
 
-		rc = msm_vidc_set_seq_change_at_sync_frame(inst);
-		if (rc)
-			return rc;
-
 		/* allocate and queue extra dpb buffers */
 		rc = msm_vdec_alloc_and_queue_additional_dpb_buffers(inst);
 		if (rc)

+ 1 - 29
driver/vidc/src/msm_vidc_control.c

@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
- * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2020-2022, The Linux Foundation. All rights reserved.
  */
 
 #include "msm_vidc_control.h"
@@ -963,14 +963,6 @@ int msm_v4l2_op_s_ctrl(struct v4l2_ctrl *ctrl)
 		goto exit;
 	}
 
-	if (ctrl->id == V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST) {
-		if (ctrl->val == V4L2_MPEG_MSM_VIDC_ENABLE) {
-			rc = msm_vidc_set_seq_change_at_sync_frame(inst);
-			if (rc)
-				return rc;
-		}
-	}
-
 exit:
 	if (rc)
 		msm_vidc_free_capabililty_list(inst, CHILD_LIST | FW_LIST);
@@ -3881,23 +3873,3 @@ int msm_vidc_set_pipe(void *instance,
 
 	return rc;
 }
-
-int msm_vidc_set_seq_change_at_sync_frame(void *instance)
-{
-	int rc = 0;
-	u32 payload;
-	struct msm_vidc_inst* inst = (struct msm_vidc_inst*)instance;
-
-	if (!inst || !inst->capabilities) {
-		d_vpr_e("%s: invalid params\n", __func__);
-		return -EINVAL;
-	}
-
-	payload = inst->capabilities->cap[LOWLATENCY_MODE].value;
-	rc = msm_vidc_packetize_control(inst, LOWLATENCY_MODE, HFI_PAYLOAD_U32,
-		&payload, sizeof(u32), __func__);
-	if (rc)
-		return rc;
-
-	return rc;
-}