Fix handling of HDR colorspace transitions in VT renderer

This commit is contained in:
Cameron Gutman
2021-11-19 00:28:15 -06:00
parent 0a301dd2f9
commit d0df4fa3a0

View File

@@ -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;