summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backends/native/meta-kms-utils.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/backends/native/meta-kms-utils.c b/src/backends/native/meta-kms-utils.c
index 11df09be8..1c58db83d 100644
--- a/src/backends/native/meta-kms-utils.c
+++ b/src/backends/native/meta-kms-utils.c
@@ -33,19 +33,18 @@
float
meta_calculate_drm_mode_refresh_rate (const drmModeModeInfo *drm_mode)
{
- float refresh = 0.0;
+ double numerator;
+ double denominator;
- if (drm_mode->htotal > 0 && drm_mode->vtotal > 0)
- {
- /* Calculate refresh rate in milliHz first for extra precision. */
- refresh = (drm_mode->clock * 1000000LL) / drm_mode->htotal;
- refresh += (drm_mode->vtotal / 2);
- refresh /= drm_mode->vtotal;
- if (drm_mode->vscan > 1)
- refresh /= drm_mode->vscan;
- refresh /= 1000.0;
- }
- return refresh;
+ if (drm_mode->htotal <= 0 || drm_mode->vtotal <= 0)
+ return 0.0;
+
+ numerator = drm_mode->clock * 1000.0;
+ denominator = (double) drm_mode->vtotal * drm_mode->htotal;
+ if (drm_mode->vscan > 1)
+ denominator *= drm_mode->vscan;
+
+ return numerator / denominator;
}
/**