diff --git a/app/streaming/video/ffmpeg-renderers/eglvid.cpp b/app/streaming/video/ffmpeg-renderers/eglvid.cpp index ccc3277d..8d56b3df 100644 --- a/app/streaming/video/ffmpeg-renderers/eglvid.cpp +++ b/app/streaming/video/ffmpeg-renderers/eglvid.cpp @@ -747,6 +747,13 @@ bool EGLRenderer::specialize() { return err == GL_NO_ERROR; } +bool EGLRenderer::isRenderThreadSupported() +{ + // libdecor may try to draw CSD on our window surface which will race with + // our rendering code here, so we must not use the render thread on wayland. + return strcmp(SDL_GetCurrentVideoDriver(), "wayland") != 0; +} + void EGLRenderer::renderFrame(AVFrame* frame) { EGLImage imgs[EGL_MAX_PLANES]; diff --git a/app/streaming/video/ffmpeg-renderers/eglvid.h b/app/streaming/video/ffmpeg-renderers/eglvid.h index 336e8fac..7574d511 100644 --- a/app/streaming/video/ffmpeg-renderers/eglvid.h +++ b/app/streaming/video/ffmpeg-renderers/eglvid.h @@ -16,6 +16,7 @@ public: virtual void notifyOverlayUpdated(Overlay::OverlayType) override; virtual bool isPixelFormatSupported(int videoFormat, enum AVPixelFormat pixelFormat) override; virtual AVPixelFormat getPreferredPixelFormat(int videoFormat) override; + virtual bool isRenderThreadSupported() override; private: