wasapisink: fix regression in shared mode segment size
authorChristoph Reiter <reiter.christoph@gmail.com>
Sun, 27 May 2018 12:31:55 +0000 (14:31 +0200)
committerNirbheek Chauhan <nirbheek@centricular.com>
Thu, 2 Aug 2018 11:30:03 +0000 (17:00 +0530)
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

index e1ac7e5..1ca5357 100644 (file)
@@ -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;
 }