diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index be60c2cdf4..6f77a9e517 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -2707,12 +2707,6 @@ void msm_vidc_allow_dcvs(struct msm_vidc_inst *inst) goto exit; } - allow = is_realtime_session(inst); - if (!allow) { - i_vpr_h(inst, "%s: non-realtime session\n", __func__); - goto exit; - } - allow = !is_critical_priority_session(inst); if (!allow) { i_vpr_h(inst, "%s: critical priority session\n", __func__); diff --git a/driver/vidc/src/msm_vidc_power.c b/driver/vidc/src/msm_vidc_power.c index 824f13484c..48ad7bd53f 100644 --- a/driver/vidc/src/msm_vidc_power.c +++ b/driver/vidc/src/msm_vidc_power.c @@ -293,7 +293,7 @@ int msm_vidc_scale_buses(struct msm_vidc_inst *inst) /* scale bitrate if operating rate is larger than frame rate */ frame_rate = msm_vidc_get_frame_rate(inst); - operating_rate = msm_vidc_get_frame_rate(inst); + operating_rate = inst->max_rate; if (frame_rate && operating_rate && operating_rate > frame_rate) vote_data->bitrate = (vote_data->bitrate / frame_rate) * operating_rate; @@ -575,7 +575,16 @@ int msm_vidc_scale_power(struct msm_vidc_inst *inst, bool scale_buses) frame_rate = msm_vidc_get_frame_rate(inst); operating_rate = msm_vidc_get_operating_rate(inst); fps = max(frame_rate, operating_rate); - if (is_decode_session(inst)) { + /* + * Consider input queuing rate power scaling in below scenarios + * decoder: non-realtime and realtime as well because client + * may not set the frame rate / operating rate and + * we need to rely on input queue rate + * encoder: non-realtime only, for realtime client is expected to + * queue input buffers at the set frame rate / operating rate + */ + if (is_decode_session(inst) || + (is_encode_session(inst) && !is_realtime_session(inst))) { /* * when buffer detected fps is more than client set value by 12.5%, * utilize buffer detected fps to scale clock. diff --git a/driver/vidc/src/msm_vidc_vb2.c b/driver/vidc/src/msm_vidc_vb2.c index 2f2efa68e9..26ce6916a0 100644 --- a/driver/vidc/src/msm_vidc_vb2.c +++ b/driver/vidc/src/msm_vidc_vb2.c @@ -669,7 +669,7 @@ void msm_vb2_buf_queue(struct vb2_buffer *vb2) } inst->last_qbuf_time_ns = ktime_ns; - if (is_decode_session(inst) && vb2->type == INPUT_MPLANE) { + if (vb2->type == INPUT_MPLANE) { rc = msm_vidc_update_input_rate(inst, div_u64(ktime_ns, 1000)); if (rc) goto unlock;