Skip to content

Commit

Permalink
Fixed bug 4054 - Raspberry Pi refresh rate detection
Browse files Browse the repository at this point in the history
Viacheslav Slavinsky

SDL_rpivideo driver has 60 frames per second hardcoded in it, this is a problem for games that need to keep pace using VSYNC. I believe that I have found a solution to this. It is based on code in tvservice.c in rpi userland:

https://github.com/raspberrypi/userland/blob/a1b89e91f393c7134b4cdc36431f863bb3333163/host_applications/linux/apps/tvservice/tvservice.c#L433
  • Loading branch information
slouken committed Feb 7, 2018
1 parent 11c348b commit 940933d
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions src/video/raspberry/SDL_rpivideo.c
Expand Up @@ -63,6 +63,23 @@ RPI_Destroy(SDL_VideoDevice * device)
SDL_free(device);
}

static int
RPI_GetRefreshRate()
{
TV_DISPLAY_STATE_T tvstate;
if (vc_tv_get_display_state( &tvstate ) == 0) {
//The width/height parameters are in the same position in the union
//for HDMI and SDTV
HDMI_PROPERTY_PARAM_T property;
property.property = HDMI_PROPERTY_PIXEL_CLOCK_TYPE;
vc_tv_hdmi_get_property(&property);
return property.param1 == HDMI_PIXEL_CLOCK_TYPE_NTSC ?
tvstate.display.hdmi.frame_rate * (1000.0f/1001.0f) :
tvstate.display.hdmi.frame_rate;
}
return 60; /* Failed to get display state, default to 60 */
}

static SDL_VideoDevice *
RPI_Create()
{
Expand Down Expand Up @@ -159,8 +176,7 @@ RPI_VideoInit(_THIS)

current_mode.w = w;
current_mode.h = h;
/* FIXME: Is there a way to tell the actual refresh rate? */
current_mode.refresh_rate = 60;
current_mode.refresh_rate = RPI_GetRefreshRate();
/* 32 bpp for default */
current_mode.format = SDL_PIXELFORMAT_ABGR8888;

Expand Down

0 comments on commit 940933d

Please sign in to comment.