diff options
Diffstat (limited to '')
-rw-r--r-- | src/output/alsa_plugin.c | 17 | ||||
-rw-r--r-- | src/output/oss_plugin.c | 17 | ||||
-rw-r--r-- | src/output_plugin.h | 23 |
3 files changed, 35 insertions, 22 deletions
diff --git a/src/output/alsa_plugin.c b/src/output/alsa_plugin.c index c26fcdf05..bbb03e80b 100644 --- a/src/output/alsa_plugin.c +++ b/src/output/alsa_plugin.c @@ -156,6 +156,14 @@ alsa_finish(void *data) alsa_data_free(ad); } +static struct mixer * +alsa_get_mixer(void *data) +{ + struct alsa_data *ad = data; + + return ad->mixer; +} + static bool alsa_test_default_device(void) { @@ -465,21 +473,14 @@ alsa_play(void *data, const char *chunk, size_t size) return true; } -static bool -alsa_control(void *data, int cmd, void *arg) -{ - struct alsa_data *ad = data; - return mixer_control(ad->mixer, cmd, arg); -} - const struct audio_output_plugin alsaPlugin = { .name = "alsa", .test_default_device = alsa_test_default_device, .init = alsa_init, .finish = alsa_finish, + .get_mixer = alsa_get_mixer, .open = alsa_open, .play = alsa_play, .cancel = alsa_cancel, .close = alsa_close, - .control = alsa_control }; diff --git a/src/output/oss_plugin.c b/src/output/oss_plugin.c index c4b4698ee..007d5bc84 100644 --- a/src/output/oss_plugin.c +++ b/src/output/oss_plugin.c @@ -410,6 +410,14 @@ static void oss_finishDriver(void *data) freeOssData(od); } +static struct mixer * +oss_get_mixer(void *data) +{ + OssData *od = data; + + return od->mixer; +} + static int setParam(OssData * od, unsigned param, int *value) { int val = *value; @@ -571,21 +579,14 @@ oss_playAudio(void *data, const char *playChunk, size_t size) return true; } -static bool -oss_control(void *data, int cmd, void *arg) -{ - OssData *od = data; - return mixer_control(od->mixer, cmd, arg); -} - const struct audio_output_plugin ossPlugin = { .name = "oss", .test_default_device = oss_testDefault, .init = oss_initDriver, .finish = oss_finishDriver, + .get_mixer = oss_get_mixer, .open = oss_openDevice, .play = oss_playAudio, .cancel = oss_dropBufferedAudio, .close = oss_closeDevice, - .control = oss_control, }; diff --git a/src/output_plugin.h b/src/output_plugin.h index 0166322fc..b652dc44e 100644 --- a/src/output_plugin.h +++ b/src/output_plugin.h @@ -64,6 +64,15 @@ struct audio_output_plugin { void (*finish)(void *data); /** + * Returns the mixer device associated with this audio output. + * This does not actually open the mixer device yet. + * + * @return the mixer object, or NULL if there is no mixer + * attached to this audio output + */ + struct mixer *(*get_mixer)(void *data); + + /** * Really open the device. * @param audio_format the audio format in which data is going * to be delivered; may be modified by the plugin @@ -104,12 +113,6 @@ struct audio_output_plugin { * for continue to pause */ bool (*pause)(void *data); - - /** - * Control the device. Usualy used for implementing - * set and get mixer levels - */ - bool (*control)(void *data, int cmd, void *arg); }; static inline bool @@ -135,6 +138,14 @@ ao_plugin_finish(const struct audio_output_plugin *plugin, void *data) plugin->finish(data); } +static inline struct mixer * +ao_plugin_get_mixer(const struct audio_output_plugin *plugin, void *data) +{ + return plugin->get_mixer != NULL + ? plugin->get_mixer(data) + : NULL; +} + static inline bool ao_plugin_open(const struct audio_output_plugin *plugin, void *data, struct audio_format *audio_format) |