]> git.alsa-project.org Git - alsa-plugins.git/commitdiff
aaf: Introduce plugin skeleton
authorAndre Guedes <andre.guedes@intel.com>
Thu, 25 Oct 2018 01:11:10 +0000 (18:11 -0700)
committerJaroslav Kysela <perex@perex.cz>
Thu, 25 Oct 2018 06:09:02 +0000 (08:09 +0200)
The patch introduces the skeleton code from the AAF plugin as well as
the buildsystem bits in order to get the plugin built. Following the
approach from other plugins, the AAF plugin is only built if its
dependency (libavtp) is detected by configure.

Follow-up patches implement support for both playback and capture modes.

Signed-off-by: Andre Guedes <andre.guedes@intel.com>
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Makefile.am
aaf/Makefile.am [new file with mode: 0644]
aaf/pcm_aaf.c [new file with mode: 0644]
configure.ac
doc/aaf.txt [new file with mode: 0644]

index 27f61a4c24e878befa6267960f29a99056a3706d..af0e9c47c16d5fe091f3b733e713d4fee477210e 100644 (file)
@@ -35,6 +35,9 @@ endif
 if HAVE_SPEEXDSP
 SUBDIRS += speex
 endif
+if HAVE_AAF
+SUBDIRS += aaf
+endif
 
 EXTRA_DIST = gitcompile version COPYING.GPL m4/attributes.m4
 AUTOMAKE_OPTIONS = foreign
diff --git a/aaf/Makefile.am b/aaf/Makefile.am
new file mode 100644 (file)
index 0000000..492b883
--- /dev/null
@@ -0,0 +1,9 @@
+asound_module_pcm_aaf_LTLIBRARIES = libasound_module_pcm_aaf.la
+
+asound_module_pcm_aafdir = @ALSA_PLUGIN_DIR@
+
+AM_CFLAGS = @ALSA_CFLAGS@ @AVTP_CFLAGS@
+AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined $(LDFLAGS_NOUNDEFINED)
+
+libasound_module_pcm_aaf_la_SOURCES = pcm_aaf.c
+libasound_module_pcm_aaf_la_LIBADD = @ALSA_LIBS@ @AVTP_LIBS@
diff --git a/aaf/pcm_aaf.c b/aaf/pcm_aaf.c
new file mode 100644 (file)
index 0000000..31d8759
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * AVTP Audio Format (AAF) PCM Plugin
+ *
+ * Copyright (c) 2018, Intel Corporation
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#include <alsa/asoundlib.h>
+#include <alsa/pcm_external.h>
+
+typedef struct {
+       snd_pcm_ioplug_t io;
+} snd_pcm_aaf_t;
+
+static int aaf_close(snd_pcm_ioplug_t *io)
+{
+       free(io->private_data);
+       return 0;
+}
+
+static snd_pcm_sframes_t aaf_pointer(snd_pcm_ioplug_t *io)
+{
+       return 0;
+}
+
+static int aaf_start(snd_pcm_ioplug_t *io)
+{
+       return 0;
+}
+
+static int aaf_stop(snd_pcm_ioplug_t *io)
+{
+       return 0;
+}
+
+static const snd_pcm_ioplug_callback_t aaf_callback = {
+       .close = aaf_close,
+       .pointer = aaf_pointer,
+       .start = aaf_start,
+       .stop = aaf_stop,
+};
+
+SND_PCM_PLUGIN_DEFINE_FUNC(aaf)
+{
+       snd_pcm_aaf_t *aaf;
+       int res;
+
+       aaf = calloc(1, sizeof(*aaf));
+       if (!aaf) {
+               SNDERR("Failed to allocate memory");
+               return -ENOMEM;
+       }
+
+       aaf->io.version = SND_PCM_IOPLUG_VERSION;
+       aaf->io.name = "AVTP Audio Format (AAF) Plugin";
+       aaf->io.callback = &aaf_callback;
+       aaf->io.private_data = aaf;
+       res = snd_pcm_ioplug_create(&aaf->io, name, stream, mode);
+       if (res < 0) {
+               SNDERR("Failed to create ioplug instance");
+               goto err;
+       }
+
+       *pcmp = aaf->io.pcm;
+       return 0;
+
+err:
+       free(aaf);
+       return res;
+}
+
+SND_PCM_PLUGIN_SYMBOL(aaf);
index ecc4c7ad8c9f7a57cb2b6282d7c37c9df7257b01..db36f0316b3f8ed4fc7d98d07a94b906fd912141 100644 (file)
@@ -176,6 +176,14 @@ fi
 test "x$prefix" = xNONE && prefix=$ac_default_prefix
 test "x$exec_prefix" = xNONE && exec_prefix=$prefix
 
+AC_ARG_ENABLE([aaf],
+      AS_HELP_STRING([--disable-aaf], [Disable building of AAF plugin]))
+
+if test "x$enable_aaf" != "xno"; then
+  PKG_CHECK_MODULES(AVTP, avtp >= 0.1, [HAVE_AAF=yes], [HAVE_AAF=no])
+fi
+AM_CONDITIONAL(HAVE_AAF, test x$HAVE_AAF = xyes)
+
 dnl ALSA plugin directory
 AC_ARG_WITH(plugindir,
     AS_HELP_STRING([--with-plugindir=dir],
@@ -251,6 +259,7 @@ AC_OUTPUT([
        usb_stream/Makefile
        speex/Makefile
        arcam-av/Makefile
+       aaf/Makefile
 ])
 
 dnl Show the build conditions
@@ -289,3 +298,4 @@ if test "$HAVE_SPEEX" = "yes"; then
   echo "  speexdsp_CFLAGS: $speexdsp_CFLAGS"
   echo "  speexdsp_LIBS: $speexdsp_LIBS"
 fi
+echo "AAF plugin:         $HAVE_AAF"
diff --git a/doc/aaf.txt b/doc/aaf.txt
new file mode 100644 (file)
index 0000000..b260a26
--- /dev/null
@@ -0,0 +1,18 @@
+AVTP Audio Format (AAF) Plugin
+==============================
+
+Overview
+--------
+
+The AAF plugin is a PCM plugin that uses Audio Video Transport Protocol (AVTP)
+to transmit/receive audio samples through a Time-Sensitive Network (TSN)
+capable network. The plugin enables media applications to easily implement AVTP
+Talker and Listener functionalities.
+
+Plugin Dependencies
+-------------------
+
+The AAF plugin uses libavtp to handle AVTP packetization. Libavtp source code
+can be found in https://github.com/AVnu/libavtp as well as instructions to
+build and install it. If libavtp isn't detected by configure, the plugin isn't
+built.