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
This commit is contained in:
James Park 2019-07-05 07:31:07 -07:00
parent ad233330f3
commit 534c553b23

View File

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