diff options
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/roar_output_plugin.c | 49 | ||||
-rw-r--r-- | src/output/roar_output_plugin.h | 22 |
2 files changed, 57 insertions, 14 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) { diff --git a/src/output/roar_output_plugin.h b/src/output/roar_output_plugin.h index 08e272007..e6eff1e08 100644 --- a/src/output/roar_output_plugin.h +++ b/src/output/roar_output_plugin.h @@ -22,20 +22,14 @@ #ifndef __ROAR_OUTPUT_H #define __ROAR_OUTPUT_H -#include <roaraudio.h> -#include <glib.h> +#include <stdbool.h> -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; +struct roar; + +int +roar_output_get_volume(struct roar *roar); + +bool +roar_output_set_volume(struct roar *roar, unsigned volume); #endif |