From 1a2f1ed620901c92ef654f15639e4f5c0fa559eb Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 13 Aug 2023 16:41:48 -0500 Subject: [PATCH] Enable AV1 RFI on all decoders capable of HEVC RFI --- app/streaming/video/ffmpeg-renderers/cuda.cpp | 3 ++- app/streaming/video/ffmpeg-renderers/d3d11va.cpp | 3 ++- app/streaming/video/ffmpeg-renderers/dxva2.cpp | 3 ++- app/streaming/video/ffmpeg-renderers/vaapi.cpp | 3 ++- app/streaming/video/ffmpeg-renderers/vdpau.cpp | 3 ++- app/streaming/video/ffmpeg-renderers/vt.mm | 3 ++- app/streaming/video/ffmpeg.cpp | 3 +++ 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/cuda.cpp b/app/streaming/video/ffmpeg-renderers/cuda.cpp index 7a24fbc7..22a6c092 100644 --- a/app/streaming/video/ffmpeg-renderers/cuda.cpp +++ b/app/streaming/video/ffmpeg-renderers/cuda.cpp @@ -59,7 +59,8 @@ bool CUDARenderer::isDirectRenderingSupported() int CUDARenderer::getDecoderCapabilities() { - return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } CUDAGLInteropHelper::CUDAGLInteropHelper(AVHWDeviceContext* context) diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp index 679287f3..f9a77f00 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp @@ -1080,7 +1080,8 @@ int D3D11VARenderer::getRendererAttributes() int D3D11VARenderer::getDecoderCapabilities() { - return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } bool D3D11VARenderer::needsTestFrame() diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index a016fea0..23a89af7 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -1037,7 +1037,8 @@ int DXVA2Renderer::getDecoderColorspace() int DXVA2Renderer::getDecoderCapabilities() { - return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } void DXVA2Renderer::renderFrame(AVFrame *frame) diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.cpp b/app/streaming/video/ffmpeg-renderers/vaapi.cpp index a2089d67..8bcacdd2 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.cpp +++ b/app/streaming/video/ffmpeg-renderers/vaapi.cpp @@ -503,7 +503,8 @@ int VAAPIRenderer::getDecoderCapabilities() int caps = 0; if (!m_HasRfiLatencyBug) { - caps |= CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + caps |= CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } return caps; diff --git a/app/streaming/video/ffmpeg-renderers/vdpau.cpp b/app/streaming/video/ffmpeg-renderers/vdpau.cpp index 8f948743..e6e1294d 100644 --- a/app/streaming/video/ffmpeg-renderers/vdpau.cpp +++ b/app/streaming/video/ffmpeg-renderers/vdpau.cpp @@ -439,7 +439,8 @@ int VDPAURenderer::getDecoderColorspace() int VDPAURenderer::getDecoderCapabilities() { - return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } void VDPAURenderer::renderOverlay(VdpOutputSurface destination, Overlay::OverlayType type) diff --git a/app/streaming/video/ffmpeg-renderers/vt.mm b/app/streaming/video/ffmpeg-renderers/vt.mm index 9a943a1d..0457f201 100644 --- a/app/streaming/video/ffmpeg-renderers/vt.mm +++ b/app/streaming/video/ffmpeg-renderers/vt.mm @@ -590,7 +590,8 @@ public: int getDecoderCapabilities() override { - return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC | + CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } int getRendererAttributes() override diff --git a/app/streaming/video/ffmpeg.cpp b/app/streaming/video/ffmpeg.cpp index 797a8675..8dceec07 100644 --- a/app/streaming/video/ffmpeg.cpp +++ b/app/streaming/video/ffmpeg.cpp @@ -115,6 +115,9 @@ int FFmpegVideoDecoder::getDecoderCapabilities() // Enable HEVC RFI when using the FFmpeg software decoder capabilities |= CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; + + // Enable AV1 RFI when using the libdav1d software decoder + capabilities |= CAPABILITY_REFERENCE_FRAME_INVALIDATION_AV1; } else if (m_HwDecodeCfg == nullptr) { // We have a non-hwaccel hardware decoder. This will always