Fix handling of HDR colorspace transitions in VT renderer
This commit is contained in:
parent
0a301dd2f9
commit
d0df4fa3a0
1 changed files with 13 additions and 0 deletions
|
|
@ -38,6 +38,7 @@ public:
|
||||||
m_FormatDesc(nullptr),
|
m_FormatDesc(nullptr),
|
||||||
m_StreamView(nullptr),
|
m_StreamView(nullptr),
|
||||||
m_DisplayLink(nullptr),
|
m_DisplayLink(nullptr),
|
||||||
|
m_LastAvColorSpace(AVCOL_SPC_UNSPECIFIED),
|
||||||
m_ColorSpace(nullptr),
|
m_ColorSpace(nullptr),
|
||||||
m_VsyncMutex(nullptr),
|
m_VsyncMutex(nullptr),
|
||||||
m_VsyncPassed(nullptr)
|
m_VsyncPassed(nullptr)
|
||||||
|
|
@ -232,6 +233,17 @@ public:
|
||||||
break;
|
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) {
|
switch (frame->colorspace) {
|
||||||
case AVCOL_SPC_BT709:
|
case AVCOL_SPC_BT709:
|
||||||
if (m_ColorSpace == nullptr) {
|
if (m_ColorSpace == nullptr) {
|
||||||
|
|
@ -560,6 +572,7 @@ private:
|
||||||
NSView* m_StreamView;
|
NSView* m_StreamView;
|
||||||
NSTextField* m_OverlayTextFields[Overlay::OverlayMax];
|
NSTextField* m_OverlayTextFields[Overlay::OverlayMax];
|
||||||
CVDisplayLinkRef m_DisplayLink;
|
CVDisplayLinkRef m_DisplayLink;
|
||||||
|
AVColorSpace m_LastAvColorSpace;
|
||||||
CGColorSpaceRef m_ColorSpace;
|
CGColorSpaceRef m_ColorSpace;
|
||||||
SDL_mutex* m_VsyncMutex;
|
SDL_mutex* m_VsyncMutex;
|
||||||
SDL_cond* m_VsyncPassed;
|
SDL_cond* m_VsyncPassed;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue