wasapi: Also call CoInitialize in prepare()
diff --git a/sys/wasapi/gstwasapisink.c b/sys/wasapi/gstwasapisink.c
index 60bb97f..e06f07a 100644
--- a/sys/wasapi/gstwasapisink.c
+++ b/sys/wasapi/gstwasapisink.c
@@ -210,8 +210,6 @@
 
   g_clear_pointer (&self->mix_format, CoTaskMemFree);
 
-  CoUninitialize ();
-
   if (self->cached_caps != NULL) {
     gst_caps_unref (self->cached_caps);
     self->cached_caps = NULL;
@@ -221,6 +219,8 @@
   g_clear_pointer (&self->device_strid, g_free);
   self->mute = FALSE;
 
+  CoUninitialize ();
+
   G_OBJECT_CLASS (gst_wasapi_sink_parent_class)->finalize (object);
 }
 
@@ -474,6 +474,8 @@
   guint bpf, rate, devicep_frames;
   HRESULT hr;
 
+  CoInitialize (NULL);
+
   if (gst_wasapi_sink_can_audioclient3 (self)) {
     if (!gst_wasapi_util_initialize_audioclient3 (GST_ELEMENT (self), spec,
             (IAudioClient3 *) self->client, self->mix_format, self->low_latency,
@@ -577,9 +579,7 @@
 {
   GstWasapiSink *self = GST_WASAPI_SINK (asink);
 
-  if (self->sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE &&
-      !gst_wasapi_sink_can_audioclient3 (self))
-    CoUninitialize ();
+  CoUninitialize ();
 
   if (self->thread_priority_handle != NULL) {
     gst_wasapi_util_revert_thread_characteristics
diff --git a/sys/wasapi/gstwasapisrc.c b/sys/wasapi/gstwasapisrc.c
index aa6f012..3170845 100644
--- a/sys/wasapi/gstwasapisrc.c
+++ b/sys/wasapi/gstwasapisrc.c
@@ -213,12 +213,12 @@
 
   g_clear_pointer (&self->mix_format, CoTaskMemFree);
 
-  CoUninitialize ();
-
   g_clear_pointer (&self->cached_caps, gst_caps_unref);
   g_clear_pointer (&self->positions, g_free);
   g_clear_pointer (&self->device_strid, g_free);
 
+  CoUninitialize ();
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -420,6 +420,8 @@
   guint bpf, rate, devicep_frames, buffer_frames;
   HRESULT hr;
 
+  CoInitialize (NULL);
+
   if (gst_wasapi_src_can_audioclient3 (self)) {
     if (!gst_wasapi_util_initialize_audioclient3 (GST_ELEMENT (self), spec,
             (IAudioClient3 *) self->client, self->mix_format, self->low_latency,
@@ -501,9 +503,7 @@
 {
   GstWasapiSrc *self = GST_WASAPI_SRC (asrc);
 
-  if (self->sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE &&
-      !gst_wasapi_src_can_audioclient3 (self))
-    CoUninitialize ();
+  CoUninitialize ();
 
   if (self->thread_priority_handle != NULL) {
     gst_wasapi_util_revert_thread_characteristics
diff --git a/sys/wasapi/gstwasapiutil.c b/sys/wasapi/gstwasapiutil.c
index 9215555..2084dbb 100644
--- a/sys/wasapi/gstwasapiutil.c
+++ b/sys/wasapi/gstwasapiutil.c
@@ -870,10 +870,6 @@
         min_period, &device_period, &device_buffer_duration);
   }
 
-  /* For some reason, we need to call this a second time for exclusive mode */
-  if (sharemode == AUDCLNT_SHAREMODE_EXCLUSIVE)
-    CoInitialize (NULL);
-
   hr = IAudioClient_Initialize (client, sharemode,
       AUDCLNT_STREAMFLAGS_EVENTCALLBACK, device_buffer_duration,
       /* This must always be 0 in shared mode */