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)
This commit is contained in:
Peter Meerwald 2011-12-11 16:07:42 +01:00 committed by Arun Raghavan
parent 5f2286e6f7
commit dc5a39b124
4 changed files with 31 additions and 4 deletions

View file

@ -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

View file

@ -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 */

View file

@ -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;