From: Geert Uytterhoeven Date: Thu, 30 Jun 2022 12:41:48 +0000 (+0200) Subject: modetest: fix mode_vrefresh() for interlace/dblscan/vscan X-Git-Tag: libdrm-2.4.117~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ea5237e549257c47b0edeb445bd63e089f278c0b;p=platform%2Fupstream%2Flibdrm.git modetest: fix mode_vrefresh() for interlace/dblscan/vscan mode_vrefresh() does not take into account interlaced, doublescan, and multiscan modes, leading to incorrect refresh rates. Fix this, based on drm_mode_vrefresh() in Linux. Signed-off-by: Geert Uytterhoeven --- diff --git a/tests/modetest/modetest.c b/tests/modetest/modetest.c index e714818..4e00bed 100644 --- a/tests/modetest/modetest.c +++ b/tests/modetest/modetest.c @@ -138,8 +138,19 @@ static inline int64_t U642I64(uint64_t val) static float mode_vrefresh(drmModeModeInfo *mode) { - return mode->clock * 1000.00 - / (mode->htotal * mode->vtotal); + unsigned int num, den; + + num = mode->clock; + den = mode->htotal * mode->vtotal; + + if (mode->flags & DRM_MODE_FLAG_INTERLACE) + num *= 2; + if (mode->flags & DRM_MODE_FLAG_DBLSCAN) + den *= 2; + if (mode->vscan > 1) + den *= mode->vscan; + + return num * 1000.00 / den; } #define bit_name_fn(res) \