From 413ef42a341d3d5a53319a8a3846d2bb67647b32 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 5 Oct 2022 18:47:43 -0500 Subject: [PATCH] Enable HEVC RFI for CUDA, VAAPI, and VDPAU decoders --- app/streaming/video/ffmpeg-renderers/cuda.cpp | 5 +++++ app/streaming/video/ffmpeg-renderers/cuda.h | 1 + app/streaming/video/ffmpeg-renderers/vaapi.cpp | 5 +++++ app/streaming/video/ffmpeg-renderers/vaapi.h | 1 + app/streaming/video/ffmpeg-renderers/vdpau.cpp | 5 +++++ app/streaming/video/ffmpeg-renderers/vdpau.h | 1 + 6 files changed, 18 insertions(+) diff --git a/app/streaming/video/ffmpeg-renderers/cuda.cpp b/app/streaming/video/ffmpeg-renderers/cuda.cpp index 035a51b9..7a24fbc7 100644 --- a/app/streaming/video/ffmpeg-renderers/cuda.cpp +++ b/app/streaming/video/ffmpeg-renderers/cuda.cpp @@ -57,6 +57,11 @@ bool CUDARenderer::isDirectRenderingSupported() return false; } +int CUDARenderer::getDecoderCapabilities() +{ + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; +} + CUDAGLInteropHelper::CUDAGLInteropHelper(AVHWDeviceContext* context) : m_Funcs(nullptr), m_Context((AVCUDADeviceContext*)context->hwctx) diff --git a/app/streaming/video/ffmpeg-renderers/cuda.h b/app/streaming/video/ffmpeg-renderers/cuda.h index 086abcbf..8cbcb994 100644 --- a/app/streaming/video/ffmpeg-renderers/cuda.h +++ b/app/streaming/video/ffmpeg-renderers/cuda.h @@ -17,6 +17,7 @@ public: virtual void renderFrame(AVFrame* frame) override; virtual bool needsTestFrame() override; virtual bool isDirectRenderingSupported() override; + virtual int getDecoderCapabilities() override; private: AVBufferRef* m_HwContext; diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.cpp b/app/streaming/video/ffmpeg-renderers/vaapi.cpp index 99594eb8..a0375db2 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.cpp +++ b/app/streaming/video/ffmpeg-renderers/vaapi.cpp @@ -477,6 +477,11 @@ int VAAPIRenderer::getDecoderColorspace() return COLORSPACE_REC_601; } +int VAAPIRenderer::getDecoderCapabilities() +{ + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; +} + void VAAPIRenderer::notifyOverlayUpdated(Overlay::OverlayType type) { AVHWDeviceContext* deviceContext = (AVHWDeviceContext*)m_HwContext->data; diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.h b/app/streaming/video/ffmpeg-renderers/vaapi.h index 8cb26e33..71594d0e 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.h +++ b/app/streaming/video/ffmpeg-renderers/vaapi.h @@ -42,6 +42,7 @@ public: virtual bool needsTestFrame() override; virtual bool isDirectRenderingSupported() override; virtual int getDecoderColorspace() override; + virtual int getDecoderCapabilities() override; virtual void notifyOverlayUpdated(Overlay::OverlayType) override; #ifdef HAVE_EGL diff --git a/app/streaming/video/ffmpeg-renderers/vdpau.cpp b/app/streaming/video/ffmpeg-renderers/vdpau.cpp index 170f3009..8f948743 100644 --- a/app/streaming/video/ffmpeg-renderers/vdpau.cpp +++ b/app/streaming/video/ffmpeg-renderers/vdpau.cpp @@ -437,6 +437,11 @@ int VDPAURenderer::getDecoderColorspace() return COLORSPACE_REC_601; } +int VDPAURenderer::getDecoderCapabilities() +{ + return CAPABILITY_REFERENCE_FRAME_INVALIDATION_HEVC; +} + void VDPAURenderer::renderOverlay(VdpOutputSurface destination, Overlay::OverlayType type) { VdpStatus status; diff --git a/app/streaming/video/ffmpeg-renderers/vdpau.h b/app/streaming/video/ffmpeg-renderers/vdpau.h index 7955fdf0..0e8fc957 100644 --- a/app/streaming/video/ffmpeg-renderers/vdpau.h +++ b/app/streaming/video/ffmpeg-renderers/vdpau.h @@ -20,6 +20,7 @@ public: virtual void renderFrame(AVFrame* frame) override; virtual bool needsTestFrame() override; virtual int getDecoderColorspace() override; + virtual int getDecoderCapabilities() override; private: void renderOverlay(VdpOutputSurface destination, Overlay::OverlayType type);