kmsdrm: fix errors when trying to free up videomode driverdata pointers on quit.

Manuel Alfayate Corchete 2020-09-07 01:33:04 +02:00
parent 9501b1c698
commit cce6c60518
2 changed files with 19 additions and 3 deletions

View File

@ -1338,6 +1338,7 @@ KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
}
#endif
#if 1
/* We are NOT really changing the physical display mode, but using
the PRIMARY PLANE and CRTC to scale as we please. But we need that SDL
has knowledge of the video modes we are going to use for fullscreen
@ -1352,14 +1353,24 @@ KMSDRM_GetDisplayModes(_THIS, SDL_VideoDisplay * display)
SDL_DisplayMode mode;
for (int i = 0; i < conn->count_modes; i++) {
SDL_DisplayModeData *modedata = SDL_calloc(1, sizeof(SDL_DisplayModeData));
if (modedata) {
modedata->mode_index = i;
}
mode.w = conn->modes[i].hdisplay;
mode.h = conn->modes[i].vdisplay;
mode.refresh_rate = conn->modes[i].vrefresh;
mode.format = SDL_PIXELFORMAT_ARGB8888;
mode.driverdata = modedata;
SDL_AddDisplayMode(display, &mode);
if (!SDL_AddDisplayMode(display, &mode)) {
SDL_free(modedata);
}
}
}
#endif
int
KMSDRM_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode)

View File

@ -132,6 +132,11 @@ typedef struct SDL_WindowData
} SDL_WindowData;
typedef struct SDL_DisplayModeData
{
int mode_index;
} SDL_DisplayModeData;
typedef struct KMSDRM_FBInfo
{
int drm_fd; /* DRM file desc */