Restore AVSampleDisplayLayer renderer for dGPU/eGPU systems

These sometimes have issues importing decoded frames for Metal rendering.
This commit is contained in:
Cameron Gutman
2024-03-24 17:47:29 -05:00
parent c9ad8ffa69
commit a093a0ae59
5 changed files with 723 additions and 37 deletions

View File

@@ -825,7 +825,8 @@ IFFmpegRenderer* FFmpegVideoDecoder::createHwAccelRenderer(const AVCodecHWConfig
#endif
#ifdef Q_OS_DARWIN
case AV_HWDEVICE_TYPE_VIDEOTOOLBOX:
return VTRendererFactory::createRenderer();
// Prefer the Metal renderer if hardware is compatible
return VTMetalRendererFactory::createRenderer();
#endif
#ifdef HAVE_LIBVA
case AV_HWDEVICE_TYPE_VAAPI:
@@ -864,6 +865,11 @@ IFFmpegRenderer* FFmpegVideoDecoder::createHwAccelRenderer(const AVCodecHWConfig
case AV_HWDEVICE_TYPE_D3D11VA:
return new D3D11VARenderer(pass);
#endif
#ifdef Q_OS_DARWIN
case AV_HWDEVICE_TYPE_VIDEOTOOLBOX:
// Use the older AVSampleBufferDisplayLayer if Metal cannot be used
return VTRendererFactory::createRenderer();
#endif
#ifdef HAVE_LIBVA
case AV_HWDEVICE_TYPE_VAAPI:
return new VAAPIRenderer(pass);