From e6c4332445ead406252a42fa97793c8b1ee24956 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 13 Oct 2022 01:18:57 -0500 Subject: [PATCH] Revert "Use Rec 2020 colorspace for WCG support even if HDR is off on the host" Rec 2020 conversion causes colors to be blown out in SDR This reverts commit 472e8ee92ea94adbe03efc9efd7d115745593c12. --- app/streaming/session.cpp | 6 +----- app/streaming/video/decoder.h | 2 +- app/streaming/video/ffmpeg-renderers/dxva2.cpp | 2 +- app/streaming/video/ffmpeg-renderers/dxva2.h | 2 +- app/streaming/video/ffmpeg-renderers/mmal.cpp | 2 +- app/streaming/video/ffmpeg-renderers/mmal.h | 2 +- app/streaming/video/ffmpeg-renderers/renderer.h | 4 ++-- app/streaming/video/ffmpeg-renderers/vaapi.cpp | 2 +- app/streaming/video/ffmpeg-renderers/vaapi.h | 2 +- app/streaming/video/ffmpeg-renderers/vdpau.cpp | 2 +- app/streaming/video/ffmpeg-renderers/vdpau.h | 2 +- app/streaming/video/ffmpeg.cpp | 4 ++-- app/streaming/video/ffmpeg.h | 2 +- app/streaming/video/slvid.cpp | 2 +- app/streaming/video/slvid.h | 2 +- 15 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index e6694610..6cc0b7a0 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -415,12 +415,8 @@ bool Session::populateDecoderProperties(SDL_Window* window) "Using colorspace override: %d", m_StreamConfig.colorSpace); } - else if (!m_StreamConfig.enableHdr) { - m_StreamConfig.colorSpace = decoder->getDecoderSdrColorspace(); - } else { - // In HDR mode, we opt for Rec 2020 for WCG displays - m_StreamConfig.colorSpace = COLORSPACE_REC_2020; + m_StreamConfig.colorSpace = decoder->getDecoderColorspace(); } m_StreamConfig.colorRange = qEnvironmentVariableIntValue("COLOR_RANGE_OVERRIDE", &ok); diff --git a/app/streaming/video/decoder.h b/app/streaming/video/decoder.h index c7a4c784..e96350f8 100644 --- a/app/streaming/video/decoder.h +++ b/app/streaming/video/decoder.h @@ -67,7 +67,7 @@ public: virtual bool isAlwaysFullScreen() = 0; virtual bool isHdrSupported() = 0; virtual int getDecoderCapabilities() = 0; - virtual int getDecoderSdrColorspace() = 0; + virtual int getDecoderColorspace() = 0; virtual int getDecoderColorRange() = 0; virtual QSize getDecoderMaxResolution() = 0; virtual int submitDecodeUnit(PDECODE_UNIT du) = 0; diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.cpp b/app/streaming/video/ffmpeg-renderers/dxva2.cpp index 48deb4e6..4d4c040a 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.cpp +++ b/app/streaming/video/ffmpeg-renderers/dxva2.cpp @@ -989,7 +989,7 @@ Exit: overlayVertexBuffer->Release(); } -int DXVA2Renderer::getDecoderSdrColorspace() +int DXVA2Renderer::getDecoderColorspace() { if (m_DeviceQuirks & DXVA2_QUIRK_NO_VP) { // StretchRect() assumes Rec 601 on Intel and Qualcomm GPUs. diff --git a/app/streaming/video/ffmpeg-renderers/dxva2.h b/app/streaming/video/ffmpeg-renderers/dxva2.h index 851660db..a2e23cb3 100644 --- a/app/streaming/video/ffmpeg-renderers/dxva2.h +++ b/app/streaming/video/ffmpeg-renderers/dxva2.h @@ -19,7 +19,7 @@ public: virtual bool prepareDecoderContext(AVCodecContext* context, AVDictionary** options) override; virtual void renderFrame(AVFrame* frame) override; virtual void notifyOverlayUpdated(Overlay::OverlayType type) override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; virtual int getDecoderCapabilities() override; private: diff --git a/app/streaming/video/ffmpeg-renderers/mmal.cpp b/app/streaming/video/ffmpeg-renderers/mmal.cpp index 4d86a4d2..98cf663d 100644 --- a/app/streaming/video/ffmpeg-renderers/mmal.cpp +++ b/app/streaming/video/ffmpeg-renderers/mmal.cpp @@ -210,7 +210,7 @@ bool MmalRenderer::initialize(PDECODER_PARAMETERS params) return true; } -int MmalRenderer::getDecoderSdrColorspace() +int MmalRenderer::getDecoderColorspace() { // MMAL seems to always use Rec. 709 colorspace for rendering // even when we try to set something else in the input format. diff --git a/app/streaming/video/ffmpeg-renderers/mmal.h b/app/streaming/video/ffmpeg-renderers/mmal.h index 1edb0869..560a8b36 100644 --- a/app/streaming/video/ffmpeg-renderers/mmal.h +++ b/app/streaming/video/ffmpeg-renderers/mmal.h @@ -17,7 +17,7 @@ public: virtual enum AVPixelFormat getPreferredPixelFormat(int videoFormat) override; virtual bool needsTestFrame() override; virtual int getRendererAttributes() override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; private: static void InputPortCallback(MMAL_PORT_T* port, MMAL_BUFFER_HEADER_T* buffer); diff --git a/app/streaming/video/ffmpeg-renderers/renderer.h b/app/streaming/video/ffmpeg-renderers/renderer.h index f226d77d..d71f1eb9 100644 --- a/app/streaming/video/ffmpeg-renderers/renderer.h +++ b/app/streaming/video/ffmpeg-renderers/renderer.h @@ -153,7 +153,7 @@ public: return 0; } - virtual int getDecoderSdrColorspace() { + virtual int getDecoderColorspace() { // Rec 601 is default return COLORSPACE_REC_601; } @@ -177,7 +177,7 @@ public: default: // If the colorspace is not populated, assume the encoder // is sending the colorspace that we requested. - return getDecoderSdrColorspace(); + return getDecoderColorspace(); } } diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.cpp b/app/streaming/video/ffmpeg-renderers/vaapi.cpp index 09fe6c8a..34c42b8a 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.cpp +++ b/app/streaming/video/ffmpeg-renderers/vaapi.cpp @@ -470,7 +470,7 @@ VAAPIRenderer::isDirectRenderingSupported() return false; } -int VAAPIRenderer::getDecoderSdrColorspace() +int VAAPIRenderer::getDecoderColorspace() { // Gallium drivers don't support Rec 709 yet - https://gitlab.freedesktop.org/mesa/mesa/issues/1915 // Intel-vaapi-driver defaults to Rec 601 - https://github.com/intel/intel-vaapi-driver/blob/021bcb79d1bd873bbd9fbca55f40320344bab866/src/i965_output_dri.c#L186 diff --git a/app/streaming/video/ffmpeg-renderers/vaapi.h b/app/streaming/video/ffmpeg-renderers/vaapi.h index 8651bca1..71594d0e 100644 --- a/app/streaming/video/ffmpeg-renderers/vaapi.h +++ b/app/streaming/video/ffmpeg-renderers/vaapi.h @@ -41,7 +41,7 @@ public: virtual void renderFrame(AVFrame* frame) override; virtual bool needsTestFrame() override; virtual bool isDirectRenderingSupported() override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; virtual int getDecoderCapabilities() override; virtual void notifyOverlayUpdated(Overlay::OverlayType) override; diff --git a/app/streaming/video/ffmpeg-renderers/vdpau.cpp b/app/streaming/video/ffmpeg-renderers/vdpau.cpp index 552bc1aa..8f948743 100644 --- a/app/streaming/video/ffmpeg-renderers/vdpau.cpp +++ b/app/streaming/video/ffmpeg-renderers/vdpau.cpp @@ -428,7 +428,7 @@ bool VDPAURenderer::needsTestFrame() return true; } -int VDPAURenderer::getDecoderSdrColorspace() +int VDPAURenderer::getDecoderColorspace() { // VDPAU defaults to Rec 601. // https://http.download.nvidia.com/XFree86/vdpau/doxygen/html/group___vdp_video_mixer.html#ga65580813e9045d94b739ed2bb8b62b46 diff --git a/app/streaming/video/ffmpeg-renderers/vdpau.h b/app/streaming/video/ffmpeg-renderers/vdpau.h index 6687f235..0e8fc957 100644 --- a/app/streaming/video/ffmpeg-renderers/vdpau.h +++ b/app/streaming/video/ffmpeg-renderers/vdpau.h @@ -19,7 +19,7 @@ public: virtual void waitToRender() override; virtual void renderFrame(AVFrame* frame) override; virtual bool needsTestFrame() override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; virtual int getDecoderCapabilities() override; private: diff --git a/app/streaming/video/ffmpeg.cpp b/app/streaming/video/ffmpeg.cpp index 7855db2b..fc362b38 100644 --- a/app/streaming/video/ffmpeg.cpp +++ b/app/streaming/video/ffmpeg.cpp @@ -87,9 +87,9 @@ int FFmpegVideoDecoder::getDecoderCapabilities() return capabilities; } -int FFmpegVideoDecoder::getDecoderSdrColorspace() +int FFmpegVideoDecoder::getDecoderColorspace() { - return m_FrontendRenderer->getDecoderSdrColorspace(); + return m_FrontendRenderer->getDecoderColorspace(); } int FFmpegVideoDecoder::getDecoderColorRange() diff --git a/app/streaming/video/ffmpeg.h b/app/streaming/video/ffmpeg.h index 68a17244..4caf2c74 100644 --- a/app/streaming/video/ffmpeg.h +++ b/app/streaming/video/ffmpeg.h @@ -20,7 +20,7 @@ public: virtual bool isAlwaysFullScreen() override; virtual bool isHdrSupported() override; virtual int getDecoderCapabilities() override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; virtual int getDecoderColorRange() override; virtual QSize getDecoderMaxResolution() override; virtual int submitDecodeUnit(PDECODE_UNIT du) override; diff --git a/app/streaming/video/slvid.cpp b/app/streaming/video/slvid.cpp index 262f0567..5008847e 100644 --- a/app/streaming/video/slvid.cpp +++ b/app/streaming/video/slvid.cpp @@ -63,7 +63,7 @@ SLVideoDecoder::getDecoderCapabilities() } int -SLVideoDecoder::getDecoderSdrColorspace() +SLVideoDecoder::getDecoderColorspace() { return COLORSPACE_REC_709; } diff --git a/app/streaming/video/slvid.h b/app/streaming/video/slvid.h index 9f318da5..e6adea6d 100644 --- a/app/streaming/video/slvid.h +++ b/app/streaming/video/slvid.h @@ -14,7 +14,7 @@ public: virtual bool isHardwareAccelerated() override; virtual bool isAlwaysFullScreen() override; virtual int getDecoderCapabilities() override; - virtual int getDecoderSdrColorspace() override; + virtual int getDecoderColorspace() override; virtual int getDecoderColorRange() override; virtual QSize getDecoderMaxResolution() override; virtual int submitDecodeUnit(PDECODE_UNIT du) override;