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>
Цей коміт міститься в:
Manikanta Kanamarlapudi
2023-01-31 22:58:02 +05:30
джерело faf2b173fe
коміт 454e91b014
3 змінених файлів з 12 додано та 9 видалено

Переглянути файл

@@ -2844,12 +2844,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__);

Переглянути файл

@@ -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.

Переглянути файл

@@ -678,7 +678,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;