summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2006-10-13 18:01:27 +0200
committerJaroslav Kysela <perex@perex.cz>2006-10-13 18:01:27 +0200
commita185898230991840146cd824656b6d426b7b3809 (patch)
treeb7c45a9d5917a88d58e4fe4245adce4e1a7bd3a2
parentd7916981bfe14f0aa52cbcccf0cba38d06d01c36 (diff)
downloadalsa-lib-a185898230991840146cd824656b6d426b7b3809.tar.gz
added pcm_empty plugin and .hgignore additions
-rw-r--r--.hgignore4
-rw-r--r--src/pcm/pcm_empty.c109
2 files changed, 113 insertions, 0 deletions
diff --git a/.hgignore b/.hgignore
index 04745407..3386f084 100644
--- a/.hgignore
+++ b/.hgignore
@@ -28,6 +28,7 @@ ltconfig
*.lo
*.pc
*.o
+*~
include/config.h
include/stamp-h1
include/stamp-vh
@@ -36,3 +37,6 @@ utils/alsa-lib.spec
alsalisp/alsalisp
aserver/aserver
src/pcm/pcm_symbols_list.c
+doc/doxygen/*
+test/namehint
+test/pcm
diff --git a/src/pcm/pcm_empty.c b/src/pcm/pcm_empty.c
new file mode 100644
index 00000000..f55fd6c0
--- /dev/null
+++ b/src/pcm/pcm_empty.c
@@ -0,0 +1,109 @@
+/**
+ * \file pcm/pcm_empty.c
+ * \ingroup PCM_Plugins
+ * \brief PCM Null Plugin Interface
+ * \author Jaroslav Kysela <perex@suse.cz>
+ * \date 2006
+ */
+/*
+ * PCM - Null plugin
+ * Copyright (c) 2006 by Jaroslav Kysela <perex@suse.cz>
+ *
+ *
+ * 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.1 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 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include "pcm_local.h"
+#include "pcm_plugin.h"
+
+#ifndef PIC
+/* entry for static linking */
+const char *_snd_module_pcm_empty = "";
+#endif
+
+/*! \page pcm_plugins
+
+\section pcm_plugins_null Plugin: Null
+
+This plugin discards contents of a PCM stream or creates a stream with zero
+samples.
+
+Note: This implementation uses devices /dev/null (playback, must be writable)
+and /dev/full (capture, must be readable).
+
+\code
+pcm.name {
+ type null # Null PCM
+}
+\endcode
+
+\subsection pcm_plugins_null_funcref Function reference
+
+<UL>
+ <LI>_snd_pcm_empty_open()
+</UL>
+
+*/
+
+/**
+ * \brief Creates a new Empty PCM
+ * \param pcmp Returns created PCM handle
+ * \param name Name of PCM
+ * \param root Root configuration node
+ * \param conf Configuration node with empty PCM description
+ * \param stream Stream type
+ * \param mode Stream mode
+ * \retval zero on success otherwise a negative error code
+ * \warning Using of this function might be dangerous in the sense
+ * of compatibility reasons. The prototype might be freely
+ * changed in future.
+ */
+int _snd_pcm_empty_open(snd_pcm_t **pcmp, const char *name ATTRIBUTE_UNUSED,
+ snd_config_t *root, snd_config_t *conf,
+ snd_pcm_stream_t stream, int mode)
+{
+ snd_config_t *slave = NULL, *sconf;
+ snd_config_iterator_t i, next;
+ int err;
+
+ snd_config_for_each(i, next, conf) {
+ snd_config_t *n = snd_config_iterator_entry(i);
+ const char *id;
+ if (snd_config_get_id(n, &id) < 0)
+ continue;
+ if (snd_pcm_conf_generic_id(id))
+ continue;
+ if (strcmp(id, "slave") == 0) {
+ slave = n;
+ continue;
+ }
+ SNDERR("Unknown field %s", id);
+ return -EINVAL;
+ }
+ if (!slave) {
+ SNDERR("slave is not defined");
+ return -EINVAL;
+ }
+ err = snd_pcm_slave_conf(root, slave, &sconf, 0);
+ if (err < 0)
+ return err;
+ err = snd_pcm_open_slave(pcmp, root, sconf, stream, mode, conf);
+ snd_config_delete(sconf);
+ return err;
+}
+#ifndef DOC_HIDDEN
+SND_DLSYM_BUILD_VERSION(_snd_pcm_empty_open, SND_PCM_DLSYM_VERSION);
+#endif