commit 212dbda650d64105413bffd9919e127163c598d1
Author: Leigh Scott <leigh123linux(a)googlemail.com>
Date: Fri Sep 13 10:20:59 2019 +0100
Revert "Update to 1.1.7"
This reverts commit 08f9a35346f3b497cd559de9c9654c05915dc7bd.
alsa-plugins-freeworld.spec | 28 +-
ffmpeg35_buildfix.patch | 1405 +++++++++++++++++++++++++++++++++++++++++++
plugin-config.patch | 888 +++++++++++++++++++++++++++
sources | 2 +-
4 files changed, 2310 insertions(+), 13 deletions(-)
---
diff --git a/alsa-plugins-freeworld.spec b/alsa-plugins-freeworld.spec
index 0132cba..90bce29 100644
--- a/alsa-plugins-freeworld.spec
+++ b/alsa-plugins-freeworld.spec
@@ -1,15 +1,18 @@
Name: alsa-plugins-freeworld
-Version: 1.1.7
-Release: 1%{?dist}
+Version: 1.1.6
+Release: 6%{?dist}
Summary: The ALSA Plugins - freeworld version
# All packages are LGPLv2+ with the exception of samplerate which is GPLv2+
License: LGPLv2+
URL:
http://www.alsa-project.org/
Source0:
ftp://ftp.alsa-project.org/pub/plugins/alsa-plugins-%{version}.tar.bz2
+Patch0: plugin-config.patch
+# Based on
https://patchwork.kernel.org/patch/9753853/
+Patch1: ffmpeg35_buildfix.patch
BuildRequires: autoconf automake libtool
-BuildRequires: alsa-lib-devel >= 1.1.7
-BuildRequires: ffmpeg-devel
+BuildRequires: alsa-lib-devel >= 1.1.6
+
%description
The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
@@ -18,30 +21,34 @@ functionality to the Linux operating system.
This package includes plugins for ALSA that cannot go to Fedora.
%package a52
+BuildRequires: ffmpeg-devel
Summary: A52 output plugin using libavcodec
License: LGPLv2+
#Compatibility with some foreign packaging scheme
Provides: alsa-plugins-a52 = %{version}-%{release}
-
%description a52
This plugin converts S16 linear format to A52 compressed stream and
send to an SPDIF output. It requires libavcodec for encoding the
audio stream.
%package lavrate
+BuildRequires: ffmpeg-devel
Summary: Rate converter plugin using libavcodec
License: LGPLv2+
#Compatibility with some foreign packaging scheme
Provides: alsa-plugins-lavrate = %{version}-%{release}
Obsoletes: alsa-plugins-lavcrate < 1.1.6-3
-
%description lavrate
The plugin uses ffmpeg audio resample library to convert audio rates.
%prep
%setup -q -n alsa-plugins-%{version}%{?prever}
+%patch0 -p1 -b .plugin-config
+%patch1 -p1 -b .ffmpeg35_buildfix
%build
+autoreconf -vif
+export CPPFLAGS="$(pkg-config --cflags libavcodec)"
%configure --disable-static \
--disable-maemo-plugin \
--disable-jack \
@@ -52,13 +59,14 @@ The plugin uses ffmpeg audio resample library to convert audio rates.
--disable-arcamav \
--disable-mix \
--disable-oss \
- --with-speex=no
+ --with-speex=no \
+ --with-avcodec-includedir="$(pkg-config --cflags libavcodec)"
%make_build
%install
%make_install
-find %buildroot -name "*.la" -exec rm {} \;
+find $RPM_BUILD_ROOT -name "*.la" -exec rm {} \;
%files a52
%license COPYING COPYING.GPL
@@ -86,10 +94,6 @@ find %buildroot -name "*.la" -exec rm {} \;
%changelog
-* Sat Oct 20 2018 Leigh Scott <leigh123linux(a)googlemail.com> - 1.1.7-1
-- Update to 1.1.7
-- Drop upstreamed patches
-
* Thu Jul 26 2018 RPM Fusion Release Engineering <leigh123linux(a)gmail.com> -
1.1.6-6
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
diff --git a/ffmpeg35_buildfix.patch b/ffmpeg35_buildfix.patch
new file mode 100644
index 0000000..e69642b
--- /dev/null
+++ b/ffmpeg35_buildfix.patch
@@ -0,0 +1,1405 @@
+From 24db7f59d76984e2901f2834a297735853cab776 Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Mon, 16 Apr 2018 16:24:29 +0200
+Subject: [PATCH 1/3] Move rate-lavc to rate-lav subdirectory and update to use
+ libavresample
+
+- --disable-avcodec renamed to --disable-libav
+- --avcodec-includedir renamed to --libav-includedir
+- --avcodec-libdir renamed to --libav-libdir
+- --disable-lavcrate renamed to --disable-lavrate
+
+The .c changes are from Anton Khirnov. The rest is from Jaroslav Kysela.
+
+From: Anton Khirnov
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ Makefile.am | 4 +-
+ a52/Makefile.am | 5 +-
+ a52/pcm_a52.c | 2 +-
+ configure.ac | 85 +++---
+ doc/Makefile.am | 4 +-
+ doc/{lavcrate.txt => lavrate.txt} | 10 +-
+ .../10-rate-lavc.conf => rate-lav/10-rate-lav.conf | 6 +-
+ rate-lav/Makefile.am | 25 ++
+ {rate-lavc => rate-lav}/gcd.h | 0
+ rate-lav/rate_lavrate.c | 235 +++++++++++++++++
+ rate-lavc/Makefile.am | 26 --
+ rate-lavc/rate_lavcrate.c | 291 ---------------------
+ 12 files changed, 311 insertions(+), 382 deletions(-)
+ rename doc/{lavcrate.txt => lavrate.txt} (76%)
+ rename rate-lavc/10-rate-lavc.conf => rate-lav/10-rate-lav.conf (73%)
+ create mode 100644 rate-lav/Makefile.am
+ rename {rate-lavc => rate-lav}/gcd.h (100%)
+ create mode 100644 rate-lav/rate_lavrate.c
+ delete mode 100644 rate-lavc/Makefile.am
+ delete mode 100644 rate-lavc/rate_lavcrate.c
+
+diff --git a/Makefile.am b/Makefile.am
+index 303bc83..27f61a4 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -17,8 +17,8 @@ endif
+ if HAVE_A52
+ SUBDIRS += a52
+ endif
+-if HAVE_AVCRATE
+-SUBDIRS += rate-lavc
++if HAVE_LAVRATE
++SUBDIRS += rate-lav
+ endif
+ if HAVE_USBSTREAM
+ SUBDIRS += usb_stream
+diff --git a/a52/Makefile.am b/a52/Makefile.am
+index cbc1497..4ac8edd 100644
+--- a/a52/Makefile.am
++++ b/a52/Makefile.am
+@@ -6,9 +6,8 @@ asound_module_addon_DATA = 60-a52-encoder.conf
+ asound_module_pcm_a52dir = @ALSA_PLUGIN_DIR@
+ asound_module_addondir = @ALSA_ADDON_DIR@
+
+-AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @AVCODEC_CFLAGS@ \
+- -DAVCODEC_HEADER="@AVCODEC_HEADER@"
++AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @LIBAV_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+
+ libasound_module_pcm_a52_la_SOURCES = pcm_a52.c
+-libasound_module_pcm_a52_la_LIBADD = @ALSA_LIBS@ @AVCODEC_LIBS@
++libasound_module_pcm_a52_la_LIBADD = @ALSA_LIBS@ @LIBAV_LIBS@ @LIBAV_CODEC_LIBS@
+diff --git a/a52/pcm_a52.c b/a52/pcm_a52.c
+index 155da36..29ce45f 100644
+--- a/a52/pcm_a52.c
++++ b/a52/pcm_a52.c
+@@ -25,7 +25,7 @@
+ #include <alsa/asoundlib.h>
+ #include <alsa/pcm_external.h>
+ #include <alsa/pcm_plugin.h>
+-#include AVCODEC_HEADER
++#include <libavcodec/avcodec.h>
+ #include <libavutil/avutil.h>
+
+ /* some compatibility wrappers */
+diff --git a/configure.ac b/configure.ac
+index 2d7e6aa..cb1ae2d 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -89,67 +89,55 @@ if test "$use_maemo_rm" = "yes"; then
+ fi
+ fi
+
+-AC_ARG_ENABLE([avcodec],
+- AS_HELP_STRING([--disable-avcodec], [Don't build plugins depending on avcodec
(a52)]))
++AC_ARG_ENABLE([libav],
++ AS_HELP_STRING([--disable-avlib], [Do not build plugins depending on libav/ffmpeg
(a52,lavrate...)]))
+
+-if test "x$enable_avcodec" != "xno"; then
+- PKG_CHECK_MODULES(AVCODEC, [libavcodec libavutil], [HAVE_AVCODEC=yes],
[HAVE_AVCODEC=no])
++if test "x$enable_libav" != "xno"; then
++ PKG_CHECK_MODULES(LIBAV, [libavcodec libavutil libavresample], [HAVE_LIBAV=yes],
[HAVE_LIBAV=no])
+ fi
+
+-if test "x$HAVE_AVCODEC" = "xno"; then
+- AC_ARG_WITH([avcodec-includedir],
+- AS_HELP_STRING([--with-avcodec-includedir=dir],
+- [AVcodec include directory]),
+- [AVCODEC_CFLAGS="-I$withval"], [AVCODEC_CFLAGS=""])
+- AC_ARG_WITH([avcodec-libdir],
+- AS_HELP_STRING([--with-avcodec-libdir=dir],
+- [AVcodec library directory]),
+- [AVCODEC_LIBS="-L$withval"], [AVCODEC_LIBS=""])
++if test "x$HAVE_LIBAV" = "xno"; then
++ AC_ARG_WITH([libav-includedir],
++ AS_HELP_STRING([--with-libav-includedir=dir],
++ [Libav/ffmpeg include directory]),
++ [LIBAV_CFLAGS="-I$(withval)"], [LIBAV_CFLAGS=""])
++ AC_ARG_WITH([libav-libdir],
++ AS_HELP_STRING([--with-libav-libdir=dir],
++ [Libav/ffmpeg library directory]),
++ [LIBAV_LIBS="-L$withval"], [LIBAV_LIBS=""])
+
+ CFLAGS_saved="$CFLAGS"
+ LDFLAGS_saved="$LDFLAGS"
+- CFLAGS="$CFLAGS $AVCODEC_CFLAGS"
+- LDFLAGS="$LDFLAGS $AVCODEC_LIBS"
+- AVCODEC_LIBS="$AVCODEC_LIBS -lavcodec"
+- AC_CHECK_LIB([avcodec], [avcodec_open], [HAVE_AVCODEC=yes], [HAVE_AVCODEC=no])
++ CFLAGS="$CFLAGS $LIBAV_CFLAGS"
++ LDFLAGS="$LDFLAGS $LIBAV_LIBS"
++ AC_CHECK_LIB([avcodec], [avcodec_open], [HAVE_LIBAV=yes], [HAVE_LIBAV=no])
+ CFLAGS="$CFLAGS_saved"
+ LDFLAGS="$LDFLAGS_saved"
++ LIBAV_CODEC_LIBS="-lavcodec"
++ LIBAV_RESAMPLE_LIBS="-lavresample -lavutil"
+ fi
+
+-if test $HAVE_AVCODEC = yes; then
+- AVCODEC_HEADER=""
+- CFLAGS_saved="$CFLAGS"
+- CFLAGS="$CFLAGS $AVCODEC_CFLAGS"
+- AC_CHECK_HEADER([ffmpeg/avcodec.h],
[AVCODEC_HEADER='<ffmpeg/avcodec.h>'])
+- if test -z "$AVCODEC_HEADER"; then
+- AC_CHECK_HEADER([libavcodec/avcodec.h],
[AVCODEC_HEADER='<libavcodec/avcodec.h>'])
+- fi
+- if test -z "$AVCODEC_HEADER"; then
+- HAVE_AVCODEC=no
+- fi
+- CFLAGS="$CFLAGS_saved"
+-fi
+-
+-AM_CONDITIONAL(HAVE_AVCODEC, test x$HAVE_AVCODEC = xyes)
+-AC_SUBST(AVCODEC_CFLAGS)
+-AC_SUBST(AVCODEC_LIBS)
+-AC_SUBST(AVCODEC_HEADER)
++AM_CONDITIONAL(HAVE_LIBAV, test x$HAVE_LIBAV = xyes)
++AC_SUBST(LIBAV_CFLAGS)
++AC_SUBST(LIBAV_LIBS)
++AC_SUBST(LIBAV_CODEC_LIBS)
++AC_SUBST(LIBAV_RESAMPLE_LIBS)
+
+ AC_ARG_ENABLE([a52],
+ AS_HELP_STRING([--disable-a52], [Disable building of A52 encoder plugin]))
+
+-if test "x$enable_a52" != "xno" -a "$HAVE_AVCODEC" =
"yes"; then
++if test "x$enable_a52" != "xno" -a "$HAVE_LIBAV" =
"yes"; then
+ HAVE_A52=yes
+ fi
+ AM_CONDITIONAL(HAVE_A52, test x$HAVE_A52 = xyes)
+
+-AC_ARG_ENABLE([avcrate],
+- AS_HELP_STRING([--disable-avcrate], [Disable building of AVC rate plugin]))
++AC_ARG_ENABLE([lavrate],
++ AS_HELP_STRING([--disable-lavrate], [Disable building of libav/ffmpeg rate
plugin]))
+
+-if test "x$enable_avcrate" != "xno" -a "$HAVE_AVCODEC" =
"yes"; then
+- HAVE_AVCRATE=yes
++if test "x$enable_lavrate" != "xno" -a "$HAVE_LIBAV" =
"yes"; then
++ HAVE_LAVRATE=yes
+ fi
+-AM_CONDITIONAL(HAVE_AVCRATE, test x$HAVE_AVCRATE = xyes)
++AM_CONDITIONAL(HAVE_LAVRATE, test x$HAVE_LAVRATE = xyes)
+
+ AC_ARG_ENABLE([speexdsp],
+ AS_HELP_STRING([--disable-speexdsp], [Disable building of speexdsp plugin]))
+@@ -245,7 +233,7 @@ AC_OUTPUT([
+ mix/Makefile
+ rate/Makefile
+ a52/Makefile
+- rate-lavc/Makefile
++ rate-lav/Makefile
+ maemo/Makefile
+ doc/Makefile
+ usb_stream/Makefile
+@@ -276,14 +264,13 @@ if test "$HAVE_SAMPLERATE" = "yes"; then
+ fi
+ echo "Maemo plugin: $HAVE_MAEMO_PLUGIN"
+ echo " Using Osso resource manager: $use_maemo_rm"
+-if test "$HAVE_AVCODEC" = "yes"; then
+- echo "AVCodec config:"
+- echo " AVCODEC_CFLAGS: $AVCODEC_CFLAGS"
+- echo " AVCODEC_LIBS: $AVCODEC_LIBS"
+- echo " AVCODEC_HEADER: $AVCODEC_HEADER"
++if test "$HAVE_LIBAV" = "yes"; then
++ echo "Libav/ffmpeg config:"
++ echo " LIBAV_CFLAGS: $LIBAV_CFLAGS"
++ echo " LIBAV_LIBS: $LIBAV_LIBS / $LIBAV_CODEC_LIBS /
$LIBAV_RESAMPLE_LIBS"
+ fi
+-echo "A52 plugin: $HAVE_A52"
+-echo "AVC rate plugin: $HAVE_AVCRATE"
++echo "Libav A52 plugin: $HAVE_A52"
++echo "Libav rate plugin: $HAVE_LAVRATE"
+ echo "Speex rate plugin: $PPH"
+ echo "Speex preprocess plugin: $HAVE_SPEEXDSP"
+ if test "$HAVE_SPEEX" = "yes"; then
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 0d6f6e5..7c004e5 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -21,8 +21,8 @@ endif
+ if HAVE_A52
+ EXTRA_DIST += a52.txt
+ endif
+-if HAVE_AVCRATE
+-EXTRA_DIST += lavcrate.txt
++if HAVE_LAVRATE
++EXTRA_DIST += lavrate.txt
+ endif
+ if HAVE_PPH
+ EXTRA_DIST += speexrate.txt
+diff --git a/doc/lavcrate.txt b/doc/lavrate.txt
+similarity index 76%
+rename from doc/lavcrate.txt
+rename to doc/lavrate.txt
+index faf3e25..6575183 100644
+--- a/doc/lavcrate.txt
++++ b/doc/lavrate.txt
+@@ -1,14 +1,14 @@
+-Rate Converter Plugin Using libavcodec
+-======================================
++Rate Converter Plugin Using libavresample
++=========================================0
+
+-The plugin in rate-lavc subdirectory is an external rate converter using
+-libavcodec's resampler. You can use this rate converter plugin by defining a
++The plugin in rate-lavr subdirectory is an external rate converter using
++libavresample library. You can use this rate converter plugin by defining a
+ rate PCM with "converter" parameter, such as:
+
+ pcm.my_rate {
+ type rate
+ slave.pcm "hw"
+- converter "lavcrate"
++ converter "lavrate"
+ }
+
+ The plug plugin has also a similar field, "rate_converter".
+diff --git a/rate-lavc/10-rate-lavc.conf b/rate-lav/10-rate-lav.conf
+similarity index 73%
+rename from rate-lavc/10-rate-lavc.conf
+rename to rate-lav/10-rate-lav.conf
+index bab1694..48ede62 100644
+--- a/rate-lavc/10-rate-lavc.conf
++++ b/rate-lav/10-rate-lav.conf
+@@ -1,4 +1,4 @@
+-pcm.lavcrate {
++pcm.lavrate {
+ @args [ SLAVE RATE CONVERTER ]
+ @args.SLAVE {
+ type string
+@@ -10,7 +10,7 @@ pcm.lavcrate {
+ }
+ @args.CONVERTER {
+ type string
+- default "lavcrate"
++ default "lavrate"
+ }
+ type rate
+ converter $CONVERTER
+@@ -23,6 +23,6 @@ pcm.lavcrate {
+ @func refer
+ name defaults.namehint.basic
+ }
+- description "Rate Converter Plugin Using AVC Library"
++ description "Rate Converter Plugin Using Libav/FFmpeg
Library"
+ }
+ }
+diff --git a/rate-lav/Makefile.am b/rate-lav/Makefile.am
+new file mode 100644
+index 0000000..0f6ecb6
+--- /dev/null
++++ b/rate-lav/Makefile.am
+@@ -0,0 +1,25 @@
++EXTRA_DIST = 10-rate-lav.conf
++
++asound_module_rate_lavrate_LTLIBRARIES = libasound_module_rate_lavrate.la
++asound_module_addon_DATA = 10-rate-lav.conf
++
++asound_module_rate_lavratedir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
++
++AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @LIBAV_CFLAGS@
++AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
++
++libasound_module_rate_lavrate_la_SOURCES = rate_lavrate.c
++libasound_module_rate_lavrate_la_LIBADD = @ALSA_LIBS@ @LIBAV_LIBS@
@LIBAV_RESAMPLE_LIBS@
++
++noinst_HEADERS = gcd.h
++
++install-exec-hook:
++ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_*.so
++ $(LN_S) libasound_module_rate_lavrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_higher.so
++ $(LN_S) libasound_module_rate_lavrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_high.so
++ $(LN_S) libasound_module_rate_lavrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_fast.so
++ $(LN_S) libasound_module_rate_lavrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_faster.so
++
++uninstall-hook:
++ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_*.so
+diff --git a/rate-lavc/gcd.h b/rate-lav/gcd.h
+similarity index 100%
+rename from rate-lavc/gcd.h
+rename to rate-lav/gcd.h
+diff --git a/rate-lav/rate_lavrate.c b/rate-lav/rate_lavrate.c
+new file mode 100644
+index 0000000..2b992c5
+--- /dev/null
++++ b/rate-lav/rate_lavrate.c
+@@ -0,0 +1,235 @@
++/*
++ * Rate converter plugin using libavresample
++ * Copyright (c) 2014 by Anton Khirnov
++ *
++ * 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 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.
++ */
++
++#include <stdio.h>
++#include <alsa/asoundlib.h>
++#include <alsa/pcm_rate.h>
++
++#include <libavresample/avresample.h>
++#include <libavutil/channel_layout.h>
++#include <libavutil/opt.h>
++#include <libavutil/mathematics.h>
++#include <libavutil/samplefmt.h>
++
++
++static unsigned int filter_size = 16;
++static unsigned int phase_shift = 10; /* auto-adjusts */
++static double cutoff = 0; /* auto-adjusts */
++
++struct rate_src {
++ AVAudioResampleContext *avr;
++
++ unsigned int in_rate;
++ unsigned int out_rate;
++ unsigned int channels;
++};
++
++static snd_pcm_uframes_t input_frames(void *obj ATTRIBUTE_UNUSED,
++ snd_pcm_uframes_t frames)
++{
++ return frames;
++}
++
++static snd_pcm_uframes_t output_frames(void *obj ATTRIBUTE_UNUSED,
++ snd_pcm_uframes_t frames)
++{
++ return frames;
++}
++
++static void pcm_src_free(void *obj)
++{
++ struct rate_src *rate = obj;
++ avresample_free(&rate->avr);
++}
++
++static int pcm_src_init(void *obj, snd_pcm_rate_info_t *info)
++{
++ struct rate_src *rate = obj;
++ int i, ir, or;
++
++ if (!rate->avr || rate->channels != info->channels) {
++ int ret;
++
++ pcm_src_free(rate);
++ rate->channels = info->channels;
++ ir = rate->in_rate = info->in.rate;
++ or = rate->out_rate = info->out.rate;
++ i = av_gcd(or, ir);
++ if (or > ir) {
++ phase_shift = or/i;
++ } else {
++ phase_shift = ir/i;
++ }
++ if (cutoff <= 0.0) {
++ cutoff = 1.0 - 1.0/filter_size;
++ if (cutoff < 0.80)
++ cutoff = 0.80;
++ }
++
++ rate->avr = avresample_alloc_context();
++ if (!rate->avr)
++ return -ENOMEM;
++
++ av_opt_set_int(rate->avr, "in_sample_rate", info->in.rate, 0);
++ av_opt_set_int(rate->avr, "out_sample_rate", info->out.rate, 0);
++ av_opt_set_int(rate->avr, "in_sample_format", AV_SAMPLE_FMT_S16, 0);
++ av_opt_set_int(rate->avr, "out_sample_format", AV_SAMPLE_FMT_S16, 0);
++ av_opt_set_int(rate->avr, "in_channel_layout",
av_get_default_channel_layout(rate->channels), 0);
++ av_opt_set_int(rate->avr, "out_channel_layout",
av_get_default_channel_layout(rate->channels), 0);
++
++ av_opt_set_int(rate->avr, "filter_size", filter_size, 0);
++ av_opt_set_int(rate->avr, "phase_shift", phase_shift, 0);
++ av_opt_set_double(rate->avr, "cutoff", cutoff, 0);
++
++ ret = avresample_open(rate->avr);
++ if (ret < 0) {
++ avresample_free(&rate->avr);
++ return -EINVAL;
++ }
++ }
++
++ return 0;
++}
++
++static int pcm_src_adjust_pitch(void *obj, snd_pcm_rate_info_t *info)
++{
++ struct rate_src *rate = obj;
++
++ if (info->out.rate != rate->out_rate || info->in.rate != rate->in_rate)
++ pcm_src_init(obj, info);
++ return 0;
++}
++
++static void pcm_src_reset(void *obj)
++{
++ struct rate_src *rate = obj;
++
++ if (rate->avr) {
++#if 0
++ avresample_close(rate->avr);
++ avresample_open(rate->avr);
++#endif
++ }
++}
++
++static void pcm_src_convert_s16(void *obj, int16_t *dst,
++ unsigned int dst_frames,
++ const int16_t *src,
++ unsigned int src_frames)
++{
++ struct rate_src *rate = obj;
++ int chans = rate->channels;
++ unsigned int total_in = avresample_get_delay(rate->avr) + src_frames;
++
++ avresample_convert(rate->avr, (uint8_t **)&dst, dst_frames * chans * 2,
dst_frames,
++ (uint8_t **)&src, src_frames * chans * 2, src_frames);
++
++ avresample_set_compensation(rate->avr,
++ total_in - src_frames > filter_size ? 0 : 1,
src_frames);
++}
++
++static void pcm_src_close(void *obj)
++{
++ pcm_src_free(obj);
++}
++
++#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
++static int get_supported_rates(void *obj ATTRIBUTE_UNUSED,
++ unsigned int *rate_min,
++ unsigned int *rate_max)
++{
++ *rate_min = *rate_max = 0; /* both unlimited */
++ return 0;
++}
++
++static void dump(void *obj ATTRIBUTE_UNUSED, snd_output_t *out)
++{
++ snd_output_printf(out, "Converter: libavr\n");
++}
++#endif
++
++static snd_pcm_rate_ops_t pcm_src_ops = {
++ .close = pcm_src_close,
++ .init = pcm_src_init,
++ .free = pcm_src_free,
++ .reset = pcm_src_reset,
++ .adjust_pitch = pcm_src_adjust_pitch,
++ .convert_s16 = pcm_src_convert_s16,
++ .input_frames = input_frames,
++ .output_frames = output_frames,
++#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
++ .version = SND_PCM_RATE_PLUGIN_VERSION,
++ .get_supported_rates = get_supported_rates,
++ .dump = dump,
++#endif
++};
++
++int pcm_src_open(unsigned int version, void **objp, snd_pcm_rate_ops_t *ops)
++
++{
++ struct rate_src *rate;
++
++#if SND_PCM_RATE_PLUGIN_VERSION < 0x010002
++ if (version != SND_PCM_RATE_PLUGIN_VERSION) {
++ fprintf(stderr, "Invalid rate plugin version %x\n", version);
++ return -EINVAL;
++ }
++#endif
++ rate = calloc(1, sizeof(*rate));
++ if (!rate)
++ return -ENOMEM;
++
++ *objp = rate;
++ rate->avr = NULL;
++#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
++ if (version == 0x010001)
++ memcpy(ops, &pcm_src_ops, sizeof(snd_pcm_rate_old_ops_t));
++ else
++#endif
++ *ops = pcm_src_ops;
++ return 0;
++}
++
++int SND_PCM_RATE_PLUGIN_ENTRY(lavrate)(unsigned int version, void **objp,
++ snd_pcm_rate_ops_t *ops)
++{
++ return pcm_src_open(version, objp, ops);
++}
++int SND_PCM_RATE_PLUGIN_ENTRY(lavrate_higher)(unsigned int version,
++ void **objp, snd_pcm_rate_ops_t *ops)
++{
++ filter_size = 64;
++ return pcm_src_open(version, objp, ops);
++}
++int SND_PCM_RATE_PLUGIN_ENTRY(lavrate_high)(unsigned int version,
++ void **objp, snd_pcm_rate_ops_t *ops)
++{
++ filter_size = 32;
++ return pcm_src_open(version, objp, ops);
++}
++int SND_PCM_RATE_PLUGIN_ENTRY(lavrate_fast)(unsigned int version,
++ void **objp, snd_pcm_rate_ops_t *ops)
++{
++ filter_size = 8;
++ return pcm_src_open(version, objp, ops);
++}
++int SND_PCM_RATE_PLUGIN_ENTRY(lavrate_faster)(unsigned int version,
++ void **objp, snd_pcm_rate_ops_t *ops)
++{
++ filter_size = 4;
++ return pcm_src_open(version, objp, ops);
++}
++
++
+diff --git a/rate-lavc/Makefile.am b/rate-lavc/Makefile.am
+deleted file mode 100644
+index 5f66472..0000000
+--- a/rate-lavc/Makefile.am
++++ /dev/null
+@@ -1,26 +0,0 @@
+-EXTRA_DIST = 10-rate-lavc.conf
+-
+-asound_module_rate_lavcrate_LTLIBRARIES = libasound_module_rate_lavcrate.la
+-asound_module_addon_DATA = 10-rate-lavc.conf
+-
+-asound_module_rate_lavcratedir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
+-
+-AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @AVCODEC_CFLAGS@ \
+- -DAVCODEC_HEADER="@AVCODEC_HEADER@"
+-AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+-
+-libasound_module_rate_lavcrate_la_SOURCES = rate_lavcrate.c
+-libasound_module_rate_lavcrate_la_LIBADD = @ALSA_LIBS@ @AVCODEC_LIBS@
+-
+-noinst_HEADERS = gcd.h
+-
+-install-exec-hook:
+- rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_*.so
+- $(LN_S) libasound_module_rate_lavcrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_higher.so
+- $(LN_S) libasound_module_rate_lavcrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_high.so
+- $(LN_S) libasound_module_rate_lavcrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_fast.so
+- $(LN_S) libasound_module_rate_lavcrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_faster.so
+-
+-uninstall-hook:
+- rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavcrate_*.so
+diff --git a/rate-lavc/rate_lavcrate.c b/rate-lavc/rate_lavcrate.c
+deleted file mode 100644
+index 14a2198..0000000
+--- a/rate-lavc/rate_lavcrate.c
++++ /dev/null
+@@ -1,291 +0,0 @@
+-/*
+- * Rate converter plugin using libavcodec's resampler
+- * Copyright (c) 2007 by Nicholas Kain <njkain(a)gmail.com>
+- *
+- * based on rate converter that uses libsamplerate
+- * Copyright (c) 2006 by Takashi Iwai <tiwai(a)suse.de>
+- *
+- * 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 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.
+- */
+-
+-#include <stdio.h>
+-#include <alsa/asoundlib.h>
+-#include <alsa/pcm_rate.h>
+-#include AVCODEC_HEADER
+-#include "gcd.h"
+-
+-static int filter_size = 16;
+-static int phase_shift = 10; /* auto-adjusts */
+-static double cutoff = 0; /* auto-adjusts */
+-
+-struct rate_src {
+- struct AVResampleContext *context;
+- int in_rate;
+- int out_rate;
+- int stored;
+- int point;
+- int16_t **out;
+- int16_t **in;
+- unsigned int channels;
+-};
+-
+-static snd_pcm_uframes_t input_frames(void *obj, snd_pcm_uframes_t frames)
+-{
+- return frames;
+-}
+-
+-static snd_pcm_uframes_t output_frames(void *obj, snd_pcm_uframes_t frames)
+-{
+- return frames;
+-}
+-
+-static void pcm_src_free(void *obj)
+-{
+- struct rate_src *rate = obj;
+- int i;
+-
+- if (rate->out) {
+- for (i=0; i<rate->channels; i++) {
+- free(rate->out[i]);
+- }
+- free(rate->out);
+- }
+- if (rate->in) {
+- for (i=0; i<rate->channels; i++) {
+- free(rate->in[i]);
+- }
+- free(rate->in);
+- }
+- rate->out = rate->in = NULL;
+-
+- if (rate->context) {
+- av_resample_close(rate->context);
+- rate->context = NULL;
+- }
+-}
+-
+-static int pcm_src_init(void *obj, snd_pcm_rate_info_t *info)
+-{
+- struct rate_src *rate = obj;
+- int i, ir, or;
+-
+- if (! rate->context || rate->channels != info->channels) {
+- pcm_src_free(rate);
+- rate->channels = info->channels;
+- ir = rate->in_rate = info->in.rate;
+- or = rate->out_rate = info->out.rate;
+- i = gcd(or, ir);
+- if (or > ir) {
+- phase_shift = or/i;
+- } else {
+- phase_shift = ir/i;
+- }
+- if (cutoff <= 0.0) {
+- cutoff = 1.0 - 1.0/filter_size;
+- if (cutoff < 0.80)
+- cutoff = 0.80;
+- }
+- rate->context = av_resample_init(info->out.rate, info->in.rate,
+- filter_size, phase_shift,
+- (info->out.rate >= info->in.rate ? 0 : 1), cutoff);
+- if (!rate->context)
+- return -EINVAL;
+- }
+-
+- rate->out = malloc(rate->channels * sizeof(int16_t *));
+- rate->in = malloc(rate->channels * sizeof(int16_t *));
+- for (i=0; i<rate->channels; i++) {
+- rate->out[i] = calloc(info->out.period_size * 2,
+- sizeof(int16_t));
+- rate->in[i] = calloc(info->in.period_size * 2,
+- sizeof(int16_t));
+- }
+- rate->point = info->in.period_size / 2;
+- if (!rate->out || !rate->in) {
+- pcm_src_free(rate);
+- return -ENOMEM;
+- }
+-
+- return 0;
+-}
+-
+-static int pcm_src_adjust_pitch(void *obj, snd_pcm_rate_info_t *info)
+-{
+- struct rate_src *rate = obj;
+-
+- if (info->out.rate != rate->out_rate || info->in.rate != rate->in_rate)
+- pcm_src_init(obj, info);
+- return 0;
+-}
+-
+-static void pcm_src_reset(void *obj)
+-{
+- struct rate_src *rate = obj;
+- rate->stored = 0;
+-}
+-
+-static void deinterleave(const int16_t *src, int16_t **dst, unsigned int frames,
+- unsigned int chans, int overflow)
+-{
+- int i, j;
+-
+- if (chans == 1) {
+- memcpy(dst + overflow, src, frames*sizeof(int16_t));
+- } else if (chans == 2) {
+- for (j=overflow; j<(frames + overflow); j++) {
+- dst[0][j] = *(src++);
+- dst[1][j] = *(src++);
+- }
+- } else {
+- for (j=overflow; j<(frames + overflow); j++) {
+- for (i=0; i<chans; i++) {
+- dst[i][j] = *(src++);
+- }
+- }
+- }
+-}
+-
+-static void reinterleave(int16_t **src, int16_t *dst, unsigned int frames,
+- unsigned int chans)
+-{
+- int i, j;
+-
+- if (chans == 1) {
+- memcpy(dst, src, frames*sizeof(int16_t));
+- } else if (chans == 2) {
+- for (j=0; j<frames; j++) {
+- *(dst++) = src[0][j];
+- *(dst++) = src[1][j];
+- }
+- } else {
+- for (j=0; j<frames; j++) {
+- for (i=0; i<chans; i++) {
+- *(dst++) = src[i][j];
+- }
+- }
+- }
+-}
+-
+-static void pcm_src_convert_s16(void *obj, int16_t *dst, unsigned int
+- dst_frames, const int16_t *src, unsigned int src_frames)
+-{
+- struct rate_src *rate = obj;
+- int consumed = 0, chans=rate->channels, ret=0, i;
+- int total_in = rate->stored + src_frames, new_stored;
+-
+- deinterleave(src, rate->in, src_frames, chans, rate->point);
+- for (i=0; i<chans; ++i) {
+- ret = av_resample(rate->context, rate->out[i],
+- rate->in[i]+rate->point-rate->stored, &consumed,
+- total_in, dst_frames, i == (chans - 1));
+- new_stored = total_in-consumed;
+- memmove(rate->in[i]+rate->point-new_stored,
+- rate->in[i]+rate->point-rate->stored+consumed,
+- new_stored*sizeof(int16_t));
+- }
+- av_resample_compensate(rate->context,
+- total_in-src_frames>filter_size?0:1, src_frames);
+- reinterleave(rate->out, dst, ret, chans);
+- rate->stored = total_in-consumed;
+-}
+-
+-static void pcm_src_close(void *obj)
+-{
+- pcm_src_free(obj);
+-}
+-
+-#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
+-static int get_supported_rates(void *obj, unsigned int *rate_min,
+- unsigned int *rate_max)
+-{
+- *rate_min = *rate_max = 0; /* both unlimited */
+- return 0;
+-}
+-
+-static void dump(void *obj, snd_output_t *out)
+-{
+- snd_output_printf(out, "Converter: liblavc\n");
+-}
+-#endif
+-
+-static snd_pcm_rate_ops_t pcm_src_ops = {
+- .close = pcm_src_close,
+- .init = pcm_src_init,
+- .free = pcm_src_free,
+- .reset = pcm_src_reset,
+- .adjust_pitch = pcm_src_adjust_pitch,
+- .convert_s16 = pcm_src_convert_s16,
+- .input_frames = input_frames,
+- .output_frames = output_frames,
+-#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
+- .version = SND_PCM_RATE_PLUGIN_VERSION,
+- .get_supported_rates = get_supported_rates,
+- .dump = dump,
+-#endif
+-};
+-
+-int pcm_src_open(unsigned int version, void **objp, snd_pcm_rate_ops_t *ops)
+-
+-{
+- struct rate_src *rate;
+-
+-#if SND_PCM_RATE_PLUGIN_VERSION < 0x010002
+- if (version != SND_PCM_RATE_PLUGIN_VERSION) {
+- fprintf(stderr, "Invalid rate plugin version %x\n", version);
+- return -EINVAL;
+- }
+-#endif
+- rate = calloc(1, sizeof(*rate));
+- if (!rate)
+- return -ENOMEM;
+-
+- *objp = rate;
+- rate->context = NULL;
+-#if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
+- if (version == 0x010001)
+- memcpy(ops, &pcm_src_ops, sizeof(snd_pcm_rate_old_ops_t));
+- else
+-#endif
+- *ops = pcm_src_ops;
+- return 0;
+-}
+-
+-int SND_PCM_RATE_PLUGIN_ENTRY(lavcrate)(unsigned int version, void **objp,
+- snd_pcm_rate_ops_t *ops)
+-{
+- return pcm_src_open(version, objp, ops);
+-}
+-int SND_PCM_RATE_PLUGIN_ENTRY(lavcrate_higher)(unsigned int version,
+- void **objp, snd_pcm_rate_ops_t *ops)
+-{
+- filter_size = 64;
+- return pcm_src_open(version, objp, ops);
+-}
+-int SND_PCM_RATE_PLUGIN_ENTRY(lavcrate_high)(unsigned int version,
+- void **objp, snd_pcm_rate_ops_t *ops)
+-{
+- filter_size = 32;
+- return pcm_src_open(version, objp, ops);
+-}
+-int SND_PCM_RATE_PLUGIN_ENTRY(lavcrate_fast)(unsigned int version,
+- void **objp, snd_pcm_rate_ops_t *ops)
+-{
+- filter_size = 8;
+- return pcm_src_open(version, objp, ops);
+-}
+-int SND_PCM_RATE_PLUGIN_ENTRY(lavcrate_faster)(unsigned int version,
+- void **objp, snd_pcm_rate_ops_t *ops)
+-{
+- filter_size = 4;
+- return pcm_src_open(version, objp, ops);
+-}
+-
+-
+--
+2.13.6
+
+
+From 4afd4ab0b276b26b965bae3aadaa31cdb52b1df0 Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Mon, 16 Apr 2018 17:49:36 +0200
+Subject: [PATCH 2/3] configure: change --with-alsaaddondir to
+ --with-alsagconfdir and --with-alsalconfdir
+
+The local add-on configuration directory (/etc/alsa/conf.d) contains
+links to the global configuration directory (/usr/share/alsa/alsa.conf.d) now.
+
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ a52/Makefile.am | 14 +++++++++++---
+ arcam-av/Makefile.am | 14 +++++++++++---
+ configure.ac | 32 ++++++++++++++++++++++----------
+ install-hooks.am | 16 ++++++++++++++++
+ jack/Makefile.am | 14 +++++++++++---
+ maemo/Makefile.am | 14 +++++++++++---
+ mix/Makefile.am | 14 +++++++++++---
+ oss/Makefile.am | 14 +++++++++++---
+ pph/Makefile.am | 16 ++++++++++++----
+ pulse/Makefile.am | 17 ++++++++++++++---
+ rate-lav/Makefile.am | 13 ++++++++++---
+ rate/Makefile.am | 14 +++++++++++---
+ speex/Makefile.am | 14 +++++++++++---
+ usb_stream/Makefile.am | 14 +++++++++++---
+ 14 files changed, 173 insertions(+), 47 deletions(-)
+ create mode 100644 install-hooks.am
+
+diff --git a/a52/Makefile.am b/a52/Makefile.am
+index 4ac8edd..cd5ce45 100644
+--- a/a52/Makefile.am
++++ b/a52/Makefile.am
+@@ -1,13 +1,21 @@
+-EXTRA_DIST = 60-a52-encoder.conf
++GCONF_FILES = 60-a52-encoder.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_a52_LTLIBRARIES = libasound_module_pcm_a52.la
+-asound_module_addon_DATA = 60-a52-encoder.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_a52dir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @LIBAV_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+
+ libasound_module_pcm_a52_la_SOURCES = pcm_a52.c
+ libasound_module_pcm_a52_la_LIBADD = @ALSA_LIBS@ @LIBAV_LIBS@ @LIBAV_CODEC_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/arcam-av/Makefile.am b/arcam-av/Makefile.am
+index 4a54ccd..c16aec0 100644
+--- a/arcam-av/Makefile.am
++++ b/arcam-av/Makefile.am
+@@ -1,13 +1,21 @@
+-EXTRA_DIST = 50-arcam-av-ctl.conf
++GCONF_FILES = 50-arcam-av-ctl.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_ctl_arcam_av_LTLIBRARIES = libasound_module_ctl_arcam_av.la
+-asound_module_addon_DATA = 50-arcam-av-ctl.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_ctl_arcam_avdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
+
+ libasound_module_ctl_arcam_av_la_SOURCES = ctl_arcam_av.c arcam_av.c arcam_av.h
+ libasound_module_ctl_arcam_av_la_LIBADD = @ALSA_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/configure.ac b/configure.ac
+index cb1ae2d..f49bb6b 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -210,17 +210,29 @@ AC_DEFINE_UNQUOTED(ALSA_DATA_DIR, "$alsadatadir",
[directory containing ALSA dat
+ ALSA_DATA_DIR="$alsadatadir"
+ AC_SUBST(ALSA_DATA_DIR)
+
+-dnl ALSA add-on config directory
+-AC_ARG_WITH(alsaaddondir,
+- AS_HELP_STRING([--with-alsaaddondir=dir],
+- [path where ALSA add-on config files are stored]),
+- alsaaddondir="$withval", alsaaddondir="")
+-if test -z "$alsaaddondir"; then
+- alsaaddondir="/etc/alsa/conf.d"
++dnl ALSA add-on global config directory
++AC_ARG_WITH(alsagconfdir,
++ AS_HELP_STRING([--with-alsagconfdir=dir],
++ [path where ALSA global add-on config files are stored]),
++ alsagconfdir="$withval", alsagconfdir="")
++if test -z "$alsagconfdir"; then
++ alsagconfdir="$ALSA_DATA_DIR/alsa.conf.d"
+ fi
+-AC_DEFINE_UNQUOTED(ALSA_ADDON_DIR, "$alsaaddondir", [directory containing ALSA
add-on config files])
+-ALSA_ADDON_DIR="$alsaaddondir"
+-AC_SUBST(ALSA_ADDON_DIR)
++AC_DEFINE_UNQUOTED(ALSA_GCONF_DIR, "$alsagconfdir", [directory containing
global ALSA add-on config files])
++ALSA_GCONF_DIR="$alsagconfdir"
++AC_SUBST(ALSA_GCONF_DIR)
++
++dnl ALSA add-on local config directory
++AC_ARG_WITH(alsalconfdir,
++ AS_HELP_STRING([--with-alsalconfdir=dir],
++ [path where ALSA local add-on config files are stored]),
++ alsalconfdir="$withval", alsalconfdir="")
++if test -z "$alsalconfdir"; then
++ alsalconfdir="/etc/alsa/conf.d"
++fi
++AC_DEFINE_UNQUOTED(ALSA_LCONF_DIR, "$alsalconfdir", [directory containing
local ALSA add-on config files])
++ALSA_LCONF_DIR="$alsalconfdir"
++AC_SUBST(ALSA_LCONF_DIR)
+
+ SAVE_PLUGINS_VERSION
+
+diff --git a/install-hooks.am b/install-hooks.am
+new file mode 100644
+index 0000000..2d6d383
+--- /dev/null
++++ b/install-hooks.am
+@@ -0,0 +1,16 @@
++install-conf-hook:
++ mkdir -p $(DESTDIR)$(ALSA_LCONF_DIR)
++ @(echo cd $(DESTDIR)$(ALSA_LCONF_DIR); \
++ cd $(DESTDIR)$(ALSA_LCONF_DIR); \
++ for i in $(GCONF_FILES); do \
++ echo $(RM) $$i";" ln -s $(ALSA_GCONF_DIR)/$$i .; \
++ $(RM) $$i; \
++ ln -s $(ALSA_GCONF_DIR)/$$i .; \
++ done)
++uninstall-conf-hook:
++ @(echo cd $(DESTDIR)$(ALSA_LCONF_DIR); \
++ cd $(DESTDIR)$(ALSA_LCONF_DIR); \
++ for i in $(GCONF_FILES); do \
++ echo $(RM) $$i; \
++ $(RM) $$i; \
++ done)
+diff --git a/jack/Makefile.am b/jack/Makefile.am
+index 0a3d6ae..7801194 100644
+--- a/jack/Makefile.am
++++ b/jack/Makefile.am
+@@ -1,13 +1,21 @@
+-EXTRA_DIST = 50-jack.conf
++GCONF_FILES = 50-jack.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_jack_LTLIBRARIES = libasound_module_pcm_jack.la
+-asound_module_addon_DATA = 50-jack.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_jackdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @JACK_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+
+ libasound_module_pcm_jack_la_SOURCES = pcm_jack.c
+ libasound_module_pcm_jack_la_LIBADD = @ALSA_LIBS@ @JACK_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/maemo/Makefile.am b/maemo/Makefile.am
+index aca481d..7749926 100644
+--- a/maemo/Makefile.am
++++ b/maemo/Makefile.am
+@@ -1,12 +1,14 @@
+-EXTRA_DIST = 98-maemo.conf
++GCONF_FILES = 98-maemo.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_alsa_dsp_LTLIBRARIES = libasound_module_pcm_alsa_dsp.la
+ asound_module_ctl_dsp_ctl_LTLIBRARIES = libasound_module_ctl_dsp_ctl.la
+-asound_module_addon_DATA = 98-maemo.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_alsa_dspdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctl_dsp_ctldir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -O2 @ALSA_CFLAGS@ $(DBUS_CFLAGS)
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -19,3 +21,9 @@ libasound_module_ctl_dsp_ctl_la_LIBADD = @ALSA_LIBS@ $(DBUS_LIBS)
-lpthread
+
+ noinst_HEADERS = constants.h debug.h dsp-protocol.h list.h reporting.h \
+ types.h
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/mix/Makefile.am b/mix/Makefile.am
+index 710606c..a74c200 100644
+--- a/mix/Makefile.am
++++ b/mix/Makefile.am
+@@ -1,12 +1,14 @@
+-EXTRA_DIST = 60-upmix.conf 60-vdownmix.conf
++GCONF_FILES = 60-upmix.conf 60-vdownmix.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_upmix_LTLIBRARIES = libasound_module_pcm_upmix.la
+ asound_module_pcm_vdownmix_LTLIBRARIES = libasound_module_pcm_vdownmix.la
+-asound_module_addon_DATA = 60-upmix.conf 60-vdownmix.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_upmixdir = @ALSA_PLUGIN_DIR@
+ asound_module_pcm_vdownmixdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -15,3 +17,9 @@ libasound_module_pcm_upmix_la_SOURCES = pcm_upmix.c
+ libasound_module_pcm_upmix_la_LIBADD = @ALSA_LIBS@
+ libasound_module_pcm_vdownmix_la_SOURCES = pcm_vdownmix.c
+ libasound_module_pcm_vdownmix_la_LIBADD = @ALSA_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/oss/Makefile.am b/oss/Makefile.am
+index df83d20..46dfcac 100644
+--- a/oss/Makefile.am
++++ b/oss/Makefile.am
+@@ -1,12 +1,14 @@
+-EXTRA_DIST = 50-oss.conf
++GCONF_FILEs = 50-oss.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_oss_LTLIBRARIES = libasound_module_pcm_oss.la
+ asound_module_ctl_oss_LTLIBRARIES = libasound_module_ctl_oss.la
+-asound_module_addon_DATA = 50-oss.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_ossdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctl_ossdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -16,3 +18,9 @@ libasound_module_pcm_oss_la_LIBADD = @ALSA_LIBS@
+
+ libasound_module_ctl_oss_la_SOURCES = ctl_oss.c
+ libasound_module_ctl_oss_la_LIBADD = @ALSA_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/pph/Makefile.am b/pph/Makefile.am
+index abb950b..6938b74 100644
+--- a/pph/Makefile.am
++++ b/pph/Makefile.am
+@@ -1,10 +1,12 @@
+-EXTRA_DIST = 10-speexrate.conf
++GCONF_FILES = 10-speexrate.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_rate_speexrate_LTLIBRARIES = libasound_module_rate_speexrate.la
+-asound_module_addon_DATA = 10-speexrate.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_rate_speexratedir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -DVAR_ARRAYS -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -20,6 +22,10 @@ libasound_module_rate_speexrate_la_SOURCES += resample.c
+ libasound_module_rate_speexrate_la_LIBADD += -lm
+ endif
+
++noinst_HEADERS = speex_resampler.h arch.h fixed_generic.h
++
++include ../install-hooks.am
++
+ install-exec-hook:
+ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_speexrate_*.so
+ $(LN_S) libasound_module_rate_speexrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_speexrate_best.so
+@@ -28,4 +34,6 @@ install-exec-hook:
+ uninstall-hook:
+ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_speexrate_*.so
+
+-noinst_HEADERS = speex_resampler.h arch.h fixed_generic.h
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/pulse/Makefile.am b/pulse/Makefile.am
+index 835808c..c33e702 100644
+--- a/pulse/Makefile.am
++++ b/pulse/Makefile.am
+@@ -1,14 +1,19 @@
+-EXTRA_DIST = 50-pulseaudio.conf 99-pulseaudio-default.conf.example
++GCONF_FILES = 50-pulseaudio.conf
++LCONF_FILES = 99-pulseaudio-default.conf.example
++
++EXTRA_DIST = $(GCONF_FILES) $(LCONF_FILES)
+
+ asound_module_pcm_LTLIBRARIES = libasound_module_pcm_pulse.la
+ asound_module_ctl_LTLIBRARIES = libasound_module_ctl_pulse.la
+ asound_module_conf_LTLIBRARIES = libasound_module_conf_pulse.la
+-asound_module_addon_DATA = 50-pulseaudio.conf 99-pulseaudio-default.conf.example
++asound_module_gconf_DATA = $(GCONF_FILES)
++asound_module_lconf_DATA = $(LCONF_FILES)
+
+ asound_module_pcmdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctldir = @ALSA_PLUGIN_DIR@
+ asound_module_confdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
++asound_module_lconfdir = @ALSA_LCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ $(PTHREAD_CFLAGS) $(pulseaudio_CFLAGS) -D_GNU_SOURCE
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -21,3 +26,9 @@ libasound_module_ctl_pulse_la_LIBADD = @ALSA_LIBS@ $(PTHREAD_LIBS)
$(pulseaudio_
+
+ libasound_module_conf_pulse_la_SOURCES = conf_pulse.c
+ libasound_module_conf_pulse_la_LIBADD = @ALSA_LIBS@ $(PTHREAD_LIBS) $(pulseaudio_LIBS)
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/rate-lav/Makefile.am b/rate-lav/Makefile.am
+index 0f6ecb6..eb672b5 100644
+--- a/rate-lav/Makefile.am
++++ b/rate-lav/Makefile.am
+@@ -1,10 +1,12 @@
+-EXTRA_DIST = 10-rate-lav.conf
++GCONF_FILES = 10-rate-lav.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_rate_lavrate_LTLIBRARIES = libasound_module_rate_lavrate.la
+-asound_module_addon_DATA = 10-rate-lav.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_rate_lavratedir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @LIBAV_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -14,6 +16,8 @@ libasound_module_rate_lavrate_la_LIBADD = @ALSA_LIBS@ @LIBAV_LIBS@
@LIBAV_RESAMP
+
+ noinst_HEADERS = gcd.h
+
++include ../install-hooks.am
++
+ install-exec-hook:
+ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_*.so
+ $(LN_S) libasound_module_rate_lavrate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_higher.so
+@@ -23,3 +27,6 @@ install-exec-hook:
+
+ uninstall-hook:
+ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_lavrate_*.so
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/rate/Makefile.am b/rate/Makefile.am
+index 25014d8..488c12a 100644
+--- a/rate/Makefile.am
++++ b/rate/Makefile.am
+@@ -1,10 +1,12 @@
+-EXTRA_DIST = 10-samplerate.conf
++GCONF_FILES = 10-samplerate.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_rate_samplerate_LTLIBRARIES = libasound_module_rate_samplerate.la
+-asound_module_addon_DATA = 10-samplerate.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_rate_sampleratedir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ $(samplerate_CFLAGS)
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -12,6 +14,8 @@ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUN
+ libasound_module_rate_samplerate_la_SOURCES = rate_samplerate.c
+ libasound_module_rate_samplerate_la_LIBADD = @ALSA_LIBS@ @samplerate_LIBS@
+
++include ../install-hooks.am
++
+ install-exec-hook:
+ rm -f $(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_samplerate_*.so
+ $(LN_S) libasound_module_rate_samplerate.so
$(DESTDIR)@ALSA_PLUGIN_DIR(a)/libasound_module_rate_samplerate_best.so
+@@ -21,3 +25,7 @@ install-exec-hook:
+
+ uninstall-hook:
+ rm -f $(DESTDIR)$(libdir)/alsa-lib/libasound_module_rate_samplerate_*.so
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/speex/Makefile.am b/speex/Makefile.am
+index 7891954..27c4ea5 100644
+--- a/speex/Makefile.am
++++ b/speex/Makefile.am
+@@ -1,13 +1,21 @@
+-EXTRA_DIST = 60-speex.conf
++GCONF_FILES = 60-speex.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_speex_LTLIBRARIES = libasound_module_pcm_speex.la
+-asound_module_addon_DATA = 60-speex.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_speexdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @speexdsp_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+
+ libasound_module_pcm_speex_la_SOURCES = pcm_speex.c
+ libasound_module_pcm_speex_la_LIBADD = @ALSA_LIBS@ @speexdsp_LIBS@
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+diff --git a/usb_stream/Makefile.am b/usb_stream/Makefile.am
+index b606d3d..203618b 100644
+--- a/usb_stream/Makefile.am
++++ b/usb_stream/Makefile.am
+@@ -1,10 +1,12 @@
+-EXTRA_DIST = 98-usb-stream.conf
++GCONF_FILES = 98-usb-stream.conf
++
++EXTRA_DIST = $(GCONF_FILES)
+
+ asound_module_pcm_usb_stream_LTLIBRARIES = libasound_module_pcm_usb_stream.la
+-asound_module_addon_DATA = 98-usb-stream.conf
++asound_module_gconf_DATA = $(GCONF_FILES)
+
+ asound_module_pcm_usb_streamdir = @ALSA_PLUGIN_DIR@
+-asound_module_addondir = @ALSA_ADDON_DIR@
++asound_module_gconfdir = @ALSA_GCONF_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic $(LDFLAGS_NOUNDEFINED)
+@@ -13,3 +15,9 @@ libasound_module_pcm_usb_stream_la_SOURCES = pcm_usb_stream.c
+ libasound_module_pcm_usb_stream_la_LIBADD = @ALSA_LIBS@
+
+ noinst_HEADERS = usb_stream.h
++
++include ../install-hooks.am
++
++install-data-hook: install-conf-hook
++
++uninstall-local: uninstall-conf-hook
+--
+2.13.6
+
+
+From beb24e58763e3b1d831fcd7ef87a478e6ac74fcc Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Mon, 16 Apr 2018 18:14:18 +0200
+Subject: [PATCH 3/3] oss/Makefile.am: fix typo
+
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ oss/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/oss/Makefile.am b/oss/Makefile.am
+index 46dfcac..bff4443 100644
+--- a/oss/Makefile.am
++++ b/oss/Makefile.am
+@@ -1,4 +1,4 @@
+-GCONF_FILEs = 50-oss.conf
++GCONF_FILES = 50-oss.conf
+
+ EXTRA_DIST = $(GCONF_FILES)
+
+--
+2.13.6
+
diff --git a/plugin-config.patch b/plugin-config.patch
new file mode 100644
index 0000000..5af851d
--- /dev/null
+++ b/plugin-config.patch
@@ -0,0 +1,888 @@
+From e8fabec7adc70220f52588dc170d90d146b92ba7 Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Thu, 5 Apr 2018 09:23:09 +0200
+Subject: [PATCH 1/3] samplerate: fix unused variable warning
+
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ rate/rate_samplerate.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/rate/rate_samplerate.c b/rate/rate_samplerate.c
+index 0b14a59..100d6f2 100644
+--- a/rate/rate_samplerate.c
++++ b/rate/rate_samplerate.c
+@@ -154,14 +154,14 @@ static void pcm_src_close(void *obj)
+ }
+
+ #if SND_PCM_RATE_PLUGIN_VERSION >= 0x010002
+-static int get_supported_rates(void *obj, unsigned int *rate_min,
++static int get_supported_rates(void *obj ATTRIBUTE_UNUSED, unsigned int *rate_min,
+ unsigned int *rate_max)
+ {
+ *rate_min = *rate_max = 0; /* both unlimited */
+ return 0;
+ }
+
+-static void dump(void *obj, snd_output_t *out)
++static void dump(void *obj ATTRIBUTE_UNUSED, snd_output_t *out)
+ {
+ snd_output_printf(out, "Converter: libsamplerate\n");
+ }
+--
+2.13.6
+
+
+From 6e40eb5fd346207021a95d06bc30205a537926ea Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Wed, 4 Apr 2018 19:57:56 +0200
+Subject: [PATCH 2/3] configure: add --with-alsaaddondir, add default config
+ files for plugins
+
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ a52/60-a52-encoder.conf | 38 ++++++++++++++++++++++++++
+ a52/Makefile.am | 4 +++
+ a52/pcm_a52.c | 2 +-
+ arcam-av/50-arcam-av-ctl.conf | 16 +++++++++++
+ arcam-av/Makefile.am | 4 +++
+ configure.ac | 12 +++++++++
+ jack/50-jack.conf | 18 +++++++++++++
+ jack/Makefile.am | 4 +++
+ maemo/98-maemo.conf | 11 ++++++++
+ maemo/Makefile.am | 4 +++
+ mix/60-upmix.conf | 26 ++++++++++++++++++
+ mix/60-vdownmix.conf | 24 +++++++++++++++++
+ mix/Makefile.am | 5 +++-
+ oss/50-oss.conf | 26 ++++++++++++++++++
+ oss/Makefile.am | 4 +++
+ pph/10-speexrate.conf | 28 +++++++++++++++++++
+ pph/Makefile.am | 4 +++
+ pulse/50-pulseaudio.conf | 15 ++++++-----
+ pulse/Makefile.am | 4 +--
+ rate-lavc/10-rate-lavc.conf | 28 +++++++++++++++++++
+ rate-lavc/Makefile.am | 4 +++
+ rate/10-samplerate.conf | 28 +++++++++++++++++++
+ rate/Makefile.am | 4 +++
+ speex/60-speex.conf | 63 +++++++++++++++++++++++++++++++++++++++++++
+ speex/Makefile.am | 4 +++
+ usb_stream/98-usb-stream.conf | 27 +++++++++++++++++++
+ usb_stream/Makefile.am | 4 +++
+ 27 files changed, 401 insertions(+), 10 deletions(-)
+ create mode 100644 a52/60-a52-encoder.conf
+ create mode 100644 arcam-av/50-arcam-av-ctl.conf
+ create mode 100644 jack/50-jack.conf
+ create mode 100644 maemo/98-maemo.conf
+ create mode 100644 mix/60-upmix.conf
+ create mode 100644 mix/60-vdownmix.conf
+ create mode 100644 oss/50-oss.conf
+ create mode 100644 pph/10-speexrate.conf
+ create mode 100644 rate-lavc/10-rate-lavc.conf
+ create mode 100644 rate/10-samplerate.conf
+ create mode 100644 speex/60-speex.conf
+ create mode 100644 usb_stream/98-usb-stream.conf
+
+diff --git a/a52/60-a52-encoder.conf b/a52/60-a52-encoder.conf
+new file mode 100644
+index 0000000..346c94f
+--- /dev/null
++++ b/a52/60-a52-encoder.conf
+@@ -0,0 +1,38 @@
++pcm.a52 {
++ @args [ CARD SLAVE RATE BITRATE CHANNELS ]
++ @args.CARD {
++ type integer
++ default {
++ @func refer
++ name defaults.pcm.card
++ }
++ }
++ @args.SLAVE {
++ type string
++ }
++ @args.RATE {
++ type integer
++ default 48000
++ }
++ @args.BITRATE {
++ type integer
++ default 448
++ }
++ @args.CHANNELS {
++ type string
++ default 6
++ }
++ type a52
++ card $CARD
++ slavepcm $SLAVE
++ rate $RATE
++ bitrate $BITRATE
++ channels $CHANNELS
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Plugin to convert multichannel stream to A52 (AC3)
bitstream"
++ }
++}
+diff --git a/a52/Makefile.am b/a52/Makefile.am
+index 48567b4..cbc1497 100644
+--- a/a52/Makefile.am
++++ b/a52/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 60-a52-encoder.conf
++
+ asound_module_pcm_a52_LTLIBRARIES = libasound_module_pcm_a52.la
++asound_module_addon_DATA = 60-a52-encoder.conf
+
+ asound_module_pcm_a52dir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @AVCODEC_CFLAGS@ \
+ -DAVCODEC_HEADER="@AVCODEC_HEADER@"
+diff --git a/a52/pcm_a52.c b/a52/pcm_a52.c
+index 348d58f..155da36 100644
+--- a/a52/pcm_a52.c
++++ b/a52/pcm_a52.c
+@@ -937,7 +937,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(a52)
+ goto error;
+ }
+
+- if (! pcm_string) {
++ if (! pcm_string || pcm_string[0] == '\0') {
+ snprintf(devstr, sizeof(devstr),
+ "iec958:{AES0 0x%x AES1 0x%x AES2 0x%x AES3 0x%x %s%s}",
+ IEC958_AES0_CON_EMPHASIS_NONE | IEC958_AES0_NONAUDIO |
+diff --git a/arcam-av/50-arcam-av-ctl.conf b/arcam-av/50-arcam-av-ctl.conf
+new file mode 100644
+index 0000000..b76caa9
+--- /dev/null
++++ b/arcam-av/50-arcam-av-ctl.conf
+@@ -0,0 +1,16 @@
++ctl.arcam_av {
++ @args [ PORT ]
++ @args.PORT {
++ type string
++ default "/dev/ttyUSB0"
++ }
++ type arcam_av
++ port $PORT
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Arcam-AV Amplifier"
++ }
++}
+diff --git a/arcam-av/Makefile.am b/arcam-av/Makefile.am
+index 5c7855f..4a54ccd 100644
+--- a/arcam-av/Makefile.am
++++ b/arcam-av/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 50-arcam-av-ctl.conf
++
+ asound_module_ctl_arcam_av_LTLIBRARIES = libasound_module_ctl_arcam_av.la
++asound_module_addon_DATA = 50-arcam-av-ctl.conf
+
+ asound_module_ctl_arcam_avdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
+diff --git a/configure.ac b/configure.ac
+index ecc265b..ae98caa 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -206,6 +206,18 @@ AC_DEFINE_UNQUOTED(ALSA_DATA_DIR, "$alsadatadir",
[directory containing ALSA dat
+ ALSA_DATA_DIR="$alsadatadir"
+ AC_SUBST(ALSA_DATA_DIR)
+
++dnl ALSA add-on config directory
++AC_ARG_WITH(alsaaddondir,
++ AS_HELP_STRING([--with-alsaaddondir=dir],
++ [path where ALSA add-on config files are stored]),
++ alsaaddondir="$withval", alsaaddondir="")
++if test -z "$alsaaddondir"; then
++ alsaaddondir="/etc/alsa/conf.d"
++fi
++AC_DEFINE_UNQUOTED(ALSA_ADDON_DIR, "$alsaaddondir", [directory containing ALSA
add-on config files])
++ALSA_ADDON_DIR="$alsaaddondir"
++AC_SUBST(ALSA_ADDON_DIR)
++
+ SAVE_PLUGINS_VERSION
+
+ AC_OUTPUT([
+diff --git a/jack/50-jack.conf b/jack/50-jack.conf
+new file mode 100644
+index 0000000..d780dfc
+--- /dev/null
++++ b/jack/50-jack.conf
+@@ -0,0 +1,18 @@
++pcm.jack {
++ type jack
++ playback_ports {
++ 0 alsa_pcm:playback_1
++ 1 alsa_pcm:playback_2
++ }
++ capture_ports {
++ 0 alsa_pcm:capture_1
++ 1 alsa_pcm:capture_2
++ }
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "JACK Audio Connection Kit"
++ }
++}
+diff --git a/jack/Makefile.am b/jack/Makefile.am
+index f913cb6..0a3d6ae 100644
+--- a/jack/Makefile.am
++++ b/jack/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 50-jack.conf
++
+ asound_module_pcm_jack_LTLIBRARIES = libasound_module_pcm_jack.la
++asound_module_addon_DATA = 50-jack.conf
+
+ asound_module_pcm_jackdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @JACK_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/maemo/98-maemo.conf b/maemo/98-maemo.conf
+new file mode 100644
+index 0000000..a9ad6a0
+--- /dev/null
++++ b/maemo/98-maemo.conf
+@@ -0,0 +1,11 @@
++pcm.!default {
++ type alsa_dsp
++ playback_device_file [ "/dev/dsptask/pcm2" ]
++ recording_device_file [ "/dev/dsptask/pcm_rec" ]
++}
++
++ctl.!default {
++ type dsp_ctl
++ playback_devices [ "/dev/dsptask/pcm2" ]
++ recording_devices [ "/dev/dsptask/pcm_rec" ]
++}
+diff --git a/maemo/Makefile.am b/maemo/Makefile.am
+index 2684781..aca481d 100644
+--- a/maemo/Makefile.am
++++ b/maemo/Makefile.am
+@@ -1,8 +1,12 @@
++EXTRA_DIST = 98-maemo.conf
++
+ asound_module_pcm_alsa_dsp_LTLIBRARIES = libasound_module_pcm_alsa_dsp.la
+ asound_module_ctl_dsp_ctl_LTLIBRARIES = libasound_module_ctl_dsp_ctl.la
++asound_module_addon_DATA = 98-maemo.conf
+
+ asound_module_pcm_alsa_dspdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctl_dsp_ctldir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -O2 @ALSA_CFLAGS@ $(DBUS_CFLAGS)
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/mix/60-upmix.conf b/mix/60-upmix.conf
+new file mode 100644
+index 0000000..028cfe1
+--- /dev/null
++++ b/mix/60-upmix.conf
+@@ -0,0 +1,26 @@
++pcm.upmix {
++ @args [ SLAVE CHANNELS DELAY ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.CHANNELS {
++ type integer
++ default 6
++ }
++ @args.DELAY {
++ type integer
++ default 0
++ }
++ type upmix
++ channels $CHANNELS
++ delay $DELAY
++ slave.pcm $SLAVE
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Plugin for channel upmix (4,6,8)"
++ }
++}
+diff --git a/mix/60-vdownmix.conf b/mix/60-vdownmix.conf
+new file mode 100644
+index 0000000..32e9c56
+--- /dev/null
++++ b/mix/60-vdownmix.conf
+@@ -0,0 +1,24 @@
++pcm.vdownmix {
++ @args [ SLAVE CHANNELS DELAY ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.CHANNELS {
++ type integer
++ default 6
++ }
++ @args.DELAY {
++ type integer
++ default 0
++ }
++ type vdownmix
++ slave.pcm $SLAVE
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Plugin for channel downmix (stereo) with a simple
spacialization"
++ }
++}
+diff --git a/mix/Makefile.am b/mix/Makefile.am
+index e31839a..710606c 100644
+--- a/mix/Makefile.am
++++ b/mix/Makefile.am
+@@ -1,8 +1,12 @@
++EXTRA_DIST = 60-upmix.conf 60-vdownmix.conf
++
+ asound_module_pcm_upmix_LTLIBRARIES = libasound_module_pcm_upmix.la
+ asound_module_pcm_vdownmix_LTLIBRARIES = libasound_module_pcm_vdownmix.la
++asound_module_addon_DATA = 60-upmix.conf 60-vdownmix.conf
+
+ asound_module_pcm_upmixdir = @ALSA_PLUGIN_DIR@
+ asound_module_pcm_vdownmixdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+@@ -11,4 +15,3 @@ libasound_module_pcm_upmix_la_SOURCES = pcm_upmix.c
+ libasound_module_pcm_upmix_la_LIBADD = @ALSA_LIBS@
+ libasound_module_pcm_vdownmix_la_SOURCES = pcm_vdownmix.c
+ libasound_module_pcm_vdownmix_la_LIBADD = @ALSA_LIBS@
+-
+diff --git a/oss/50-oss.conf b/oss/50-oss.conf
+new file mode 100644
+index 0000000..5b2817b
+--- /dev/null
++++ b/oss/50-oss.conf
+@@ -0,0 +1,26 @@
++pcm.oss {
++ @args [ DEVICE ]
++ @args.DEVICE {
++ type string
++ default "/dev/dsp"
++ }
++ type oss
++ port $DEVICE
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Open Sound System"
++ }
++}
++
++ctl.oss {
++ @args [ DEVICE ]
++ @args.DEVICE {
++ type string
++ default "/dev/mixer"
++ }
++ type oss
++ device $DEVICE
++}
+diff --git a/oss/Makefile.am b/oss/Makefile.am
+index 302538b..df83d20 100644
+--- a/oss/Makefile.am
++++ b/oss/Makefile.am
+@@ -1,8 +1,12 @@
++EXTRA_DIST = 50-oss.conf
++
+ asound_module_pcm_oss_LTLIBRARIES = libasound_module_pcm_oss.la
+ asound_module_ctl_oss_LTLIBRARIES = libasound_module_ctl_oss.la
++asound_module_addon_DATA = 50-oss.conf
+
+ asound_module_pcm_ossdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctl_ossdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/pph/10-speexrate.conf b/pph/10-speexrate.conf
+new file mode 100644
+index 0000000..1d9eae9
+--- /dev/null
++++ b/pph/10-speexrate.conf
+@@ -0,0 +1,28 @@
++pcm.speexrate {
++ @args [ SLAVE RATE CONVERTER ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.RATE {
++ type integer
++ default 48000
++ }
++ @args.CONVERTER {
++ type string
++ default "speexrate"
++ }
++ type rate
++ converter $CONVERTER
++ slave {
++ pcm $SLAVE
++ rate $RATE
++ }
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Rate Converter Plugin Using Speex Resampler"
++ }
++}
+diff --git a/pph/Makefile.am b/pph/Makefile.am
+index 551e5bd..abb950b 100644
+--- a/pph/Makefile.am
++++ b/pph/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 10-speexrate.conf
++
+ asound_module_rate_speexrate_LTLIBRARIES = libasound_module_rate_speexrate.la
++asound_module_addon_DATA = 10-speexrate.conf
+
+ asound_module_rate_speexratedir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -DVAR_ARRAYS -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/pulse/50-pulseaudio.conf b/pulse/50-pulseaudio.conf
+index dd85dab..62da207 100644
+--- a/pulse/50-pulseaudio.conf
++++ b/pulse/50-pulseaudio.conf
+@@ -1,13 +1,16 @@
+ # Add a specific named PulseAudio pcm and ctl (typically useful for testing)
+
+ pcm.pulse {
+- type pulse
+- hint {
+- show on
+- description "PulseAudio Sound Server"
+- }
++ type pulse
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "PulseAudio Sound Server"
++ }
+ }
+
+ ctl.pulse {
+- type pulse
++ type pulse
+ }
+diff --git a/pulse/Makefile.am b/pulse/Makefile.am
+index a5550b9..835808c 100644
+--- a/pulse/Makefile.am
++++ b/pulse/Makefile.am
+@@ -3,12 +3,12 @@ EXTRA_DIST = 50-pulseaudio.conf 99-pulseaudio-default.conf.example
+ asound_module_pcm_LTLIBRARIES = libasound_module_pcm_pulse.la
+ asound_module_ctl_LTLIBRARIES = libasound_module_ctl_pulse.la
+ asound_module_conf_LTLIBRARIES = libasound_module_conf_pulse.la
+-asound_module_data_DATA = 50-pulseaudio.conf 99-pulseaudio-default.conf.example
++asound_module_addon_DATA = 50-pulseaudio.conf 99-pulseaudio-default.conf.example
+
+ asound_module_pcmdir = @ALSA_PLUGIN_DIR@
+ asound_module_ctldir = @ALSA_PLUGIN_DIR@
+ asound_module_confdir = @ALSA_PLUGIN_DIR@
+-asound_module_datadir = @ALSA_DATA_DIR(a)/alsa.conf.d
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ $(PTHREAD_CFLAGS) $(pulseaudio_CFLAGS) -D_GNU_SOURCE
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/rate-lavc/10-rate-lavc.conf b/rate-lavc/10-rate-lavc.conf
+new file mode 100644
+index 0000000..bab1694
+--- /dev/null
++++ b/rate-lavc/10-rate-lavc.conf
+@@ -0,0 +1,28 @@
++pcm.lavcrate {
++ @args [ SLAVE RATE CONVERTER ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.RATE {
++ type integer
++ default 48000
++ }
++ @args.CONVERTER {
++ type string
++ default "lavcrate"
++ }
++ type rate
++ converter $CONVERTER
++ slave {
++ pcm $SLAVE
++ rate $RATE
++ }
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Rate Converter Plugin Using AVC Library"
++ }
++}
+diff --git a/rate-lavc/Makefile.am b/rate-lavc/Makefile.am
+index 5cffd44..5f66472 100644
+--- a/rate-lavc/Makefile.am
++++ b/rate-lavc/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 10-rate-lavc.conf
++
+ asound_module_rate_lavcrate_LTLIBRARIES = libasound_module_rate_lavcrate.la
++asound_module_addon_DATA = 10-rate-lavc.conf
+
+ asound_module_rate_lavcratedir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @AVCODEC_CFLAGS@ \
+ -DAVCODEC_HEADER="@AVCODEC_HEADER@"
+diff --git a/rate/10-samplerate.conf b/rate/10-samplerate.conf
+new file mode 100644
+index 0000000..0d2e604
+--- /dev/null
++++ b/rate/10-samplerate.conf
+@@ -0,0 +1,28 @@
++pcm.samplerate {
++ @args [ SLAVE RATE CONVERTER ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.RATE {
++ type integer
++ default 48000
++ }
++ @args.CONVERTER {
++ type string
++ default "samplerate"
++ }
++ type rate
++ converter $CONVERTER
++ slave {
++ pcm $SLAVE
++ rate $RATE
++ }
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Rate Converter Plugin Using Samplerate Library"
++ }
++}
+diff --git a/rate/Makefile.am b/rate/Makefile.am
+index 0605bfd..25014d8 100644
+--- a/rate/Makefile.am
++++ b/rate/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 10-samplerate.conf
++
+ asound_module_rate_samplerate_LTLIBRARIES = libasound_module_rate_samplerate.la
++asound_module_addon_DATA = 10-samplerate.conf
+
+ asound_module_rate_sampleratedir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ $(samplerate_CFLAGS)
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/speex/60-speex.conf b/speex/60-speex.conf
+new file mode 100644
+index 0000000..bf2ce95
+--- /dev/null
++++ b/speex/60-speex.conf
+@@ -0,0 +1,63 @@
++pcm.speex {
++ @args [ SLAVE AGC AGC_LEVEL DENOISE ECHO
++ DEREVERB DEREVERB_DECAY DEREVERB_LEVEL
++ FRAMES FILTER_LENGTH ]
++ @args.SLAVE {
++ type string
++ default "plug:hw"
++ }
++ @args.AGC {
++ type string
++ default off
++ }
++ @args.AGC_LEVEL {
++ type integer
++ default 8000
++ }
++ @args.DENOISE {
++ type string
++ default on
++ }
++ @args.ECHO {
++ type string
++ default off
++ }
++ @args.DEREVERB {
++ type string
++ default off
++ }
++ @args.DEREVERB_DECAY {
++ type real
++ default 0
++ }
++ @args.DEREVERB_LEVEL {
++ type real
++ default 0
++ }
++ @args.FRAMES {
++ type integer
++ default 64
++ }
++ @args.FILTER_LENGTH {
++ type integer
++ default 256
++ }
++ type speex
++ agc $AGC
++ agc_level $AGC_LEVEL
++ denoise $DENOISE
++ echo $ECHO
++ dereverb $DEREVERB
++ dereverb_decay $DEREVERB_DECAY
++ dereverb_level $DEREVERB_LEVEL
++ frames $FRAMES
++ filter_length $FILTER_LENGTH
++ slave.pcm $SLAVE
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "Plugin using Speex DSP (resample, agc, denoise, echo,
dereverb)"
++ }
++}
+diff --git a/speex/Makefile.am b/speex/Makefile.am
+index 7d84190..7891954 100644
+--- a/speex/Makefile.am
++++ b/speex/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 60-speex.conf
++
+ asound_module_pcm_speex_LTLIBRARIES = libasound_module_pcm_speex.la
++asound_module_addon_DATA = 60-speex.conf
+
+ asound_module_pcm_speexdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@ @speexdsp_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic -no-undefined
$(LDFLAGS_NOUNDEFINED)
+diff --git a/usb_stream/98-usb-stream.conf b/usb_stream/98-usb-stream.conf
+new file mode 100644
+index 0000000..2efc95f
+--- /dev/null
++++ b/usb_stream/98-usb-stream.conf
+@@ -0,0 +1,27 @@
++pcm.usbstream {
++ @args [ CARD RATE PERIOD_SIZE ]
++ @args.CARD {
++ type string
++ default {
++ func refer
++ name defaults.pcm.card
++ }
++ }
++ @args.RATE {
++ type integer
++ }
++ @args.PERIOD_SIZE {
++ type integer
++ }
++ type usb_stream
++ card $CARD
++ rate $RATE
++ period_size $PERIOD_SIZE
++ hint {
++ show {
++ @func refer
++ name defaults.namehint.basic
++ }
++ description "USB Stream Output"
++ }
++}
+diff --git a/usb_stream/Makefile.am b/usb_stream/Makefile.am
+index 50a98a0..b606d3d 100644
+--- a/usb_stream/Makefile.am
++++ b/usb_stream/Makefile.am
+@@ -1,6 +1,10 @@
++EXTRA_DIST = 98-usb-stream.conf
++
+ asound_module_pcm_usb_stream_LTLIBRARIES = libasound_module_pcm_usb_stream.la
++asound_module_addon_DATA = 98-usb-stream.conf
+
+ asound_module_pcm_usb_streamdir = @ALSA_PLUGIN_DIR@
++asound_module_addondir = @ALSA_ADDON_DIR@
+
+ AM_CFLAGS = -Wall -g @ALSA_CFLAGS@
+ AM_LDFLAGS = -module -avoid-version -export-dynamic $(LDFLAGS_NOUNDEFINED)
+--
+2.13.6
+
+
+From cc6bed233a3167d806834460befca2c6d655f0fb Mon Sep 17 00:00:00 2001
+From: Jaroslav Kysela <perex(a)perex.cz>
+Date: Fri, 13 Apr 2018 13:37:36 +0200
+Subject: [PATCH 3/3] config/Makefile: make everything modular
+
+Signed-off-by: Jaroslav Kysela <perex(a)perex.cz>
+---
+ Makefile.am | 21 ++++++++++++++++++---
+ configure.ac | 20 +++++++++++++++++++-
+ doc/Makefile.am | 37 ++++++++++++++++++++++++++++++++++---
+ 3 files changed, 71 insertions(+), 7 deletions(-)
+
+diff --git a/Makefile.am b/Makefile.am
+index 69cfe0d..303bc83 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -1,4 +1,10 @@
+-SUBDIRS = oss mix usb_stream arcam-av doc
++SUBDIRS = doc
++if HAVE_OSS
++SUBDIRS += oss
++endif
++if HAVE_MIX
++SUBDIRS += mix
++endif
+ if HAVE_JACK
+ SUBDIRS += jack
+ endif
+@@ -8,8 +14,17 @@ endif
+ if HAVE_SAMPLERATE
+ SUBDIRS += rate
+ endif
+-if HAVE_AVCODEC
+-SUBDIRS += a52 rate-lavc
++if HAVE_A52
++SUBDIRS += a52
++endif
++if HAVE_AVCRATE
++SUBDIRS += rate-lavc
++endif
++if HAVE_USBSTREAM
++SUBDIRS += usb_stream
++endif
++if HAVE_ARCAMAV
++SUBDIRS += arcam-av
+ endif
+ if HAVE_MAEMO_PLUGIN
+ SUBDIRS += maemo
+diff --git a/configure.ac b/configure.ac
+index ae98caa..2d7e6aa 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -135,6 +135,22 @@ AC_SUBST(AVCODEC_CFLAGS)
+ AC_SUBST(AVCODEC_LIBS)
+ AC_SUBST(AVCODEC_HEADER)
+
++AC_ARG_ENABLE([a52],
++ AS_HELP_STRING([--disable-a52], [Disable building of A52 encoder plugin]))
++
++if test "x$enable_a52" != "xno" -a "$HAVE_AVCODEC" =
"yes"; then
++ HAVE_A52=yes
++fi
++AM_CONDITIONAL(HAVE_A52, test x$HAVE_A52 = xyes)
++
++AC_ARG_ENABLE([avcrate],
++ AS_HELP_STRING([--disable-avcrate], [Disable building of AVC rate plugin]))
++
++if test "x$enable_avcrate" != "xno" -a "$HAVE_AVCODEC" =
"yes"; then
++ HAVE_AVCRATE=yes
++fi
++AM_CONDITIONAL(HAVE_AVCRATE, test x$HAVE_AVCRATE = xyes)
++
+ AC_ARG_ENABLE([speexdsp],
+ AS_HELP_STRING([--disable-speexdsp], [Disable building of speexdsp plugin]))
+
+@@ -260,12 +276,14 @@ if test "$HAVE_SAMPLERATE" = "yes"; then
+ fi
+ echo "Maemo plugin: $HAVE_MAEMO_PLUGIN"
+ echo " Using Osso resource manager: $use_maemo_rm"
+-echo "A52, lavc plugins: $HAVE_AVCODEC"
+ if test "$HAVE_AVCODEC" = "yes"; then
++ echo "AVCodec config:"
+ echo " AVCODEC_CFLAGS: $AVCODEC_CFLAGS"
+ echo " AVCODEC_LIBS: $AVCODEC_LIBS"
+ echo " AVCODEC_HEADER: $AVCODEC_HEADER"
+ fi
++echo "A52 plugin: $HAVE_A52"
++echo "AVC rate plugin: $HAVE_AVCRATE"
+ echo "Speex rate plugin: $PPH"
+ echo "Speex preprocess plugin: $HAVE_SPEEXDSP"
+ if test "$HAVE_SPEEX" = "yes"; then
+diff --git a/doc/Makefile.am b/doc/Makefile.am
+index 19fa0d2..0d6f6e5 100644
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -1,4 +1,35 @@
+-EXTRA_DIST = README-pcm-oss README-jack README-pulse README-maemo \
+- upmix.txt vdownmix.txt samplerate.txt a52.txt lavcrate.txt \
+- speexrate.txt speexdsp.txt README-arcam-av
++EXTRA_DIST =
+
++if HAVE_OSS
++EXTRA_DIST += README-pcm-oss
++endif
++if HAVE_MIX
++EXTRA_DIST += upmix.txt vdownmix.txt
++endif
++if HAVE_JACK
++EXTRA_DIST += README-jack
++endif
++if HAVE_PULSE
++EXTRA_DIST += README-pulse
++endif
++if HAVE_MAEMO_PLUGIN
++EXTRA_DIST += README-maemo
++endif
++if HAVE_SAMPLERATE
++EXTRA_DIST += samplerate.txt
++endif
++if HAVE_A52
++EXTRA_DIST += a52.txt
++endif
++if HAVE_AVCRATE
++EXTRA_DIST += lavcrate.txt
++endif
++if HAVE_PPH
++EXTRA_DIST += speexrate.txt
++endif
++if HAVE_SPEEXDSP
++EXTRA_DIST += speexdsp.txt
++endif
++if HAVE_ARCAMAV
++EXTRA_DIST += README-arcam-av
++endif
+--
+2.13.6
+
diff --git a/sources b/sources
index 326072b..8c4ef5a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c86cd9c069cfec2e8a491aaa7d3c584c alsa-plugins-1.1.7.tar.bz2
+8387279e99feeb2ecffaac5f293223d7 alsa-plugins-1.1.6.tar.bz2