drmModeModeInfo
中的[DRM结构包含uint32_t vrefresh;
字段,并且该值实际上在那里很好,即,对于不同的视频模式,我得到24-75Hz。但是刷新率不是整数,而是有理数,现在对于我的显示,值为59997/1000。
是否可以在Linux上获得准确的数字?还是至少有一个浮点值?
分子为drmModeModeInfo::clock * 1000
,clock
字段为千赫兹,公式需要Hz。
分母是drmModeModeInfo::htotal
和drmModeModeInfo::vtotal
字段的乘积。
为了获得更好的结果,我通过将分子和分母除以它们的最大公约数来简化有理数。对于这一部分,我使用了algorithm from Wikipedia。
我不确定当前的显示器是否支持2 ^ 32 Hz = 4.29 GHz以上的信号频率,但是即使它们不支持,将来的信号频率也可能支持,即您最好在此处使用64位整数数学。