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 <andy.nichols@qt.io>
This commit is contained in:
parent
bca297030c
commit
372f5e1fae
@ -174,6 +174,7 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
|
|||||||
|
|
||||||
OutputConfiguration configuration;
|
OutputConfiguration configuration;
|
||||||
QSize configurationSize;
|
QSize configurationSize;
|
||||||
|
int configurationRefresh = 0;
|
||||||
drmModeModeInfo configurationModeline;
|
drmModeModeInfo configurationModeline;
|
||||||
|
|
||||||
auto userConfig = m_screenConfig->outputSettings();
|
auto userConfig = m_screenConfig->outputSettings();
|
||||||
@ -187,6 +188,10 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
|
|||||||
configuration = OutputConfigPreferred;
|
configuration = OutputConfigPreferred;
|
||||||
} else if (mode == "current") {
|
} else if (mode == "current") {
|
||||||
configuration = OutputConfigCurrent;
|
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) {
|
} else if (sscanf(mode.constData(), "%dx%d", &configurationSize.rwidth(), &configurationSize.rheight()) == 2) {
|
||||||
configuration = OutputConfigMode;
|
configuration = OutputConfigMode;
|
||||||
} else if (parseModeline(mode, &configurationModeline)) {
|
} else if (parseModeline(mode, &configurationModeline)) {
|
||||||
@ -256,9 +261,11 @@ QPlatformScreen *QKmsDevice::createScreenForConnector(drmModeResPtr resources,
|
|||||||
for (int i = modes.size() - 1; i >= 0; i--) {
|
for (int i = modes.size() - 1; i >= 0; i--) {
|
||||||
const drmModeModeInfo &m = modes.at(i);
|
const drmModeModeInfo &m = modes.at(i);
|
||||||
|
|
||||||
if (configuration == OutputConfigMode &&
|
if (configuration == OutputConfigMode
|
||||||
m.hdisplay == configurationSize.width() &&
|
&& m.hdisplay == configurationSize.width()
|
||||||
m.vdisplay == configurationSize.height()) {
|
&& m.vdisplay == configurationSize.height()
|
||||||
|
&& (!configurationRefresh || m.vrefresh == uint32_t(configurationRefresh)))
|
||||||
|
{
|
||||||
configured = i;
|
configured = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user