mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
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:
parent
5f2286e6f7
commit
dc5a39b124
4 changed files with 31 additions and 4 deletions
15
configure.ac
15
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 =====
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue