output_api: moved the command check out of method pause()
Move the "while" loop which checks for commands to the caller ao_pause(). This simplifies the pause() method, and lets us remove audio_output_is_pending().
This commit is contained in:
parent
6aa734dc35
commit
231636b9eb
@ -506,19 +506,12 @@ my_shout_play(void *data, const char *chunk, size_t size)
|
||||
return true;
|
||||
}
|
||||
|
||||
static void my_shout_pause(void *data)
|
||||
static bool
|
||||
my_shout_pause(void *data)
|
||||
{
|
||||
struct shout_data *sd = (struct shout_data *)data;
|
||||
static const char silence[1020];
|
||||
int ret;
|
||||
|
||||
/* play silence until the player thread sends us a command */
|
||||
|
||||
while (sd->opened && !audio_output_is_pending(sd->audio_output)) {
|
||||
ret = my_shout_play(data, silence, sizeof(silence));
|
||||
if (ret != 0)
|
||||
break;
|
||||
}
|
||||
return my_shout_play(data, silence, sizeof(silence));
|
||||
}
|
||||
|
||||
static void my_shout_set_tag(void *data,
|
||||
|
@ -19,14 +19,7 @@
|
||||
#include "output_api.h"
|
||||
#include "output_internal.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
const char *audio_output_get_name(const struct audio_output *ao)
|
||||
{
|
||||
return ao->name;
|
||||
}
|
||||
|
||||
bool audio_output_is_pending(const struct audio_output *ao)
|
||||
{
|
||||
return ao->command != AO_COMMAND_NONE;
|
||||
}
|
||||
|
@ -84,8 +84,11 @@ struct audio_output_plugin {
|
||||
* silence during pause, so their clients won't be
|
||||
* disconnected. Plugins which do not support pausing will
|
||||
* simply be closed, and have to be reopened when unpaused.
|
||||
*
|
||||
* @return false on error (output will be closed then), true
|
||||
* for continue to pause
|
||||
*/
|
||||
void (*pause)(void *data);
|
||||
bool (*pause)(void *data);
|
||||
|
||||
/**
|
||||
* Try to cancel data which may still be in the device's
|
||||
@ -131,9 +134,4 @@ struct audio_output;
|
||||
|
||||
const char *audio_output_get_name(const struct audio_output *ao);
|
||||
|
||||
/**
|
||||
* Returns true if there is a command pending.
|
||||
*/
|
||||
bool audio_output_is_pending(const struct audio_output *ao);
|
||||
|
||||
#endif
|
||||
|
@ -77,7 +77,17 @@ static void ao_pause(struct audio_output *ao)
|
||||
if (ao->plugin->pause != NULL) {
|
||||
/* pause is supported */
|
||||
ao_command_finished(ao);
|
||||
ao->plugin->pause(ao->data);
|
||||
|
||||
do {
|
||||
bool ret;
|
||||
|
||||
ret = ao->plugin->pause(ao->data);
|
||||
if (!ret) {
|
||||
ao->plugin->close(ao->data);
|
||||
pcm_convert_deinit(&ao->convState);
|
||||
ao->open = false;
|
||||
}
|
||||
} while (ao->command == AO_COMMAND_NONE);
|
||||
} else {
|
||||
/* pause is not supported - simply close the device */
|
||||
ao->plugin->close(ao->data);
|
||||
|
Loading…
Reference in New Issue
Block a user