From 372f5e1faeece85691bd0844b3871b5717d958c2 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Thu, 3 Aug 2017 12:14:41 +0200 Subject: kms: Add support for filtering based on vrefresh In addition to "mode": "1280x720", one can now also specify the vrefresh value: "mode": "1280x720@50". This way if there is both a 60 and 50 Hz variant, then it is now possible to choose the 50 Hz one. Task-number: QTBUG-62262 Change-Id: I9ca21c5a513621c83f2f5348c411d8d7c5492b3d Reviewed-by: Andy Nichols --- src/platformsupport/kmsconvenience/qkmsdevice.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/platformsupport/kmsconvenience/qkmsdevice.cpp') diff --git a/src/platformsupport/kmsconvenience/qkmsdevice.cpp b/src/platformsupport/kmsconvenience/qkmsdevice.cpp index c1edd384fe..d8eb2f11de 100644 --- a/src/platformsupport/kmsconvenience/qkmsdevice.cpp +++ b/src/platformsupport/kmsconvenience/qkmsdevice.cpp @@ -174,6 +174,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources, OutputConfiguration configuration; QSize configurationSize; + int configurationRefresh = 0; drmModeModeInfo configurationModeline; auto userConfig = m_screenConfig->outputSettings(); @@ -187,6 +188,10 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources, configuration = OutputConfigPreferred; } else if (mode == "current") { configuration = OutputConfigCurrent; + } else if (sscanf(mode.constData(), "%dx%d@%d", &configurationSize.rwidth(), &configurationSize.rheight(), + &configurationRefresh) == 3) + { + configuration = OutputConfigMode; } else if (sscanf(mode.constData(), "%dx%d", &configurationSize.rwidth(), &configurationSize.rheight()) == 2) { configuration = OutputConfigMode; } else if (parseModeline(mode, &configurationModeline)) { @@ -256,9 +261,11 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources, for (int i = modes.size() - 1; i >= 0; i--) { const drmModeModeInfo &m = modes.at(i); - if (configuration == OutputConfigMode && - m.hdisplay == configurationSize.width() && - m.vdisplay == configurationSize.height()) { + if (configuration == OutputConfigMode + && m.hdisplay == configurationSize.width() + && m.vdisplay == configurationSize.height() + && (!configurationRefresh || m.vrefresh == uint32_t(configurationRefresh))) + { configured = i; } -- cgit v1.2.3