diff options
Diffstat (limited to 'src/platformsupport/eglconvenience')
-rw-r--r-- | src/platformsupport/eglconvenience/qeglconvenience.cpp | 27 | ||||
-rw-r--r-- | src/platformsupport/eglconvenience/qeglconvenience_p.h | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/src/platformsupport/eglconvenience/qeglconvenience.cpp b/src/platformsupport/eglconvenience/qeglconvenience.cpp index 011e2c2961..922455c96f 100644 --- a/src/platformsupport/eglconvenience/qeglconvenience.cpp +++ b/src/platformsupport/eglconvenience/qeglconvenience.cpp @@ -576,6 +576,33 @@ int q_screenDepthFromFb(int framebufferDevice) return depth; } +qreal q_refreshRateFromFb(int framebufferDevice) +{ + static qreal rate = 0; + +#ifdef Q_OS_LINUX + if (rate == 0) { + if (framebufferDevice != -1) { + struct fb_var_screeninfo vinfo; + if (ioctl(framebufferDevice, FBIOGET_VSCREENINFO, &vinfo) != -1) { + const quint64 quot = quint64(vinfo.left_margin + vinfo.right_margin + vinfo.xres + vinfo.hsync_len) + * quint64(vinfo.upper_margin + vinfo.lower_margin + vinfo.yres + vinfo.vsync_len) + * vinfo.pixclock; + if (quot) + rate = 1000000000000LLU / quot; + } else { + qWarning("eglconvenience: Could not query screen info"); + } + } + } +#endif + + if (rate == 0) + rate = 60; + + return rate; +} + #endif // Q_OS_UNIX QT_END_NAMESPACE diff --git a/src/platformsupport/eglconvenience/qeglconvenience_p.h b/src/platformsupport/eglconvenience/qeglconvenience_p.h index 1d35545430..59441d8c9a 100644 --- a/src/platformsupport/eglconvenience/qeglconvenience_p.h +++ b/src/platformsupport/eglconvenience/qeglconvenience_p.h @@ -63,6 +63,7 @@ void q_printEglConfig(EGLDisplay display, EGLConfig config); QSizeF q_physicalScreenSizeFromFb(int framebufferDevice, const QSize &screenSize = QSize()); QSize q_screenSizeFromFb(int framebufferDevice); int q_screenDepthFromFb(int framebufferDevice); +qreal q_refreshRateFromFb(int framebufferDevice); #endif class QEglConfigChooser |