aboutsummaryrefslogtreecommitdiffstats
path: root/src/output
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/output/roar_output_plugin.c49
-rw-r--r--src/output/roar_output_plugin.h22
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