decklink: Reset video capture on format change

Fixes black screen when toggling between 4K SDR and HDR on PS5.
This commit is contained in:
jpark37
2023-04-03 23:27:56 -07:00
committed by Lain
parent bb12fe9db5
commit 4fd595efe9

View File

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