diff --git a/libobs/audio-monitoring/win32/wasapi-output.c b/libobs/audio-monitoring/win32/wasapi-output.c index 04d991de1..ec4259594 100644 --- a/libobs/audio-monitoring/win32/wasapi-output.c +++ b/libobs/audio-monitoring/win32/wasapi-output.c @@ -48,7 +48,7 @@ struct audio_monitor { uint32_t delay_size; DARRAY(float) buf; - pthread_mutex_t playback_mutex; + SRWLOCK playback_mutex; }; /* #define DEBUG_AUDIO */ @@ -152,7 +152,7 @@ static void on_audio_playback(void *param, obs_source_t *source, bool success; BYTE *output; - if (pthread_mutex_trylock(&monitor->playback_mutex) != 0) { + if (!TryAcquireSRWLockExclusive(&monitor->playback_mutex)) { return; } if (os_atomic_load_long(&source->activate_refs) == 0) { @@ -206,7 +206,7 @@ static void on_audio_playback(void *param, obs_source_t *source, muted ? AUDCLNT_BUFFERFLAGS_SILENT : 0); unlock: - pthread_mutex_unlock(&monitor->playback_mutex); + ReleaseSRWLockExclusive(&monitor->playback_mutex); } static inline void audio_monitor_free(struct audio_monitor *monitor) @@ -259,8 +259,6 @@ static bool audio_monitor_init(struct audio_monitor *monitor, UINT32 frames; HRESULT hr; - pthread_mutex_init_value(&monitor->playback_mutex); - monitor->source = source; const char *id = obs->audio.monitoring_device_id; @@ -375,17 +373,14 @@ static bool audio_monitor_init(struct audio_monitor *monitor, goto fail; } - if (pthread_mutex_init(&monitor->playback_mutex, NULL) != 0) { - warn("%s: Failed to initialize mutex", __FUNCTION__); - goto fail; - } - hr = monitor->client->lpVtbl->Start(monitor->client); if (FAILED(hr)) { warn("%s: Failed to start audio: %08lX", __FUNCTION__, hr); goto fail; } + InitializeSRWLock(&monitor->playback_mutex); + success = true; fail: @@ -434,9 +429,9 @@ void audio_monitor_reset(struct audio_monitor *monitor) struct audio_monitor new_monitor = {0}; bool success; - pthread_mutex_lock(&monitor->playback_mutex); + AcquireSRWLockExclusive(&monitor->playback_mutex); success = audio_monitor_init(&new_monitor, monitor->source); - pthread_mutex_unlock(&monitor->playback_mutex); + ReleaseSRWLockExclusive(&monitor->playback_mutex); if (success) { obs_source_t *source = monitor->source;