From 46c74261cc1560ef5c6bdeb0577452ac56eedb32 Mon Sep 17 00:00:00 2001 From: Tzafrir Cohen Date: Fri, 4 May 2012 01:06:26 +0300 Subject: [PATCH 2/2] Allow building codec_ilbc using system libilbc Allows building codec_ilbc using a system copy of libilbc (currently from http://github.com/dekkers/libilbc . --- build_tools/menuselect-deps.in | 1 + codecs/Makefile | 8 ++++++-- codecs/codec_ilbc.c | 17 ++++++++++++++--- configure.ac | 21 +++++++++++++++++++++ makeopts.in | 4 ++++ 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in index 8669543..e8ab91a 100644 --- a/build_tools/menuselect-deps.in +++ b/build_tools/menuselect-deps.in @@ -13,6 +13,7 @@ GENERIC_ODBC=@PBX_GENERIC_ODBC@ GMIME=@PBX_GMIME@ GNU_LD=@GNU_LD@ GSM=@PBX_GSM@ +ILBC=@PBX_ILBC@ GTK2=@PBX_GTK2@ H323=@PBX_H323@ HOARD=@PBX_HOARD@ diff --git a/codecs/Makefile b/codecs/Makefile index 6ef08da..309d566 100644 --- a/codecs/Makefile +++ b/codecs/Makefile @@ -29,6 +29,12 @@ GSM_INCLUDE:=-Igsm/inc $(if $(filter codec_gsm,$(EMBEDDED_MODS)),modules.link,codec_gsm.so): gsm/lib/libgsm.a endif +ifneq ($(ILBC_INTERNAL),no) +$(if $(filter codec_ilbc,$(EMBEDDED_MODS)),modules.link,codec_ilbc.so): $(LIBILBC) +else +ILBC_INCLUDE+=-DILBC_WEBRTC +endif + clean:: $(MAKE) -C gsm clean @@ -50,8 +56,6 @@ $(LIBILBC): @$(MAKE) -C ilbc all _ASTCFLAGS="$(filter-out -Wmissing-prototypes -Wmissing-declarations -Wshadow,$(_ASTCFLAGS)) $(AST_NO_STRICT_OVERFLOW)" -$(if $(filter codec_ilbc,$(EMBEDDED_MODS)),modules.link,codec_ilbc.so): $(LIBILBC) - $(if $(filter codec_g722,$(EMBEDDED_MODS)),modules.link,codec_g722.so): g722/g722_encode.o g722/g722_decode.o g722/g722_encode.o g722/g722_decode.o: _ASTCFLAGS+=$(call MOD_ASTCFLAGS,codec_g722) diff --git a/codecs/codec_ilbc.c b/codecs/codec_ilbc.c index 11c1712..a36dde2 100644 --- a/codecs/codec_ilbc.c +++ b/codecs/codec_ilbc.c @@ -26,6 +26,7 @@ */ /*** MODULEINFO + ilbc core ***/ @@ -37,8 +38,18 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/module.h" #include "asterisk/utils.h" +#ifdef ILBC_WEBRTC +#include +typedef WebRtc_UWord16 ilbc_bytes; +typedef WebRtc_Word16 ilbc_block; +#define BUF_TYPE i16 +#else #include "ilbc/iLBC_encode.h" #include "ilbc/iLBC_decode.h" +typedef unsigned char ilbc_bytes; +typedef float ilbc_block; +#define BUF_TYPE uc +#endif #define USE_ILBC_ENHANCER 0 #define ILBC_MS 30 @@ -86,7 +97,7 @@ static int ilbctolin_framein(struct ast_trans_pvt *pvt, struct ast_frame *f) the tail location. Read in as many frames as there are */ int x,i; int16_t *dst = pvt->outbuf.i16; - float tmpf[ILBC_SAMPLES]; + ilbc_block tmpf[ILBC_SAMPLES]; if (!f->data.ptr && f->datalen) { ast_debug(1, "issue 16070, ILIB ERROR. data = NULL datalen = %d src = %s\n", f->datalen, f->src ? f->src : "no src set"); @@ -144,13 +155,13 @@ static struct ast_frame *lintoilbc_frameout(struct ast_trans_pvt *pvt) if (pvt->samples < ILBC_SAMPLES) return NULL; while (pvt->samples >= ILBC_SAMPLES) { - float tmpf[ILBC_SAMPLES]; + ilbc_block tmpf[ILBC_SAMPLES]; int i; /* Encode a frame of data */ for (i = 0 ; i < ILBC_SAMPLES ; i++) tmpf[i] = tmp->buf[samples + i]; - iLBC_encode( pvt->outbuf.uc + datalen, tmpf, &tmp->enc); + iLBC_encode( (ilbc_bytes*)pvt->outbuf.BUF_TYPE + datalen, tmpf, &tmp->enc); datalen += ILBC_FRAME_LEN; samples += ILBC_SAMPLES; diff --git a/configure.ac b/configure.ac index 0c8a92e..5291bb0 100644 --- a/configure.ac +++ b/configure.ac @@ -388,6 +388,7 @@ AST_EXT_LIB_SETUP([CRYPTO], [OpenSSL Cryptography], [crypto]) AST_EXT_LIB_SETUP([DAHDI], [DAHDI], [dahdi]) AST_EXT_LIB_SETUP([FFMPEG], [Ffmpeg and avcodec], [avcodec]) AST_EXT_LIB_SETUP([GSM], [External GSM], [gsm], [, use 'internal' GSM otherwise]) +AST_EXT_LIB_SETUP([ILBC], [System iLBC], [ilbc], [, use 'internal' iLBC otherwise]) AST_EXT_LIB_SETUP([GTK2], [gtk2], [gtk2]) AST_EXT_LIB_SETUP([GMIME], [GMime], [gmime]) AST_EXT_LIB_SETUP([OPENH323], [OpenH323], [h323]) @@ -1238,6 +1239,26 @@ if test "${USE_GSM}" != "no"; then fi fi +ILBC_INTERNAL="yes" +AC_SUBST(ILBC_INTERNAL) +ILBC_SYSTEM="yes" +if test "${USE_ILBC}" != "no"; then + if test "${ILBC_DIR}" = "internal"; then + ILBC_SYSTEM="no" + elif test "${ILBC_DIR}" != ""; then + ILBC_INTERNAL="no" + fi + if test "${ILBC_SYSTEM}" = "yes"; then + AST_PKG_CONFIG_CHECK(ILBC, libilbc) + if test "$PBX_ILBC" = '1'; then + ILBC_INTERNAL='no' + fi + fi + if test "${ILBC_INTERNAL}" = "yes"; then + PBX_ILBC=1 + fi +fi + AST_EXT_LIB_CHECK([ICONV], [iconv], [iconv_open], [iconv.h]) # GNU libiconv #define's iconv_open to libiconv_open, so we need to search for that symbol AST_EXT_LIB_CHECK([ICONV], [iconv], [libiconv_open], [iconv.h]) diff --git a/makeopts.in b/makeopts.in index 0ca01aa..751ffb6 100644 --- a/makeopts.in +++ b/makeopts.in @@ -139,6 +139,10 @@ GSM_INTERNAL=@GSM_INTERNAL@ GSM_INCLUDE=@GSM_INCLUDE@ GSM_LIB=@GSM_LIB@ +ILBC_INTERNAL=@ILBC_INTERNAL@ +ILBC_INCLUDE=@ILBC_INCLUDE@ +ILBC_LIB=@ILBC_LIB@ + GTK2_INCLUDE=@GTK2_INCLUDE@ GTK2_LIB=@GTK2_LIB@ -- 1.7.10