summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornanahi <130121847+na-na-hi@users.noreply.github.com>2024-04-25 12:57:41 -0400
committerKacper Michajłow <kasper93@gmail.com>2024-04-27 00:59:09 +0200
commit7f0961479afb2b010cdccfc306c63134c1d0c7c6 (patch)
treea174c0c0e1d9470cf680420e0df76641df581857
parent76367dae35ef4253e99205ccccf1dbccfc70bdfc (diff)
downloadmpv-7f0961479afb2b010cdccfc306c63134c1d0c7c6.tar.bz2
mpv-7f0961479afb2b010cdccfc306c63134c1d0c7c6.tar.xz
Revert "ao_wasapi: address premature buffer fills in exclusive mode"
This reverts commit 6863eefc3d1d683a08f56aeaca0b4706672f2447.
-rw-r--r--audio/out/ao_wasapi.c25
-rw-r--r--audio/out/ao_wasapi.h1
2 files changed, 13 insertions, 13 deletions
diff --git a/audio/out/ao_wasapi.c b/audio/out/ao_wasapi.c
index 58d2acd09a..bc41309ec6 100644
--- a/audio/out/ao_wasapi.c
+++ b/audio/out/ao_wasapi.c
@@ -193,17 +193,19 @@ static void thread_resume(struct ao *ao)
thread_unpause(ao);
}
-static void set_state_and_wakeup_thread(struct ao *ao,
- enum wasapi_thread_state thread_state)
+static void thread_wakeup(void *ptr)
{
+ struct ao *ao = ptr;
struct wasapi_state *state = ao->priv;
- atomic_store(&state->thread_state, thread_state);
SetEvent(state->hWake);
}
-static void thread_process_dispatch(void *ptr)
+static void set_thread_state(struct ao *ao,
+ enum wasapi_thread_state thread_state)
{
- set_state_and_wakeup_thread(ptr, WASAPI_THREAD_DISPATCH);
+ struct wasapi_state *state = ao->priv;
+ atomic_store(&state->thread_state, thread_state);
+ thread_wakeup(ao);
}
static DWORD __stdcall AudioThread(void *lpParameter)
@@ -223,6 +225,8 @@ static DWORD __stdcall AudioThread(void *lpParameter)
if (WaitForSingleObject(state->hWake, INFINITE) != WAIT_OBJECT_0)
MP_ERR(ao, "Unexpected return value from WaitForSingleObject\n");
+ mp_dispatch_queue_process(state->dispatch, 0);
+
int thread_state = atomic_load(&state->thread_state);
switch (thread_state) {
case WASAPI_THREAD_FEED:
@@ -230,9 +234,6 @@ static DWORD __stdcall AudioThread(void *lpParameter)
if (thread_feed(ao) && thread_feed(ao))
MP_ERR(ao, "Unable to fill buffer fast enough\n");
break;
- case WASAPI_THREAD_DISPATCH:
- mp_dispatch_queue_process(state->dispatch, 0);
- break;
case WASAPI_THREAD_RESET:
thread_reset(ao);
break;
@@ -268,7 +269,7 @@ static void uninit(struct ao *ao)
MP_DBG(ao, "Uninit wasapi\n");
struct wasapi_state *state = ao->priv;
if (state->hWake)
- set_state_and_wakeup_thread(ao, WASAPI_THREAD_SHUTDOWN);
+ set_thread_state(ao, WASAPI_THREAD_SHUTDOWN);
if (state->hAudioThread &&
WaitForSingleObject(state->hAudioThread, INFINITE) != WAIT_OBJECT_0)
@@ -319,7 +320,7 @@ static int init(struct ao *ao)
}
state->dispatch = mp_dispatch_create(state);
- mp_dispatch_set_wakeup_fn(state->dispatch, thread_process_dispatch, ao);
+ mp_dispatch_set_wakeup_fn(state->dispatch, thread_wakeup, ao);
state->init_ok = false;
state->hAudioThread = CreateThread(NULL, 0, &AudioThread, ao, 0, NULL);
@@ -474,12 +475,12 @@ static int control(struct ao *ao, enum aocontrol cmd, void *arg)
static void audio_reset(struct ao *ao)
{
- set_state_and_wakeup_thread(ao, WASAPI_THREAD_RESET);
+ set_thread_state(ao, WASAPI_THREAD_RESET);
}
static void audio_resume(struct ao *ao)
{
- set_state_and_wakeup_thread(ao, WASAPI_THREAD_RESUME);
+ set_thread_state(ao, WASAPI_THREAD_RESUME);
}
static bool audio_set_pause(struct ao *ao, bool paused)
diff --git a/audio/out/ao_wasapi.h b/audio/out/ao_wasapi.h
index e294e317c3..333412bcfe 100644
--- a/audio/out/ao_wasapi.h
+++ b/audio/out/ao_wasapi.h
@@ -48,7 +48,6 @@ void wasapi_change_uninit(struct ao* ao);
enum wasapi_thread_state {
WASAPI_THREAD_FEED = 0,
- WASAPI_THREAD_DISPATCH,
WASAPI_THREAD_RESUME,
WASAPI_THREAD_RESET,
WASAPI_THREAD_SHUTDOWN,