mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-14 15:43:03 +00:00
wasapi: Don't derive device period from latency time
This seems to cause glitches on devices with low CPU availability, such as virtual machines. Maybe even actual machines under high load. https://bugzilla.gnome.org/show_bug.cgi?id=794497
This commit is contained in:
parent
5976518f0b
commit
4cbcd08f9c
1 changed files with 6 additions and 12 deletions
|
@ -912,12 +912,10 @@ gst_wasapi_util_initialize_audioclient3 (GstElement * self,
|
|||
WAVEFORMATEX * format, gboolean low_latency, guint * ret_devicep_frames)
|
||||
{
|
||||
HRESULT hr;
|
||||
guint rate, devicep_frames;
|
||||
guint devicep_frames;
|
||||
guint defaultp_frames, fundp_frames, minp_frames, maxp_frames;
|
||||
WAVEFORMATEX *tmpf;
|
||||
|
||||
rate = GST_AUDIO_INFO_RATE (&spec->info);
|
||||
|
||||
hr = IAudioClient3_GetSharedModeEnginePeriod (client, format,
|
||||
&defaultp_frames, &fundp_frames, &minp_frames, &maxp_frames);
|
||||
HR_FAILED_RET (hr, IAudioClient3::GetSharedModeEnginePeriod, FALSE);
|
||||
|
@ -926,16 +924,12 @@ gst_wasapi_util_initialize_audioclient3 (GstElement * self,
|
|||
"fundamental period %i frames, minimum period %i frames, maximum period "
|
||||
"%i frames", defaultp_frames, fundp_frames, minp_frames, maxp_frames);
|
||||
|
||||
if (low_latency) {
|
||||
if (low_latency)
|
||||
devicep_frames = minp_frames;
|
||||
} else {
|
||||
/* rate is in Hz, latency_time is in usec */
|
||||
int tmp = (rate * spec->latency_time * GST_USECOND) / GST_SECOND;
|
||||
devicep_frames = CLAMP (tmp, minp_frames, maxp_frames);
|
||||
/* Ensure it's a multiple of the fundamental period */
|
||||
tmp = devicep_frames / fundp_frames;
|
||||
devicep_frames = tmp * fundp_frames;
|
||||
}
|
||||
else
|
||||
/* Just pick the max period, because lower values can cause glitches
|
||||
* https://bugzilla.gnome.org/show_bug.cgi?id=794497 */
|
||||
devicep_frames = maxp_frames;
|
||||
|
||||
hr = IAudioClient3_InitializeSharedAudioStream (client,
|
||||
AUDCLNT_STREAMFLAGS_EVENTCALLBACK, devicep_frames, format, NULL);
|
||||
|
|
Loading…
Reference in a new issue