diff options
author | Peter Meerwald <p.meerwald@bct-electronic.com> | 2011-12-11 16:07:42 +0100 |
---|---|---|
committer | Arun Raghavan <arun.raghavan@collabora.co.uk> | 2011-12-13 09:16:32 +0530 |
commit | dc5a39b124b6dd605d88e8633bd93e3da1169c3d (patch) | |
tree | ec7a669f48b3c14d944c8cdf2dad8995e22bec01 | |
parent | 5f2286e6f76ab9fbf83a92c17b48b537d9d59026 (diff) |
echo-cance: Make Adrian canceller optional
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)
-rw-r--r-- | configure.ac | 15 | ||||
-rw-r--r-- | src/Makefile.am | 10 | ||||
-rw-r--r-- | src/modules/echo-cancel/echo-cancel.h | 4 | ||||
-rw-r--r-- | src/modules/echo-cancel/module-echo-cancel.c | 6 |
4 files changed, 31 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac index dcf4b8fde..af30fd3bc 100644 --- a/configure.ac +++ b/configure.ac @@ -1178,6 +1178,13 @@ 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 # @@ -1324,6 +1331,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) @@ -1372,7 +1380,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} @@ -1390,6 +1399,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 + 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 852e962b3..649f82f64 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 15d44f536..870d163e9 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 9f3e85c96..5c7bb78a1 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,8 +1553,10 @@ 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; |