summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backends/Makefile.am4
-rw-r--r--backends/oss/Makefile.am26
-rw-r--r--backends/oss/oss-backend.c136
-rw-r--r--backends/oss/oss-backend.h58
-rw-r--r--configure.ac36
-rw-r--r--libmatemixer/matemixer-enums.h2
6 files changed, 262 insertions, 0 deletions
diff --git a/backends/Makefile.am b/backends/Makefile.am
index e223042..8ca01bd 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -8,4 +8,8 @@ if HAVE_PULSEAUDIO
SUBDIRS += pulse
endif
+if HAVE_OSS
+SUBDIRS += oss
+endif
+
-include $(top_srcdir)/git.mk
diff --git a/backends/oss/Makefile.am b/backends/oss/Makefile.am
new file mode 100644
index 0000000..3f0b8ea
--- /dev/null
+++ b/backends/oss/Makefile.am
@@ -0,0 +1,26 @@
+backenddir = $(libdir)/libmatemixer
+
+backend_LTLIBRARIES = libmatemixer-oss.la
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -DG_LOG_DOMAIN=\"libmatemixer-oss\"
+
+libmatemixer_oss_la_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(OSS_CFLAGS)
+
+libmatemixer_oss_la_SOURCES = \
+ oss-backend.c \
+ oss-backend.h
+
+libmatemixer_oss_la_LIBADD = \
+ $(GLIB_LIBS)
+
+libmatemixer_oss_la_LDFLAGS = \
+ -avoid-version \
+ -no-undefined \
+ -export-dynamic \
+ -module
+
+-include $(top_srcdir)/git.mk
diff --git a/backends/oss/oss-backend.c b/backends/oss/oss-backend.c
new file mode 100644
index 0000000..22d3547
--- /dev/null
+++ b/backends/oss/oss-backend.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2014 Michal Ratajsky <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the licence, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libmatemixer/matemixer-backend.h>
+#include <libmatemixer/matemixer-backend-module.h>
+#include <libmatemixer/matemixer-enums.h>
+
+#include "oss-backend.h"
+
+#define BACKEND_NAME "OSS"
+#define BACKEND_PRIORITY 90
+
+enum {
+ PROP_0,
+ PROP_STATE,
+ PROP_DEFAULT_INPUT,
+ PROP_DEFAULT_OUTPUT,
+ N_PROPERTIES
+};
+
+static void mate_mixer_backend_interface_init (MateMixerBackendInterface *iface);
+
+static void oss_backend_class_init (OssBackendClass *klass);
+static void oss_backend_class_finalize (OssBackendClass *klass);
+static void oss_backend_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void oss_backend_init (OssBackend *oss);
+
+G_DEFINE_DYNAMIC_TYPE_EXTENDED (OssBackend, oss_backend,
+ G_TYPE_OBJECT, 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC (MATE_MIXER_TYPE_BACKEND,
+ mate_mixer_backend_interface_init))
+
+static gboolean backend_open (MateMixerBackend *backend);
+static MateMixerState backend_get_state (MateMixerBackend *backend);
+
+static MateMixerBackendInfo info;
+
+void
+backend_module_init (GTypeModule *module)
+{
+ oss_backend_register_type (module);
+
+ info.name = BACKEND_NAME;
+ info.priority = BACKEND_PRIORITY;
+ info.g_type = OSS_TYPE_BACKEND;
+ info.backend_type = MATE_MIXER_BACKEND_OSS;
+}
+
+const MateMixerBackendInfo *
+backend_module_get_info (void)
+{
+ return &info;
+}
+
+static void
+mate_mixer_backend_interface_init (MateMixerBackendInterface *iface)
+{
+ iface->open = backend_open;
+ iface->get_state = backend_get_state;
+}
+
+static void
+oss_backend_class_init (OssBackendClass *klass)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->get_property = oss_backend_get_property;
+
+ g_object_class_override_property (object_class, PROP_STATE, "state");
+ g_object_class_override_property (object_class, PROP_DEFAULT_INPUT, "default-input");
+ g_object_class_override_property (object_class, PROP_DEFAULT_OUTPUT, "default-output");
+}
+
+/* Called in the code generated by G_DEFINE_DYNAMIC_TYPE_EXTENDED() */
+static void
+oss_backend_class_finalize (OssBackendClass *klass)
+{
+}
+
+static void
+oss_backend_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (param_id) {
+ case PROP_STATE:
+ g_value_set_enum (value, MATE_MIXER_STATE_READY);
+ break;
+ case PROP_DEFAULT_INPUT:
+ case PROP_DEFAULT_OUTPUT:
+ g_value_set_object (value, NULL);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+oss_backend_init (OssBackend *oss)
+{
+}
+
+static gboolean
+backend_open (MateMixerBackend *backend)
+{
+ return TRUE;
+}
+
+static MateMixerState
+backend_get_state (MateMixerBackend *backend)
+{
+ return MATE_MIXER_STATE_READY;
+}
diff --git a/backends/oss/oss-backend.h b/backends/oss/oss-backend.h
new file mode 100644
index 0000000..02567ed
--- /dev/null
+++ b/backends/oss/oss-backend.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2014 Michal Ratajsky <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the licence, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef OSS_BACKEND_H
+#define OSS_BACKEND_H
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libmatemixer/matemixer-backend-module.h>
+
+#define OSS_TYPE_BACKEND \
+ (oss_backend_get_type ())
+#define OSS_BACKEND(o) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((o), OSS_TYPE_BACKEND, OssBackend))
+#define OSS_IS_BACKEND(o) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((o), OSS_TYPE_BACKEND))
+#define OSS_BACKEND_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_CAST ((k), OSS_TYPE_BACKEND, OssBackendClass))
+#define OSS_IS_BACKEND_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_TYPE ((k), OSS_TYPE_BACKEND))
+#define OSS_BACKEND_GET_CLASS(o) \
+ (G_TYPE_INSTANCE_GET_CLASS ((o), OSS_TYPE_BACKEND, OssBackendClass))
+
+typedef struct _OssBackend OssBackend;
+typedef struct _OssBackendClass OssBackendClass;
+
+struct _OssBackend
+{
+ GObject parent;
+};
+
+struct _OssBackendClass
+{
+ GObjectClass parent_class;
+};
+
+GType oss_backend_get_type (void) G_GNUC_CONST;
+
+/* Support function for dynamic loading of the backend module */
+void backend_module_init (GTypeModule *module);
+const MateMixerBackendInfo *backend_module_get_info (void);
+
+#endif /* OSS_BACKEND_H */
diff --git a/configure.ac b/configure.ac
index 3adfcba..d9bffc6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,6 +118,40 @@ AC_SUBST(HAVE_PULSEAUDIO)
AC_SUBST(PULSEAUDIO_CFLAGS)
AC_SUBST(PULSEAUDIO_LIBS)
+# -----------------------------------------------------------------------
+# OSS
+# -----------------------------------------------------------------------
+AC_ARG_ENABLE([oss],
+ AS_HELP_STRING([--enable-oss],
+ [Enable OSS backend module @<:@default=no@:>@]),
+ enable_oss=$enableval, enable_oss=no)
+
+if test "x$enable_oss" != "xno"; then
+ AC_CHECK_HEADERS([soundcard.h sys/soundcard.h machine/soundcard.h])
+ if test "x$ac_cv_header_soundcard_h" = "xyes" -o \
+ "x$ac_cv_header_sys_soundcard_h" = "xyes" -o \
+ "x$ac_cv_header_machine_soundcard_h" = "xyes"; then
+ have_oss=yes
+ else
+ have_oss=no
+ fi
+
+ if test "x$enable_oss" = "xyes" -a "x$have_oss" = "xno"; then
+ AC_MSG_ERROR([OSS support explicitly requested but dependencies not found])
+ fi
+
+ if test "x$have_oss" = "xyes" ; then
+ AC_DEFINE(HAVE_OSS, [], [Define if we have OSS support])
+ fi
+else
+ have_oss=no
+fi
+
+AM_CONDITIONAL(HAVE_OSS, test "x$have_oss" = "xyes")
+
+AC_SUBST(HAVE_OSS)
+AC_SUBST(OSS_CFLAGS)
+
# =======================================================================
# Compiler warnings
# =======================================================================
@@ -169,6 +203,7 @@ Makefile
libmatemixer/Makefile
backends/Makefile
backends/null/Makefile
+backends/oss/Makefile
backends/pulse/Makefile
data/Makefile
data/libmatemixer.pc
@@ -193,5 +228,6 @@ echo "
Build Null module: $have_null
Build PulseAudio module: $have_pulseaudio
+ Build OSS module: $have_oss
"
diff --git a/libmatemixer/matemixer-enums.h b/libmatemixer/matemixer-enums.h
index a6326ce..7e523bb 100644
--- a/libmatemixer/matemixer-enums.h
+++ b/libmatemixer/matemixer-enums.h
@@ -47,6 +47,7 @@ typedef enum {
* PulseAudio sound system backend. It has the highest priority and
* will be the first one to try unless you select a specific backend
* to connect to.
+ * @MATE_MIXER_BACKEND_OSS:
* @MATE_MIXER_BACKEND_NULL:
* Fallback backend which never fails to initialize, but provides no
* functionality. This backend has the lowest priority and will be used
@@ -56,6 +57,7 @@ typedef enum {
typedef enum {
MATE_MIXER_BACKEND_UNKNOWN,
MATE_MIXER_BACKEND_PULSEAUDIO,
+ MATE_MIXER_BACKEND_OSS,
MATE_MIXER_BACKEND_NULL
} MateMixerBackendType;