From dc14fd4cd7345897f8e8fad0e6c1f844746caf37 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Fri, 10 Nov 2017 15:31:39 +0200 Subject: [PATCH] compositor-drm: move refresh rate computation Move it into to a new function. Following patches want to compute it elsewhere as well. No functional changes. Signed-off-by: Pekka Paalanen Reviewed-by: Ian Ray Reviewed-by: Daniel Stone --- libweston/compositor-drm.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c index 268394b..02e7877 100644 --- a/libweston/compositor-drm.c +++ b/libweston/compositor-drm.c @@ -3699,6 +3699,25 @@ destroy_sprites(struct drm_backend *b) drm_plane_destroy(plane); } +static uint32_t +drm_refresh_rate_mHz(const drmModeModeInfo *info) +{ + uint64_t refresh; + + /* Calculate higher precision (mHz) refresh rate */ + refresh = (info->clock * 1000000LL / info->htotal + + info->vtotal / 2) / info->vtotal; + + if (info->flags & DRM_MODE_FLAG_INTERLACE) + refresh *= 2; + if (info->flags & DRM_MODE_FLAG_DBLSCAN) + refresh /= 2; + if (info->vscan > 1) + refresh /= info->vscan; + + return refresh; +} + /** * Add a mode to output's mode list * @@ -3713,7 +3732,6 @@ static struct drm_mode * drm_output_add_mode(struct drm_output *output, const drmModeModeInfo *info) { struct drm_mode *mode; - uint64_t refresh; mode = malloc(sizeof *mode); if (mode == NULL) @@ -3723,18 +3741,7 @@ drm_output_add_mode(struct drm_output *output, const drmModeModeInfo *info) mode->base.width = info->hdisplay; mode->base.height = info->vdisplay; - /* Calculate higher precision (mHz) refresh rate */ - refresh = (info->clock * 1000000LL / info->htotal + - info->vtotal / 2) / info->vtotal; - - if (info->flags & DRM_MODE_FLAG_INTERLACE) - refresh *= 2; - if (info->flags & DRM_MODE_FLAG_DBLSCAN) - refresh /= 2; - if (info->vscan > 1) - refresh /= info->vscan; - - mode->base.refresh = refresh; + mode->base.refresh = drm_refresh_rate_mHz(info); mode->mode_info = *info; mode->blob_id = 0; -- 2.7.4