From d0df4fa3a0404e3e2eeab52abbad72e084036998 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 19 Nov 2021 00:28:15 -0600 Subject: [PATCH] Fix handling of HDR colorspace transitions in VT renderer --- app/streaming/video/ffmpeg-renderers/vt.mm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/streaming/video/ffmpeg-renderers/vt.mm b/app/streaming/video/ffmpeg-renderers/vt.mm index e7aa103b..f9b8487f 100644 --- a/app/streaming/video/ffmpeg-renderers/vt.mm +++ b/app/streaming/video/ffmpeg-renderers/vt.mm @@ -38,6 +38,7 @@ public: m_FormatDesc(nullptr), m_StreamView(nullptr), m_DisplayLink(nullptr), + m_LastAvColorSpace(AVCOL_SPC_UNSPECIFIED), m_ColorSpace(nullptr), m_VsyncMutex(nullptr), m_VsyncPassed(nullptr) @@ -232,6 +233,17 @@ public: break; } + // Reset m_ColorSpace if the colorspace changes. This can happen when + // a game enters HDR mode (Rec 601 -> Rec 2020). + if (frame->colorspace != m_LastAvColorSpace) { + if (m_ColorSpace != nullptr) { + CGColorSpaceRelease(m_ColorSpace); + m_ColorSpace = nullptr; + } + + m_LastAvColorSpace = frame->colorspace; + } + switch (frame->colorspace) { case AVCOL_SPC_BT709: if (m_ColorSpace == nullptr) { @@ -560,6 +572,7 @@ private: NSView* m_StreamView; NSTextField* m_OverlayTextFields[Overlay::OverlayMax]; CVDisplayLinkRef m_DisplayLink; + AVColorSpace m_LastAvColorSpace; CGColorSpaceRef m_ColorSpace; SDL_mutex* m_VsyncMutex; SDL_cond* m_VsyncPassed;