diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp index 09298413..c96e7132 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp @@ -1002,6 +1002,15 @@ int D3D11VARenderer::getRendererAttributes() return RENDERER_ATTRIBUTE_HDR_SUPPORT; } +bool D3D11VARenderer::needsTestFrame() +{ + // We can usually determine when D3D11VA will work based on which decoder GUIDs are supported, + // however there are some strange cases (Quadro P400 + Radeon HD 5570) where something goes + // horribly wrong and D3D11VideoDevice::CreateVideoDecoder() fails inside FFmpeg. We need to + // catch that case before we commit to using D3D11VA. + return true; +} + void D3D11VARenderer::lockContext(void *lock_ctx) { auto me = (D3D11VARenderer*)lock_ctx; diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.h b/app/streaming/video/ffmpeg-renderers/d3d11va.h index de7cb0b8..3c9cd017 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.h +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.h @@ -22,6 +22,7 @@ public: virtual void notifyOverlayUpdated(Overlay::OverlayType) override; virtual void setHdrMode(bool enabled) override; virtual int getRendererAttributes() override; + virtual bool needsTestFrame() override; private: static void lockContext(void* lock_ctx);