Commit 6421269d authored by sflphone's avatar sflphone
Browse files

Use speexdsp only if available

parent 5d896181
......@@ -233,10 +233,13 @@ AS_IF([test "x$with_speex" != xno],
[libspeex link test failed. You may use --without-speex to compile without speex codec support.])]
)
]
)
dnl More advanced check in case the libspeexdsp is not installed
AC_CHECK_LIB(speex, speex_preprocess_run, [AC_DEFINE(HAVE_SPEEX_DSP)])
)
AC_DEFINE([HAVE_SPEEX], test "x$with_speex" = "xyes", [Define if you have libspeex])
AM_CONDITIONAL(BUILD_SPEEX, test "x$with_speex" = "xyes" )
AM_CONDITIONAL(HAVE_SPEEX_DSP, $(HAVE_SPEEX_DSP))
dnl Check for ilbc support
AC_ARG_WITH([ilbc],
......
......@@ -11,10 +11,14 @@ endif
if BUILD_SPEEX
SPEEX_LIB = libcodec_speex.so
SPEEX_DSP_LIB=
if HAVE_SPEEX_DSP
SPEEX_DSP_LIB = -lspeexdsp
endif
libcodec_speex_so_SOURCES = speexcodec.cpp
libcodec_speex_so_CFLAGS = -fPIC -g -Wall
libcodec_speex_so_CXXFLAGS = -fPIC -g -Wall
libcodec_speex_so_LDFLAGS = --shared -lc -lspeex -lspeexdsp -lm
libcodec_speex_so_LDFLAGS = --shared -lc -lspeex $(SPEEX_DSP_LIB) -lm
INSTALL_SPEEX_RULE = install-libcodec_speex_so
endif
......
/*
* Copyright (C) 2005 Savoir-Faire Linux inc.
* Author: Yan Morin <yan.morin@savoirfairelinux.com>
* Author: Jerome Oufella <jerome.oufella@savoirfairelinux.com>
* Copyright (C) 2007-2009 Savoir-Faire Linux inc.
* Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
* Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
......@@ -23,10 +23,8 @@
#include <speex/speex.h>
#include <speex/speex_preprocess.h>
class Speex : public AudioCodec{
public:
public:
Speex(int payload=0)
: AudioCodec(payload, "speex"),
_speexModePtr(NULL),
......@@ -48,20 +46,7 @@ public:
Speex& operator=(const Speex&);
void initSpeex() {
int enable = 1;
int quality = 10;
int complex = 10;
int attenuation = -10;
/*
if (_clockRate < 16000 ) {
_speexModePtr = &speex_nb_mode;
} else if (_clockRate < 32000) {
_speexModePtr = &speex_wb_mode;
} else {
_speexModePtr = &speex_uwb_mode;
}
*/
// 8000 HZ --> Narrow-band mode
// TODO Manage the other modes
_speexModePtr = &speex_nb_mode;
......@@ -73,6 +58,14 @@ public:
// Init the encoder struct
speex_bits_init(&_speex_enc_bits);
_speex_enc_state = speex_encoder_init(_speexModePtr);
#ifdef HAVE_SPEEX_DSP
int enable = 1;
int quality = 10;
int complex = 10;
int attenuation = -10;
speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VAD, &enable);
speex_encoder_ctl(_speex_enc_state, SPEEX_SET_DTX, &enable);
speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
......@@ -87,6 +80,7 @@ public:
speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation);
speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_VAD, &enable);
speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
#endif
}
......@@ -119,14 +113,18 @@ public:
virtual int codecEncode (unsigned char *dst, short *src, unsigned int size)
{
speex_bits_reset(&_speex_enc_bits);
#ifdef HAVE_SPEEX_DSP
speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate);
speex_preprocess_run(_preprocess_state, src);
#endif
speex_encode_int(_speex_enc_state, src, &_speex_enc_bits);
int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size);
return nbBytes;
}
private:
private:
const SpeexMode* _speexModePtr;
SpeexBits _speex_dec_bits;
SpeexBits _speex_enc_bits;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment