From 956e6e3638baee1df48df43e5948f27db391fd70 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 26 Jan 2020 14:13:42 -0800 Subject: [PATCH] Avoid slicing for hardware decoders that use SDL as the renderer --- app/streaming/video/ffmpeg-renderers/sdlvid.cpp | 10 ---------- app/streaming/video/ffmpeg-renderers/sdlvid.h | 1 - app/streaming/video/ffmpeg.cpp | 13 ++++++++++++- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/app/streaming/video/ffmpeg-renderers/sdlvid.cpp b/app/streaming/video/ffmpeg-renderers/sdlvid.cpp index f483ec03..a9cd0901 100644 --- a/app/streaming/video/ffmpeg-renderers/sdlvid.cpp +++ b/app/streaming/video/ffmpeg-renderers/sdlvid.cpp @@ -127,16 +127,6 @@ bool SdlRenderer::isRenderThreadSupported() return true; } -int SdlRenderer::getDecoderCapabilities() -{ - // Slice up to 4 times for parallel decode, once slice per core - int slices = qMin(MAX_SLICES, SDL_GetCPUCount()); - SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, - "Encoder configured for %d slices per frame", - slices); - return CAPABILITY_SLICES_PER_FRAME(slices); -} - bool SdlRenderer::initialize(PDECODER_PARAMETERS params) { Uint32 rendererFlags = SDL_RENDERER_ACCELERATED; diff --git a/app/streaming/video/ffmpeg-renderers/sdlvid.h b/app/streaming/video/ffmpeg-renderers/sdlvid.h index 3c952953..5c7b2e7f 100644 --- a/app/streaming/video/ffmpeg-renderers/sdlvid.h +++ b/app/streaming/video/ffmpeg-renderers/sdlvid.h @@ -13,7 +13,6 @@ public: virtual void renderFrame(AVFrame* frame) override; virtual void notifyOverlayUpdated(Overlay::OverlayType) override; virtual bool isRenderThreadSupported() override; - virtual int getDecoderCapabilities() override; private: void renderOverlay(Overlay::OverlayType type); diff --git a/app/streaming/video/ffmpeg.cpp b/app/streaming/video/ffmpeg.cpp index dae8852e..1771b737 100644 --- a/app/streaming/video/ffmpeg.cpp +++ b/app/streaming/video/ffmpeg.cpp @@ -47,7 +47,18 @@ bool FFmpegVideoDecoder::isHardwareAccelerated() int FFmpegVideoDecoder::getDecoderCapabilities() { - return m_BackendRenderer->getDecoderCapabilities(); + int capabilities = m_BackendRenderer->getDecoderCapabilities(); + + if (!isHardwareAccelerated()) { + // Slice up to 4 times for parallel CPU decoding, once slice per core + int slices = qMin(MAX_SLICES, SDL_GetCPUCount()); + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, + "Encoder configured for %d slices per frame", + slices); + capabilities |= CAPABILITY_SLICES_PER_FRAME(slices); + } + + return capabilities; } int FFmpegVideoDecoder::getDecoderColorspace()