decklink: Reset video capture on format change
Fixes black screen when toggling between 4K SDR and HDR on PS5.
This commit is contained in:
parent
bb12fe9db5
commit
4fd595efe9
1 changed files with 16 additions and 9 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue