aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mixer/roar_mixer_plugin.c35
-rw-r--r--src/output/roar_output_plugin.c49
-rw-r--r--src/output/roar_output_plugin.h22
-rw-r--r--test/read_mixer.c18
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"