void audio_output_cancel(struct audio_output *ao) { g_mutex_lock(ao->mutex); if (audio_output_is_open(ao)) ao_command_async(ao, AO_COMMAND_CANCEL); g_mutex_unlock(ao->mutex); }
void audio_output_drain_async(struct audio_output *ao) { g_mutex_lock(ao->mutex); if (audio_output_is_open(ao)) ao_command_async(ao, AO_COMMAND_DRAIN); g_mutex_unlock(ao->mutex); }
void audio_output_pause(struct audio_output *ao) { if (ao->mixer != NULL && ao->plugin->pause == NULL) /* the device has no pause mode: close the mixer, unless its "global" flag is set (checked by mixer_auto_close()) */ mixer_auto_close(ao->mixer); g_mutex_lock(ao->mutex); if (audio_output_is_open(ao)) ao_command_async(ao, AO_COMMAND_PAUSE); g_mutex_unlock(ao->mutex); }
/** * Sends a command to the #audio_output object and waits for * completion. * * @param ao the #audio_output instance; must be locked */ static void ao_command(struct audio_output *ao, enum audio_output_command cmd) { ao_command_async(ao, cmd); ao_command_wait(ao); }