From 947848ebf6eb4706e8b3a88e7506e893b01f9a07 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sat, 17 Sep 2011 19:33:51 +0200
Subject: output/roar: export volume methods

Use these instead of exposing the internal roar_t struct.
---
 src/mixer/roar_mixer_plugin.c   | 35 +++--------------------------
 src/output/roar_output_plugin.c | 49 +++++++++++++++++++++++++++++++++++++++++
 src/output/roar_output_plugin.h | 22 +++++++-----------
 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"
 
-- 
cgit v1.2.3