Skip to content

Commit

Permalink
Draw the black background even for the KMSDRM backend to fix modesetting
Browse files Browse the repository at this point in the history
  • Loading branch information
cgutman committed May 25, 2022
1 parent f99f1f6 commit b9c73df
Showing 1 changed file with 9 additions and 22 deletions.
31 changes: 9 additions & 22 deletions app/streaming/video/ffmpeg-renderers/mmal.cpp
Expand Up @@ -219,32 +219,19 @@ int MmalRenderer::getDecoderColorspace()

void MmalRenderer::setupBackground(PDECODER_PARAMETERS params)
{
SDL_SysWMinfo info;

SDL_VERSION(&info.version);

if (!SDL_GetWindowWMInfo(params->window, &info)) {
// Create a renderer and draw a black background for the area not covered by the MMAL overlay.
// On the KMSDRM backend, this triggers the modeset that puts the CRTC into the mode we selected.
m_BackgroundRenderer = SDL_CreateRenderer(params->window, -1, SDL_RENDERER_SOFTWARE);
if (m_BackgroundRenderer == nullptr) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"SDL_GetWindowWMInfo() failed: %s",
SDL_GetError());
"SDL_CreateRenderer() failed: %s",
SDL_GetError());
return;
}

// On X11, we can safely create a renderer and draw a black background.
// Due to conflicts with Qt, it's unsafe to do this for KMSDRM.
if (info.subsystem == SDL_SYSWM_X11) {
m_BackgroundRenderer = SDL_CreateRenderer(params->window, -1, SDL_RENDERER_SOFTWARE);
if (m_BackgroundRenderer == nullptr) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"SDL_CreateRenderer() failed: %s",
SDL_GetError());
return;
}

SDL_SetRenderDrawColor(m_BackgroundRenderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(m_BackgroundRenderer);
SDL_RenderPresent(m_BackgroundRenderer);
}
SDL_SetRenderDrawColor(m_BackgroundRenderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(m_BackgroundRenderer);
SDL_RenderPresent(m_BackgroundRenderer);
}

void MmalRenderer::InputPortCallback(MMAL_PORT_T*, MMAL_BUFFER_HEADER_T* buffer)
Expand Down

0 comments on commit b9c73df

Please sign in to comment.