output: convert config_audio_format to an audio_format struct

This allows more sophisticated audio format selection.
This commit is contained in:
Max Kellermann 2009-10-21 22:37:28 +02:00
parent 643650dba7
commit 2c05430002
3 changed files with 16 additions and 14 deletions

View File

@ -154,14 +154,14 @@ audio_output_init(struct audio_output *ao, const struct config_param *param,
p = config_get_block_string(param, AUDIO_OUTPUT_FORMAT,
NULL);
ao->config_audio_format = p != NULL;
if (p != NULL) {
bool success =
audio_format_parse(&ao->out_audio_format,
audio_format_parse(&ao->config_audio_format,
p, error_r);
if (!success)
return false;
}
} else
audio_format_clear(&ao->config_audio_format);
} else {
g_warning("No \"%s\" defined in config file\n",
CONF_AUDIO_OUTPUT);
@ -174,7 +174,8 @@ audio_output_init(struct audio_output *ao, const struct config_param *param,
plugin->name);
ao->name = "default detected output";
ao->config_audio_format = false;
audio_format_clear(&ao->config_audio_format);
}
ao->plugin = plugin;
@ -194,8 +195,8 @@ audio_output_init(struct audio_output *ao, const struct config_param *param,
ao->mutex = g_mutex_new();
ao->data = ao_plugin_init(plugin,
ao->config_audio_format
? &ao->out_audio_format : NULL,
audio_format_defined(&ao->config_audio_format)
? &ao->config_audio_format : NULL,
param, error_r);
if (ao->data == NULL)
return false;

View File

@ -65,12 +65,6 @@ struct audio_output {
*/
struct mixer *mixer;
/**
* This flag is true, when the audio_format of this device is
* configured in mpd.conf.
*/
bool config_audio_format;
/**
* Has the user enabled this device?
*/
@ -99,6 +93,11 @@ struct audio_output {
*/
GTimer *fail_timer;
/**
* The configured audio format.
*/
struct audio_format config_audio_format;
/**
* The audio_format in which audio data is received from the
* player thread (which in turn receives it from the decoder).

View File

@ -67,7 +67,9 @@ ao_open(struct audio_output *ao)
return;
}
if (!ao->config_audio_format)
if (audio_format_defined(&ao->config_audio_format))
ao->out_audio_format = ao->config_audio_format;
else
ao->out_audio_format = *filter_audio_format;
success = ao_plugin_open(ao->plugin, ao->data,
@ -164,7 +166,7 @@ ao_reopen_filter(struct audio_output *ao)
static void
ao_reopen(struct audio_output *ao)
{
if (!ao->config_audio_format) {
if (!audio_format_defined(&ao->config_audio_format)) {
if (ao->open) {
const struct music_pipe *mp = ao->pipe;
ao_close(ao);