msm: vidc: enable DCVS for non realtime sessions

- enable dcvs for non-realtime sessions (both encode/decode)
- enable input queuing rate power scaling for non-realtime encoder

Change-Id: Ie0fe2723837dbfc1cb63b693fc657f2d8df7c573
Signed-off-by: Manikanta Kanamarlapudi <quic_kmanikan@quicinc.com>
This commit is contained in:
Manikanta Kanamarlapudi
2023-01-31 22:58:02 +05:30
parent faf2b173fe
commit 454e91b014
3 changed files with 12 additions and 9 deletions

View File

@@ -2844,12 +2844,6 @@ void msm_vidc_allow_dcvs(struct msm_vidc_inst *inst)
goto exit; 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); allow = !is_critical_priority_session(inst);
if (!allow) { if (!allow) {
i_vpr_h(inst, "%s: critical priority session\n", __func__); i_vpr_h(inst, "%s: critical priority session\n", __func__);

View File

@@ -293,7 +293,7 @@ int msm_vidc_scale_buses(struct msm_vidc_inst *inst)
/* scale bitrate if operating rate is larger than frame rate */ /* scale bitrate if operating rate is larger than frame rate */
frame_rate = msm_vidc_get_frame_rate(inst); 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) if (frame_rate && operating_rate && operating_rate > frame_rate)
vote_data->bitrate = (vote_data->bitrate / frame_rate) * operating_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); frame_rate = msm_vidc_get_frame_rate(inst);
operating_rate = msm_vidc_get_operating_rate(inst); operating_rate = msm_vidc_get_operating_rate(inst);
fps = max(frame_rate, operating_rate); 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%, * when buffer detected fps is more than client set value by 12.5%,
* utilize buffer detected fps to scale clock. * utilize buffer detected fps to scale clock.

View File

@@ -678,7 +678,7 @@ void msm_vb2_buf_queue(struct vb2_buffer *vb2)
} }
inst->last_qbuf_time_ns = ktime_ns; 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)); rc = msm_vidc_update_input_rate(inst, div_u64(ktime_ns, 1000));
if (rc) if (rc)
goto unlock; goto unlock;