diff options
author | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-10 12:23:53 -0400 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2012-05-10 14:09:48 -0400 |
commit | c4621b07f6106c0c360ec5567387beb355e615ac (patch) | |
tree | b1207abe1bb23adeb7c10ef613a3bd7b84785a86 | |
parent | 34829dec713589518727c2e00bb1d2f2736e3763 (diff) |
compositor: Report refresh rates in mHz
We compute the higher resolution from the mode timing parameters.
-rw-r--r-- | src/compositor-drm.c | 17 | ||||
-rw-r--r-- | src/compositor-x11.c | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/compositor-drm.c b/src/compositor-drm.c index 7023a8c..2b670b3 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -885,7 +885,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo fprintf(stderr, "failed to set mode (%dx%d) %u Hz\n", drm_mode->base.width, drm_mode->base.height, - drm_mode->base.refresh); + drm_mode->base.refresh / 1000); ret = -1; } else { output->base.current->flags = 0; @@ -1090,6 +1090,7 @@ static int drm_output_add_mode(struct drm_output *output, drmModeModeInfo *info) { struct drm_mode *mode; + uint64_t refresh; mode = malloc(sizeof *mode); if (mode == NULL) @@ -1098,7 +1099,19 @@ drm_output_add_mode(struct drm_output *output, drmModeModeInfo *info) mode->base.flags = 0; mode->base.width = info->hdisplay; mode->base.height = info->vdisplay; - mode->base.refresh = info->vrefresh; + + /* 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->mode_info = *info; wl_list_insert(output->base.mode_list.prev, &mode->base.link); diff --git a/src/compositor-x11.c b/src/compositor-x11.c index 7fbcb5f..dca2324 100644 --- a/src/compositor-x11.c +++ b/src/compositor-x11.c @@ -383,7 +383,7 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y, WL_OUTPUT_MODE_CURRENT | WL_OUTPUT_MODE_PREFERRED; output->mode.width = width; output->mode.height = height; - output->mode.refresh = 60; + output->mode.refresh = 60000; wl_list_init(&output->base.mode_list); wl_list_insert(&output->base.mode_list, &output->mode.link); |