From 5a1b37b1f3977e516e9f5fffd7299def3162b3f7 Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sun, 27 May 2018 14:31:55 +0200 Subject: wasapisink: fix regression in shared mode segment size In commit fd806628a8 (839cc3926 in the stable branch) I changed the segment size to match exactly the buffer size. I missed that this is only valid in exclusive mode and in shared mode the buffer size is a multiple of the device period. Revert the logic for the shared mode. https://bugzilla.gnome.org/show_bug.cgi?id=796354 https://bugzilla.gnome.org/show_bug.cgi?id=796858 --- sys/wasapi/gstwasapiutil.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/wasapi/gstwasapiutil.c b/sys/wasapi/gstwasapiutil.c index e1ac7e568..1ca535722 100644 --- a/sys/wasapi/gstwasapiutil.c +++ b/sys/wasapi/gstwasapiutil.c @@ -899,10 +899,16 @@ gst_wasapi_util_initialize_audioclient (GstElement * self, } HR_FAILED_RET (hr, IAudioClient::Initialize, FALSE); - hr = IAudioClient_GetBufferSize (client, &n_frames); - HR_FAILED_RET (hr, IAudioClient::GetBufferSize, FALSE); + if (sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE) { + /* We use the device period for the segment size and that needs to match + * the buffer size exactly when we write into it */ + hr = IAudioClient_GetBufferSize (client, &n_frames); + HR_FAILED_RET (hr, IAudioClient::GetBufferSize, FALSE); - *ret_devicep_frames = n_frames; + *ret_devicep_frames = n_frames; + } else { + *ret_devicep_frames = (rate * device_period * 100) / GST_SECOND; + } return TRUE; } -- cgit v1.2.3