Pārlūkot izejas kodu

Merge pull request #3681 from vixns/decklink-detectfix

decklink: Fix format detection loop
Colin Edwards 5 gadi atpakaļ
vecāks
revīzija
82abfa42ce
1 mainītis faili ar 17 papildinājumiem un 19 dzēšanām
  1. 17 19
      plugins/decklink/decklink-device-instance.cpp

+ 17 - 19
plugins/decklink/decklink-device-instance.cpp

@@ -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,20 +632,25 @@ 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();
-
-		return E_FAIL;
-	}
+	if (events & bmdVideoInputDisplayModeChanged) {
+		input->PauseStreams();
+		mode->SetMode(newMode);
+		displayMode = mode->GetDisplayMode();
 
-	SetupVideoFormat(mode);
+		const HRESULT videoResult = input->EnableVideoInput(
+			displayMode, pixelFormat,
+			bmdVideoInputEnableFormatDetection);
+		if (videoResult != S_OK) {
+			LOG(LOG_ERROR, "Failed to enable video input");
+			input->StopStreams();
+			FinalizeStream();
 
-	input->FlushStreams();
-	input->StartStreams();
+			return E_FAIL;
+		}
+		SetupVideoFormat(mode);
+		input->FlushStreams();
+		input->StartStreams();
+	}
 
 	return S_OK;
 }