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;