decklink: Fix format detection loop

Ignore color space change in format detection to fix endless loop.
Fix #3511
Fix #3277
This commit is contained in:
Stéphane Cottin 2020-11-02 09:14:04 +01:00
parent 923f06bfa6
commit 65daf2c86d
No known key found for this signature in database
GPG Key ID: 94ACF3717D74E1CC

View File

@ -618,13 +618,6 @@ HRESULT STDMETHODCALLTYPE DeckLinkDeviceInstance::VideoInputFormatChanged(
BMDVideoInputFormatChangedEvents events, IDeckLinkDisplayMode *newMode,
BMDDetectedVideoInputFormatFlags detectedSignalFlags)
{
input->PauseStreams();
mode->SetMode(newMode);
if (events & bmdVideoInputDisplayModeChanged) {
displayMode = mode->GetDisplayMode();
}
if (events & bmdVideoInputColorspaceChanged) {
switch (detectedSignalFlags) {
@ -639,21 +632,26 @@ HRESULT STDMETHODCALLTYPE DeckLinkDeviceInstance::VideoInputFormatChanged(
}
}
const HRESULT videoResult = input->EnableVideoInput(
displayMode, pixelFormat, bmdVideoInputEnableFormatDetection);
if (videoResult != S_OK) {
LOG(LOG_ERROR, "Failed to enable video input");
input->StopStreams();
FinalizeStream();
if (events & bmdVideoInputDisplayModeChanged) {
input->PauseStreams();
mode->SetMode(newMode);
displayMode = mode->GetDisplayMode();
return E_FAIL;
const HRESULT videoResult = input->EnableVideoInput(
displayMode, pixelFormat,
bmdVideoInputEnableFormatDetection);
if (videoResult != S_OK) {
LOG(LOG_ERROR, "Failed to enable video input");
input->StopStreams();
FinalizeStream();
return E_FAIL;
}
SetupVideoFormat(mode);
input->FlushStreams();
input->StartStreams();
}
SetupVideoFormat(mode);
input->FlushStreams();
input->StartStreams();
return S_OK;
}