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

View File

@ -65,12 +65,6 @@ struct audio_output {
*/ */
struct mixer *mixer; 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? * Has the user enabled this device?
*/ */
@ -99,6 +93,11 @@ struct audio_output {
*/ */
GTimer *fail_timer; GTimer *fail_timer;
/**
* The configured audio format.
*/
struct audio_format config_audio_format;
/** /**
* The audio_format in which audio data is received from the * The audio_format in which audio data is received from the
* player thread (which in turn receives it from the decoder). * player thread (which in turn receives it from the decoder).

View File

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