mixer_control: allow methods "open" and "close" to be NULL

It's possible to have a mixer implementation which does not explicitly
need the methods open() and close().
This commit is contained in:
Max Kellermann 2009-10-23 09:15:51 +02:00
parent 7dd172efec
commit ede828c910
2 changed files with 5 additions and 20 deletions

View File

@ -61,23 +61,6 @@ software_mixer_finish(struct mixer *data)
g_free(sm);
}
static bool
software_mixer_open(struct mixer *data, G_GNUC_UNUSED GError **error_r)
{
struct software_mixer *sm = (struct software_mixer *)data;
(void)sm;
return true;
}
static void
software_mixer_close(struct mixer *data)
{
struct software_mixer *sm = (struct software_mixer *)data;
(void)sm;
}
static int
software_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r)
{
@ -109,8 +92,6 @@ software_mixer_set_volume(struct mixer *mixer, unsigned volume,
const struct mixer_plugin software_mixer_plugin = {
.init = software_mixer_init,
.finish = software_mixer_finish,
.open = software_mixer_open,
.close = software_mixer_close,
.get_volume = software_mixer_get_volume,
.set_volume = software_mixer_set_volume,
.global = true,

View File

@ -66,6 +66,8 @@ mixer_open(struct mixer *mixer, GError **error_r)
if (mixer->open)
success = true;
else if (mixer->plugin->open == NULL)
success = mixer->open = true;
else
success = mixer->open = mixer->plugin->open(mixer, error_r);
@ -83,7 +85,9 @@ mixer_close_internal(struct mixer *mixer)
assert(mixer->plugin != NULL);
assert(mixer->open);
mixer->plugin->close(mixer);
if (mixer->plugin->close != NULL)
mixer->plugin->close(mixer);
mixer->open = false;
}