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