aboutsummaryrefslogtreecommitdiffstats
path: root/src/mixer
diff options
context:
space:
mode:
authorFrançois Revol <revol@free.fr>2015-09-17 22:18:16 +0200
committerMax Kellermann <max@duempel.org>2015-09-17 22:46:46 +0200
commit7743647460575fd9ea4d5e29e5a23e3faf56c58c (patch)
tree345a617582882dbe72170e4f09248fcb0867b940 /src/mixer
parent352ec364f02aaf40fee571a1f7258cb3be0c17f3 (diff)
downloadmpd-7743647460575fd9ea4d5e29e5a23e3faf56c58c.tar.gz
mpd-7743647460575fd9ea4d5e29e5a23e3faf56c58c.tar.xz
mpd-7743647460575fd9ea4d5e29e5a23e3faf56c58c.zip
output: add native Haiku audio output and mixer support
Also uses the notification system to display tags.
Diffstat (limited to 'src/mixer')
-rw-r--r--src/mixer/MixerList.hxx1
-rw-r--r--src/mixer/plugins/HaikuMixerPlugin.cxx73
2 files changed, 74 insertions, 0 deletions
diff --git a/src/mixer/MixerList.hxx b/src/mixer/MixerList.hxx
index 070008400..f2aa2e61c 100644
--- a/src/mixer/MixerList.hxx
+++ b/src/mixer/MixerList.hxx
@@ -30,6 +30,7 @@ struct MixerPlugin;
extern const MixerPlugin null_mixer_plugin;
extern const MixerPlugin software_mixer_plugin;
extern const MixerPlugin alsa_mixer_plugin;
+extern const MixerPlugin haiku_mixer_plugin;
extern const MixerPlugin oss_mixer_plugin;
extern const MixerPlugin roar_mixer_plugin;
extern const MixerPlugin pulse_mixer_plugin;
diff --git a/src/mixer/plugins/HaikuMixerPlugin.cxx b/src/mixer/plugins/HaikuMixerPlugin.cxx
new file mode 100644
index 000000000..d6dfb663d
--- /dev/null
+++ b/src/mixer/plugins/HaikuMixerPlugin.cxx
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
+ * Copyright (C) 2010-2011 Philipp 'ph3-der-loewe' Schafft
+ * Copyright (C) 2010-2011 Hans-Kristian 'maister' Arntzen
+ * Copyright (C) 2014-2015 François 'mmu_man' Revol
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+
+#include "config.h"
+#include "mixer/MixerInternal.hxx"
+#include "output/plugins/HaikuOutputPlugin.hxx"
+#include "Compiler.h"
+
+class HaikuMixer final : public Mixer {
+ /** the base mixer class */
+ HaikuOutput &self;
+
+public:
+ HaikuMixer(HaikuOutput &_output, MixerListener &_listener)
+ :Mixer(haiku_mixer_plugin, _listener),
+ self(_output) {}
+
+ /* virtual methods from class Mixer */
+ virtual bool Open(gcc_unused Error &error) override {
+ return true;
+ }
+
+ virtual void Close() override {
+ }
+
+ virtual int GetVolume(Error &error) override;
+ virtual bool SetVolume(unsigned volume, Error &error) override;
+};
+
+static Mixer *
+haiku_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao,
+ MixerListener &listener,
+ gcc_unused const ConfigBlock &block,
+ gcc_unused Error &error)
+{
+ return new HaikuMixer((HaikuOutput &)ao, listener);
+}
+
+int
+HaikuMixer::GetVolume(gcc_unused Error &error)
+{
+ return haiku_output_get_volume(self);
+}
+
+bool
+HaikuMixer::SetVolume(unsigned volume, gcc_unused Error &error)
+{
+ return haiku_output_set_volume(self, volume);
+}
+
+const MixerPlugin haiku_mixer_plugin = {
+ haiku_mixer_init,
+ false,
+};