diff options
author | Viliam Mateicka <viliam.mateicka@gmail.com> | 2009-01-10 17:53:33 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-10 17:55:38 +0100 |
commit | 11c29cccb3409fb4d0fea5171a56230253583864 (patch) | |
tree | 6ab080de10e9f0d3c4acf48b24815689f9fc4be5 /src/mixer_api.h | |
parent | 8ebe7bfb250f2b1048d6e7f6c2477717daaad8e9 (diff) | |
download | mpd-11c29cccb3409fb4d0fea5171a56230253583864.tar.gz mpd-11c29cccb3409fb4d0fea5171a56230253583864.tar.xz mpd-11c29cccb3409fb4d0fea5171a56230253583864.zip |
Introducing mixer api
This patch tryes to introduce pluggable mixer (struct mixer_plugin) along with some basic infrastructure (mixer_* functions). Instance of mixer (struct mixer) is used in
alsa and oss output plugin
Diffstat (limited to 'src/mixer_api.h')
-rw-r--r-- | src/mixer_api.h | 74 |
1 files changed, 51 insertions, 23 deletions
diff --git a/src/mixer_api.h b/src/mixer_api.h index 43dc3299d..67d08427c 100644 --- a/src/mixer_api.h +++ b/src/mixer_api.h @@ -4,30 +4,58 @@ #include "conf.h" -/** - * alsa mixer +/* + * list of currently implemented mixers */ -struct alsa_mixer; - -struct alsa_mixer *alsa_mixer_init(void); -void alsa_mixer_finish(struct alsa_mixer *am); -void alsa_mixer_configure(struct alsa_mixer *am, ConfigParam *param); -bool alsa_mixer_open(struct alsa_mixer *am); -bool alsa_mixer_control(struct alsa_mixer *am, int cmd, void *arg); -void alsa_mixer_close(struct alsa_mixer *am); - -/** - * oss mixer - */ - -struct oss_mixer; - -struct oss_mixer *oss_mixer_init(void); -void oss_mixer_finish(struct oss_mixer *am); -void oss_mixer_configure(struct oss_mixer *am, ConfigParam *param); -bool oss_mixer_open(struct oss_mixer *am); -bool oss_mixer_control(struct oss_mixer *am, int cmd, void *arg); -void oss_mixer_close(struct oss_mixer *am); +extern struct mixer_plugin alsa_mixer; +extern struct mixer_plugin oss_mixer; + +struct mixer_data; + +struct mixer_plugin { + + /** + * Allocate and initialize mixer data + */ + struct mixer_data *(*init)(void); + + /** + * Finish and free mixer data + */ + void (*finish)(struct mixer_data *data); + + /** + * Setup and configure mixer + */ + void (*configure)(struct mixer_data *data, ConfigParam *param); + + /** + * Open mixer device + */ + bool (*open)(struct mixer_data *data); + + /** + * Control mixer device. + */ + bool (*control)(struct mixer_data *data, int cmd, void *arg); + + /** + * Close mixer device + */ + void (*close)(struct mixer_data *data); +}; + +struct mixer { + struct mixer_plugin *plugin; + struct mixer_data *data; +}; + +void mixer_init(struct mixer *mixer, struct mixer_plugin *plugin); +void mixer_finish(struct mixer *mixer); +void mixer_configure(struct mixer *mixer, ConfigParam *param); +bool mixer_open(struct mixer *mixer); +bool mixer_control(struct mixer *mixer, int cmd, void *arg); +void mixer_close(struct mixer *mixer); #endif |