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:
@@ -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__);
|
||||||
|
@@ -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.
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user