From 3b67d6b2f94fecfd45936f546400a42d0ffb8ed4 Mon Sep 17 00:00:00 2001 From: Vikash Garodia Date: Thu, 1 Jul 2021 14:48:53 +0530 Subject: [PATCH] driver: video: Reset sequence change request property only during psc handling Sequence change property would configure firmware to generate psc at every key frame. This property is configured based on low latency settings from the client. For cases, when client sets low latency from 1 to 0, the hardware would continue to run in direct mode (low latency mode). Since the sequence change property gets disabled, there would not be psc from firmware to change the mode to 2 stage. Hence the sequence change property to be reset only during psc handling. Change-Id: Ie8e17e44c921f036763f6f390397d4d812120e23 Signed-off-by: Vikash Garodia --- driver/platform/waipio/src/msm_vidc_waipio.c | 4 +--- driver/vidc/inc/msm_vidc_control.h | 3 +-- driver/vidc/src/msm_vdec.c | 6 +++++- driver/vidc/src/msm_vidc_control.c | 13 ++++++++++--- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index ddf870c667..72f0cf934f 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -504,9 +504,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, - {0}, {0}, - NULL, msm_vidc_set_seq_change_at_sync_frame}, + CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED}, {LTR_COUNT, ENC, H264|HEVC, 0, 2, 1, 0, diff --git a/driver/vidc/inc/msm_vidc_control.h b/driver/vidc/inc/msm_vidc_control.h index dd35e7534d..336ca4b1e0 100644 --- a/driver/vidc/inc/msm_vidc_control.h +++ b/driver/vidc/inc/msm_vidc_control.h @@ -98,8 +98,7 @@ 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, - 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, diff --git a/driver/vidc/src/msm_vdec.c b/driver/vidc/src/msm_vdec.c index 630dde4aab..78f704367f 100644 --- a/driver/vidc/src/msm_vdec.c +++ b/driver/vidc/src/msm_vdec.c @@ -762,7 +762,7 @@ 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, LOWLATENCY_MODE); + rc = msm_vidc_set_seq_change_at_sync_frame(inst); if (rc) return rc; @@ -2044,6 +2044,10 @@ int msm_vdec_process_cmd(struct msm_vidc_inst *inst, u32 cmd) if (rc) return rc; + rc = msm_vidc_set_seq_change_at_sync_frame(inst); + if (rc) + return rc; + rc = venus_hfi_session_command(inst, HFI_CMD_RESUME, port, diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index de343daf9c..56e2a2e9d6 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -808,6 +808,14 @@ 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); @@ -3619,8 +3627,7 @@ int msm_vidc_set_pipe(void *instance, return rc; } -int msm_vidc_set_seq_change_at_sync_frame(void* instance, - enum msm_vidc_inst_capability_type cap_id) +int msm_vidc_set_seq_change_at_sync_frame(void *instance) { int rc = 0; u32 payload; @@ -3632,7 +3639,7 @@ int msm_vidc_set_seq_change_at_sync_frame(void* instance, } payload = inst->capabilities->cap[LOWLATENCY_MODE].value; - rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32, + rc = msm_vidc_packetize_control(inst, LOWLATENCY_MODE, HFI_PAYLOAD_U32, &payload, sizeof(u32), __func__); if (rc) return rc;