aboutsummaryrefslogtreecommitdiffstats
path: root/src/output/roar_output_plugin.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2011-09-17 19:33:51 +0200
committerMax Kellermann <max@duempel.org>2011-09-17 19:33:51 +0200
commit947848ebf6eb4706e8b3a88e7506e893b01f9a07 (patch)
tree354d2f860d9aa6d3a9046b170520b78bb9b20c4b /src/output/roar_output_plugin.c
parent5e22fe488ed7209c6e470e542826da4674e93338 (diff)
downloadmpd-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.c49
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)
{