2011/12/11 Peter Meerwald <pmeerw at pmeerw.net>: > From: Peter Meerwald <p.meerwald at bct-electronic.com> > > makes the Adrian echo canceller implementation optional at compile time > > this patch supersedes an earlier patch proposal and addresses the following > comments: > * separate patch from speex dependency rework (Arun) > * check that at least one EC implementation is available (Arun) > * properly align yes/no in configure summary for Adrian (Frederic) > > --- > ?configure.ac ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 15 ++++++++++++++- > ?src/Makefile.am ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 10 +++++++--- > ?src/modules/echo-cancel/echo-cancel.h ? ? ? ?| ? ?4 ++++ > ?src/modules/echo-cancel/module-echo-cancel.c | ? ?8 +++++++- > ?4 files changed, 32 insertions(+), 5 deletions(-) > > diff --git a/configure.ac b/configure.ac > index ac7dcbf..0009c17 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1176,7 +1176,14 @@ AC_SUBST(WEBRTC_CFLAGS) > ?AC_SUBST(WEBRTC_LIBS) > ?AM_CONDITIONAL([HAVE_WEBRTC], [test "x$HAVE_WEBRTC" = "x1"]) > > +AC_ARG_ENABLE([adrian-aec], > + ? ?AS_HELP_STRING([--enable-adrian-aec], [Enable Adrian's optional echo canceller])) > +AS_IF([test "x$enable_adrian_aec" != "xno"], > + ? ?[HAVE_ADRIAN_EC=1]) > +AM_CONDITIONAL([HAVE_ADRIAN_EC], [test "x$HAVE_ADRIAN_EC" = "x1"]) > + > + > > ?################################### > ?# ? ? ? ? ? ?Output ? ? ? ? ? ? ? # > ?################################### > @@ -1322,6 +1329,7 @@ AS_IF([test "x$HAVE_IPV6" = "x1"], ENABLE_IPV6=yes, ENABLE_IPV6=no) > ?AS_IF([test "x$HAVE_OPENSSL" = "x1"], ENABLE_OPENSSL=yes, ENABLE_OPENSSL=no) > ?AS_IF([test "x$HAVE_FFTW" = "x1"], ENABLE_FFTW=yes, ENABLE_FFTW=no) > ?AS_IF([test "x$HAVE_ORC" = "xyes"], ENABLE_ORC=yes, ENABLE_ORC=no) > +AS_IF([test "x$HAVE_ADRIAN_EC" = "x1"], ENABLE_ADRIAN_EC=yes, ENABLE_ADRIAN_EC=no) > ?AS_IF([test "x$HAVE_SPEEX" = "x1"], ENABLE_SPEEX=yes, ENABLE_SPEEX=no) > ?AS_IF([test "x$HAVE_WEBRTC" = "x1"], ENABLE_WEBRTC=yes, ENABLE_WEBRTC=no) > ?AS_IF([test "x$HAVE_TDB" = "x1"], ENABLE_TDB=yes, ENABLE_TDB=no) > @@ -1370,7 +1378,8 @@ echo " > ? ? Enable OpenSSL (for Airtunes): ${ENABLE_OPENSSL} > ? ? Enable fftw: ? ? ? ? ? ? ? ? ? ${ENABLE_FFTW} > ? ? Enable orc: ? ? ? ? ? ? ? ? ? ?${ENABLE_ORC} > - ? ?Enable speex: ? ? ? ? ? ? ? ? ?${ENABLE_SPEEX} > + ? ?Enable Adrian echo canceller: ?${ENABLE_ADRIAN_EC} > + ? ?Enable speex (resampler, AEC): ${ENABLE_SPEEX} > ? ? Enable WebRTC echo canceller: ?${ENABLE_WEBRTC} > ? ? Database > ? ? ? tdb: ? ? ? ? ? ? ? ? ? ? ? ? ${ENABLE_TDB} > @@ -1388,6 +1397,10 @@ echo " > ? ? Legacy Database Entry Support: ${ENABLE_LEGACY_DATABASE_ENTRY_FORMAT} > ?" > > +if test "${ENABLE_SPEEX}" = "no" && test "${ENABLE_WEBRTC}" = "no" && test "${ENABLE_ADRIAN_EC}" = "no" ; then > +AC_MSG_ERROR([At least one echo canceller implementation must be available.]) > +fi > + I think it's better to just disable building module-echo-cancel instead of giving this error message when none of the necessary requirements are available. We have lots of modules that are only optionally build. Maarten > ?if test "${ENABLE_DBUS}" = "no" && test "x$os_is_win32" != "x1" ; then > ? ?echo " > ?===== WARNING WARNING WARNING WARNING WARNING WARNING WARNING ===== > diff --git a/src/Makefile.am b/src/Makefile.am > index 852e962..649f82f 100644 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -1744,12 +1744,15 @@ module_suspend_on_idle_la_CFLAGS = $(AM_CFLAGS) > > ?# echo-cancel module > ?module_echo_cancel_la_SOURCES = \ > - ? ? ? ? ? ? ? modules/echo-cancel/module-echo-cancel.c modules/echo-cancel/echo-cancel.h \ > - ? ? ? ? ? ? ? modules/echo-cancel/adrian-aec.c modules/echo-cancel/adrian-aec.h \ > - ? ? ? ? ? ? ? modules/echo-cancel/adrian.c modules/echo-cancel/adrian.h > + ? ? ? ? ? ? ? modules/echo-cancel/module-echo-cancel.c modules/echo-cancel/echo-cancel.h > ?module_echo_cancel_la_LDFLAGS = $(MODULE_LDFLAGS) > ?module_echo_cancel_la_LIBADD = $(MODULE_LIBADD) $(LIBSPEEX_LIBS) > ?module_echo_cancel_la_CFLAGS = $(AM_CFLAGS) $(SERVER_CFLAGS) $(LIBSPEEX_CFLAGS) > +if HAVE_ADRIAN_EC > +module_echo_cancel_la_SOURCES += \ > + ? ? ? ? ? ? ? modules/echo-cancel/adrian-aec.c modules/echo-cancel/adrian-aec.h \ > + ? ? ? ? ? ? ? modules/echo-cancel/adrian.c modules/echo-cancel/adrian.h > +module_echo_cancel_la_CFLAGS += -DHAVE_ADRIAN_EC=1 > ?if HAVE_ORC > ?ORC_SOURCE += modules/echo-cancel/adrian-aec > ?nodist_module_echo_cancel_la_SOURCES = \ > @@ -1758,6 +1761,7 @@ nodist_module_echo_cancel_la_SOURCES = \ > ?module_echo_cancel_la_LIBADD += $(ORC_LIBS) > ?module_echo_cancel_la_CFLAGS += $(ORC_CFLAGS) -I$(top_builddir)/src/modules/echo-cancel > ?endif > +endif > ?if HAVE_SPEEX > ?module_echo_cancel_la_SOURCES += modules/echo-cancel/speex.c > ?endif > diff --git a/src/modules/echo-cancel/echo-cancel.h b/src/modules/echo-cancel/echo-cancel.h > index 15d44f5..870d163 100644 > --- a/src/modules/echo-cancel/echo-cancel.h > +++ b/src/modules/echo-cancel/echo-cancel.h > @@ -52,10 +52,12 @@ struct pa_echo_canceller_params { > ? ? ? ? ? ? SpeexPreprocessState *pp_state; > ? ? ? ? } speex; > ?#endif > +#ifdef HAVE_ADRIAN_EC > ? ? ? ? struct { > ? ? ? ? ? ? uint32_t blocksize; > ? ? ? ? ? ? AEC *aec; > ? ? ? ? } adrian; > +#endif > ?#ifdef HAVE_WEBRTC > ? ? ? ? struct { > ? ? ? ? ? ? /* This is a void* so that we don't have to convert this whole file > @@ -136,6 +138,7 @@ void pa_speex_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *p > ?void pa_speex_ec_done(pa_echo_canceller *ec); > ?#endif > > +#ifdef HAVE_ADRIAN_EC > ?/* Adrian Andre's echo canceller */ > ?pa_bool_t pa_adrian_ec_init(pa_core *c, pa_echo_canceller *ec, > ? ? ? ? ? ? ? ? ? ? ? ? ? ?pa_sample_spec *source_ss, pa_channel_map *source_map, > @@ -143,6 +146,7 @@ pa_bool_t pa_adrian_ec_init(pa_core *c, pa_echo_canceller *ec, > ? ? ? ? ? ? ? ? ? ? ? ? ? ?uint32_t *blocksize, const char *args); > ?void pa_adrian_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out); > ?void pa_adrian_ec_done(pa_echo_canceller *ec); > +#endif > > ?#ifdef HAVE_WEBRTC > ?/* WebRTC canceller functions */ > diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c > index 0640afc..5c7bb78 100644 > --- a/src/modules/echo-cancel/module-echo-cancel.c > +++ b/src/modules/echo-cancel/module-echo-cancel.c > @@ -85,7 +85,9 @@ typedef enum { > ?#ifdef HAVE_SPEEX > ? ? PA_ECHO_CANCELLER_SPEEX, > ?#endif > +#ifdef HAVE_ADRIAN_EC > ? ? PA_ECHO_CANCELLER_ADRIAN, > +#endif > ?#ifdef HAVE_WEBRTC > ? ? PA_ECHO_CANCELLER_WEBRTC, > ?#endif > @@ -106,12 +108,14 @@ static const pa_echo_canceller ec_table[] = { > ? ? ? ? .done ? ? ? ? ? ? ? ? ? = pa_speex_ec_done, > ? ? }, > ?#endif > +#ifdef HAVE_ADRIAN_EC > ? ? { > ? ? ? ? /* Adrian Andre's NLMS implementation */ > ? ? ? ? .init ? ? ? ? ? ? ? ? ? = pa_adrian_ec_init, > ? ? ? ? .run ? ? ? ? ? ? ? ? ? ?= pa_adrian_ec_run, > ? ? ? ? .done ? ? ? ? ? ? ? ? ? = pa_adrian_ec_done, > ? ? }, > +#endif > ?#ifdef HAVE_WEBRTC > ? ? { > ? ? ? ? /* WebRTC's audio processing engine */ > @@ -1549,13 +1553,15 @@ static pa_echo_canceller_method_t get_ec_method_from_string(const char *method) > ? ? if (pa_streq(method, "speex")) > ? ? ? ? return PA_ECHO_CANCELLER_SPEEX; > ?#endif > +#ifdef HAVE_ADRIAN_EC > ? ? if (pa_streq(method, "adrian")) > ? ? ? ? return PA_ECHO_CANCELLER_ADRIAN; > +#endif > ?#ifdef HAVE_WEBRTC > ? ? if (pa_streq(method, "webrtc")) > ? ? ? ? return PA_ECHO_CANCELLER_WEBRTC; > ?#endif > ? ? return PA_ECHO_CANCELLER_INVALID; > ?} > > ?/* Common initialisation bits between module-echo-cancel and the standalone test program */ > -- > 1.7.4.1 > > _______________________________________________ > pulseaudio-discuss mailing list > pulseaudio-discuss at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss