modetest: fix mode_vrefresh() for interlace/dblscan/vscan
mode_vrefresh() does not take into account interlaced, doublescan, and multiscan modes, leading to incorrect refresh rates. Fix this, based on drm_mode_vrefresh() in Linux. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>main
parent
022a4d8a82
commit
ea5237e549
|
@ -138,8 +138,19 @@ static inline int64_t U642I64(uint64_t val)
|
|||
|
||||
static float mode_vrefresh(drmModeModeInfo *mode)
|
||||
{
|
||||
return mode->clock * 1000.00
|
||||
/ (mode->htotal * mode->vtotal);
|
||||
unsigned int num, den;
|
||||
|
||||
num = mode->clock;
|
||||
den = mode->htotal * mode->vtotal;
|
||||
|
||||
if (mode->flags & DRM_MODE_FLAG_INTERLACE)
|
||||
num *= 2;
|
||||
if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
|
||||
den *= 2;
|
||||
if (mode->vscan > 1)
|
||||
den *= mode->vscan;
|
||||
|
||||
return num * 1000.00 / den;
|
||||
}
|
||||
|
||||
#define bit_name_fn(res) \
|
||||
|
|
Loading…
Reference in New Issue