Commit 2be6184c authored by Max Kellermann's avatar Max Kellermann

output_all: move _lock_signal() to output_control.c

Better name, better documentation.
parent 8b0b4ff0
...@@ -206,29 +206,13 @@ static void audio_output_wait_all(void) ...@@ -206,29 +206,13 @@ static void audio_output_wait_all(void)
} }
/** /**
* Signal the audio output if it is open, and set the "allow_play"
* flag. This function locks the mutex.
*/
static void
audio_output_lock_signal(struct audio_output *ao)
{
g_mutex_lock(ao->mutex);
ao->allow_play = true;
if (audio_output_is_open(ao))
g_cond_signal(ao->cond);
g_mutex_unlock(ao->mutex);
}
/**
* Signals all audio outputs which are open. * Signals all audio outputs which are open.
*/ */
static void static void
audio_output_signal_all(void) audio_output_allow_play_all(void)
{ {
for (unsigned i = 0; i < num_audio_outputs; ++i) for (unsigned i = 0; i < num_audio_outputs; ++i)
audio_output_lock_signal(&audio_outputs[i]); audio_output_allow_play(&audio_outputs[i]);
} }
static void static void
...@@ -533,7 +517,7 @@ audio_output_all_cancel(void) ...@@ -533,7 +517,7 @@ audio_output_all_cancel(void)
/* the audio outputs are now waiting for a signal, to /* the audio outputs are now waiting for a signal, to
synchronize the cleared music pipe */ synchronize the cleared music pipe */
audio_output_signal_all(); audio_output_allow_play_all();
/* invalidate elapsed_time */ /* invalidate elapsed_time */
......
...@@ -268,6 +268,18 @@ void audio_output_cancel(struct audio_output *ao) ...@@ -268,6 +268,18 @@ void audio_output_cancel(struct audio_output *ao)
} }
void void
audio_output_allow_play(struct audio_output *ao)
{
g_mutex_lock(ao->mutex);
ao->allow_play = true;
if (audio_output_is_open(ao))
g_cond_signal(ao->cond);
g_mutex_unlock(ao->mutex);
}
void
audio_output_release(struct audio_output *ao) audio_output_release(struct audio_output *ao)
{ {
if (ao->always_on) if (ao->always_on)
......
...@@ -72,11 +72,17 @@ audio_output_drain_async(struct audio_output *ao); ...@@ -72,11 +72,17 @@ audio_output_drain_async(struct audio_output *ao);
/** /**
* Clear the "allow_play" flag and send the "CANCEL" command * Clear the "allow_play" flag and send the "CANCEL" command
* asynchronously. To finish the operation, the caller has to set the * asynchronously. To finish the operation, the caller has to call
* "allow_play" flag and signal the thread. * audio_output_allow_play().
*/ */
void audio_output_cancel(struct audio_output *ao); void audio_output_cancel(struct audio_output *ao);
/**
* Set the "allow_play" and signal the thread.
*/
void
audio_output_allow_play(struct audio_output *ao);
void audio_output_close(struct audio_output *ao); void audio_output_close(struct audio_output *ao);
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment