diff options
-rw-r--r-- | src/mixer/roar_mixer_plugin.c | 35 | ||||
-rw-r--r-- | src/output/roar_output_plugin.c | 49 | ||||
-rw-r--r-- | src/output/roar_output_plugin.h | 22 | ||||
-rw-r--r-- | test/read_mixer.c | 18 |
4 files changed, 78 insertions, 46 deletions
diff --git a/src/mixer/roar_mixer_plugin.c b/src/mixer/roar_mixer_plugin.c index 636a9c00e..47d3c17f9 100644 --- a/src/mixer/roar_mixer_plugin.c +++ b/src/mixer/roar_mixer_plugin.c @@ -34,7 +34,7 @@ typedef struct roar_mpd_mixer { /** the base mixer class */ struct mixer base; - roar_t *self; + struct roar *self; } roar_mixer_t; /** @@ -82,20 +82,7 @@ static int roar_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r) { roar_mixer_t *self = (roar_mixer_t *)mixer; - g_mutex_lock(self->self->lock); - if (self->self->vss && self->self->alive) - { - float l, r; - int error; - roar_vs_volume_get(self->self->vss, &l, &r, &error); - g_mutex_unlock(self->self->lock); - return (l + r) * 50; - } - else - { - g_mutex_unlock(self->self->lock); - return 0; - } + return roar_output_get_volume(self->self); } static bool @@ -103,23 +90,7 @@ roar_mixer_set_volume(struct mixer *mixer, unsigned volume, G_GNUC_UNUSED GError **error_r) { roar_mixer_t *self = (roar_mixer_t *)mixer; - g_mutex_lock(self->self->lock); - if (self->self->vss && self->self->alive) - { - assert(volume <= 100); - - int error; - float level = volume / 100.0; - - roar_vs_volume_mono(self->self->vss, level, &error); - g_mutex_unlock(self->self->lock); - return true; - } - else - { - g_mutex_unlock(self->self->lock); - return false; - } + return roar_output_set_volume(self->self, volume); } const struct mixer_plugin roar_mixer_plugin = { 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 diff --git a/test/read_mixer.c b/test/read_mixer.c index b45a14400..6512e2e94 100644 --- a/test/read_mixer.c +++ b/test/read_mixer.c @@ -55,6 +55,24 @@ pulse_output_set_volume(G_GNUC_UNUSED struct pulse_output *po, #endif +#ifdef HAVE_ROAR +#include "output/roar_output_plugin.h" + +int +roar_output_get_volume(G_GNUC_UNUSED struct roar *roar) +{ + return -1; +} + +bool +roar_output_set_volume(G_GNUC_UNUSED struct roar *roar, + G_GNUC_UNUSED unsigned volume) +{ + return true; +} + +#endif + #ifdef ENABLE_RAOP_OUTPUT #include "output/raop_output_plugin.h" |