Pārlūkot izejas kodu

win-dshow: Decouple audio from video

If a device produces video and audio timestamps atdifferent rates,
this divergence can cause massive buffering on the audio side, leading
to a capped audio buffer, and total sound loss. This change allows a
hardcoded list of devices to use the existing decoupling logic. For
now, only "GV-USB2" has been added.

When combined with another fix, 5+ hours of stable audio without any
buffering on my GV-USB2 where it used to drop sound completely after
an hour or so.

Partially fixes https://obsproject.com/mantis/view.php?id=1269
James Park 6 gadi atpakaļ
vecāks
revīzija
534c553b23
1 mainītis faili ar 6 papildinājumiem un 0 dzēšanām
  1. 6 0
      plugins/win-dshow/win-dshow.cpp

+ 6 - 0
plugins/win-dshow/win-dshow.cpp

@@ -800,6 +800,11 @@ static inline bool IsEncoded(const VideoConfig &config)
 	       wstrstri(config.name.c_str(), L"stream engine") != NULL;
 }
 
+static inline bool IsDecoupled(const VideoConfig &config)
+{
+	return wstrstri(config.name.c_str(), L"GV-USB2") != NULL;
+}
+
 inline void DShowInput::SetupBuffering(obs_data_t *settings)
 {
 	BufferingType bufType;
@@ -813,6 +818,7 @@ inline void DShowInput::SetupBuffering(obs_data_t *settings)
 		useBuffering = bufType == BufferingType::On;
 
 	obs_source_set_async_unbuffered(source, !useBuffering);
+	obs_source_set_async_decoupled(source, IsDecoupled(videoConfig));
 }
 
 static DStr GetVideoFormatName(VideoFormat format);