diff options
author | Max Kellermann <max@duempel.org> | 2011-09-17 19:33:51 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2011-09-17 19:33:51 +0200 |
commit | 947848ebf6eb4706e8b3a88e7506e893b01f9a07 (patch) | |
tree | 354d2f860d9aa6d3a9046b170520b78bb9b20c4b /src/output/roar_output_plugin.c | |
parent | 5e22fe488ed7209c6e470e542826da4674e93338 (diff) | |
download | mpd-947848ebf6eb4706e8b3a88e7506e893b01f9a07.tar.gz mpd-947848ebf6eb4706e8b3a88e7506e893b01f9a07.tar.xz mpd-947848ebf6eb4706e8b3a88e7506e893b01f9a07.zip |
output/roar: export volume methods
Use these instead of exposing the internal roar_t struct.
Diffstat (limited to 'src/output/roar_output_plugin.c')
-rw-r--r-- | src/output/roar_output_plugin.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/output/roar_output_plugin.c b/src/output/roar_output_plugin.c index f9d44a3d8..059f83b71 100644 --- a/src/output/roar_output_plugin.c +++ b/src/output/roar_output_plugin.c @@ -30,16 +30,65 @@ #include <string.h> #include <stdint.h> +#include <roaraudio.h> #undef G_LOG_DOMAIN #define G_LOG_DOMAIN "roaraudio" +typedef struct roar +{ + roar_vs_t * vss; + int err; + char *host; + char *name; + int role; + struct roar_connection con; + struct roar_audio_info info; + GMutex *lock; + volatile bool alive; +} roar_t; + static inline GQuark roar_output_quark(void) { return g_quark_from_static_string("roar_output"); } +int +roar_output_get_volume(struct roar *roar) +{ + g_mutex_lock(roar->lock); + if (roar->vss && roar->alive) { + float l, r; + int error; + roar_vs_volume_get(roar->vss, &l, &r, &error); + g_mutex_unlock(roar->lock); + return (l + r) * 50; + } else { + g_mutex_unlock(roar->lock); + return 0; + } +} + +bool +roar_output_set_volume(struct roar *roar, unsigned volume) +{ + g_mutex_lock(roar->lock); + if (roar->vss && roar->alive) { + assert(volume <= 100); + + int error; + float level = volume / 100.0; + + roar_vs_volume_mono(roar->vss, level, &error); + g_mutex_unlock(roar->lock); + return true; + } else { + g_mutex_unlock(roar->lock); + return false; + } +} + static void roar_configure(struct roar * self, const struct config_param *param) { |