From 459ecf6ee662cb60ea252f815db11011c094dbce Mon Sep 17 00:00:00 2001 From: Govindaraj Rajagopal Date: Wed, 28 Oct 2020 21:33:13 +0530 Subject: [PATCH] msm: vidc: tune dynamic framerate logic Some vp9 clips contains alt-ref frames(decode only) at periodic intervals and that particular frames buffer ts delta is very low(as low as 1 ms). So dynamic framerate calculation in driver is going for a toss. To mitigate above problem, taking avg framerate instead of max value. Change-Id: I0f320c6a24199efe28d357d53c7cc9ddf6fc3062 Signed-off-by: Govindaraj Rajagopal --- msm/vidc/msm_vidc_common.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/msm/vidc/msm_vidc_common.c b/msm/vidc/msm_vidc_common.c index 45f303aa2cf4..8add4f9684a2 100644 --- a/msm/vidc/msm_vidc_common.c +++ b/msm/vidc/msm_vidc_common.c @@ -7751,24 +7751,24 @@ u32 msm_comm_calc_framerate(struct msm_vidc_inst *inst, u32 msm_comm_get_max_framerate(struct msm_vidc_inst *inst) { struct msm_vidc_timestamps *node; - u32 max_framerate = 1 << 16; - int count = 0; + u64 avg_framerate = 0; + u32 count = 0; if (!inst) { d_vpr_e("%s: invalid parameters\n", __func__); - return max_framerate; + return (1 << 16); } mutex_lock(&inst->timestamps.lock); list_for_each_entry(node, &inst->timestamps.list, list) { count++; - max_framerate = max_framerate < node->framerate ? - node->framerate : max_framerate; + avg_framerate += node->framerate; } - s_vpr_l(inst->sid, "%s: fps %u, list size %d\n", - __func__, max_framerate, count); + avg_framerate = count ? (avg_framerate / count) : (1 << 16); + + s_vpr_l(inst->sid, "%s: fps %u, list size %d\n", __func__, avg_framerate, count); mutex_unlock(&inst->timestamps.lock); - return max_framerate; + return (u32)avg_framerate; } int msm_comm_fetch_ts_framerate(struct msm_vidc_inst *inst,