diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.cpp b/app/streaming/video/ffmpeg-renderers/vaapi.cpp index 8143af72..cab73b14 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.cpp +++ b/app/streaming/video/ffmpeg-renderers/vaapi.cpp @@ -1,3 +1,5 @@ +#include + #include "vaapi.h" #include @@ -114,6 +116,21 @@ VAAPIRenderer::initialize(SDL_Window* window, int, int width, int height, int, b "Driver: %s", vendorString ? vendorString : ""); + // AMD's Gallium VAAPI driver has a nasty memory leak + // that causes memory to be leaked for each submitted frame. + // The Flatpak runtime has a VDPAU driver in place that works + // well, so use that instead on AMD systems. + if (vendorString && qgetenv("FORCE_VAAPI") != "1") { + QString vendorStr(vendorString); + if (vendorStr.contains("AMD", Qt::CaseInsensitive) || + vendorStr.contains("Radeon", Qt::CaseInsensitive)) { + // Fail and let VDPAU pick this up + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, + "Avoiding VAAPI on AMD driver"); + return false; + } + } + // This will populate the driver_quirks err = av_hwdevice_ctx_init(m_HwContext); if (err < 0) {