Skip to content

Commit

Permalink
Fixed bug 3134 - CalculateXRandRRefreshRate() returns incorrect refre…
Browse files Browse the repository at this point in the history
…sh rate due to floating point truncation.

Michael

In SDL_x11modes.c the CalculateXRandRRefreshRate() function performs integer math on values that may return fractional results. This causes a value that would be calculated as 59.99972... to be returned as 59. In Linux the xrandr command returns 60Hz for this particular display mode yet SDL returns 59Hz.

I suggest this function be updated to correctly round the result of the calculation instead of truncating the result.
  • Loading branch information
slouken committed Oct 1, 2016
1 parent 7543092 commit 0250eb3
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/video/x11/SDL_x11modes.c
Expand Up @@ -264,8 +264,8 @@ CheckXRandR(Display * display, int *major, int *minor)
static int
CalculateXRandRRefreshRate(const XRRModeInfo *info)
{
return (info->hTotal
&& info->vTotal) ? (info->dotClock / (info->hTotal * info->vTotal)) : 0;
return (info->hTotal && info->vTotal) ?
round(((double)info->dotClock / (double)(info->hTotal * info->vTotal))) : 0;
}

static SDL_bool
Expand Down

0 comments on commit 0250eb3

Please sign in to comment.