From 4fd595efe96e098d7d229e400410bd062a022010 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Mon, 3 Apr 2023 23:27:56 -0700 Subject: [PATCH] decklink: Reset video capture on format change Fixes black screen when toggling between 4K SDR and HDR on PS5. --- plugins/decklink/decklink-device-instance.cpp | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/plugins/decklink/decklink-device-instance.cpp b/plugins/decklink/decklink-device-instance.cpp index 8b886ccac..c903e0a5b 100644 --- a/plugins/decklink/decklink-device-instance.cpp +++ b/plugins/decklink/decklink-device-instance.cpp @@ -794,25 +794,32 @@ HRESULT STDMETHODCALLTYPE DeckLinkDeviceInstance::VideoInputFormatChanged( BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *newMode, BMDDetectedVideoInputFormatFlags detectedSignalFlags) { + bool formatChanged = false; if (events & bmdVideoInputColorspaceChanged) { constexpr BMDDetectedVideoInputFormatFlags highBitFlags = (bmdDetectedVideoInput12BitDepth | bmdDetectedVideoInput10BitDepth); if (detectedSignalFlags & bmdDetectedVideoInputRGB444) { - pixelFormat = ((detectedSignalFlags & highBitFlags) && - allow10Bit) - ? bmdFormat10BitRGBXLE - : bmdFormat8BitBGRA; + const BMDPixelFormat nextFormat = + ((detectedSignalFlags & highBitFlags) && + allow10Bit) + ? bmdFormat10BitRGBXLE + : bmdFormat8BitBGRA; + formatChanged = pixelFormat != nextFormat; + pixelFormat = nextFormat; } if (detectedSignalFlags & bmdDetectedVideoInputYCbCr422) { - pixelFormat = ((detectedSignalFlags & highBitFlags) && - allow10Bit) - ? bmdFormat10BitYUV - : bmdFormat8BitYUV; + const BMDPixelFormat nextFormat = + ((detectedSignalFlags & highBitFlags) && + allow10Bit) + ? bmdFormat10BitYUV + : bmdFormat8BitYUV; + formatChanged = pixelFormat != nextFormat; + pixelFormat = nextFormat; } } - if (events & bmdVideoInputDisplayModeChanged) { + if (formatChanged || (events & bmdVideoInputDisplayModeChanged)) { input->PauseStreams(); mode->SetMode(newMode); displayMode = mode->GetDisplayMode();