Skip to content
Snippets Groups Projects
Commit c6e27581 authored by Emmanuel Milou's avatar Emmanuel Milou
Browse files
parents 95da7a1c 6421269d
No related branches found
No related tags found
No related merge requests found
...@@ -233,10 +233,13 @@ AS_IF([test "x$with_speex" != xno], ...@@ -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.])] [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]) 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(BUILD_SPEEX, test "x$with_speex" = "xyes" )
AM_CONDITIONAL(HAVE_SPEEX_DSP, $(HAVE_SPEEX_DSP))
dnl Check for ilbc support dnl Check for ilbc support
AC_ARG_WITH([ilbc], AC_ARG_WITH([ilbc],
......
...@@ -11,10 +11,14 @@ endif ...@@ -11,10 +11,14 @@ endif
if BUILD_SPEEX if BUILD_SPEEX
SPEEX_LIB = libcodec_speex.so 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_SOURCES = speexcodec.cpp
libcodec_speex_so_CFLAGS = -fPIC -g -Wall libcodec_speex_so_CFLAGS = -fPIC -g -Wall
libcodec_speex_so_CXXFLAGS = -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 INSTALL_SPEEX_RULE = install-libcodec_speex_so
endif endif
......
/* /*
* Copyright (C) 2005 Savoir-Faire Linux inc. * Copyright (C) 2007-2009 Savoir-Faire Linux inc.
* Author: Yan Morin <yan.morin@savoirfairelinux.com> * Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
* Author: Jerome Oufella <jerome.oufella@savoirfairelinux.com> * Author: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License as published by
...@@ -23,8 +23,6 @@ ...@@ -23,8 +23,6 @@
#include <speex/speex.h> #include <speex/speex.h>
#include <speex/speex_preprocess.h> #include <speex/speex_preprocess.h>
class Speex : public AudioCodec{ class Speex : public AudioCodec{
public: public:
Speex(int payload=0) Speex(int payload=0)
...@@ -48,20 +46,7 @@ public: ...@@ -48,20 +46,7 @@ public:
Speex& operator=(const Speex&); Speex& operator=(const Speex&);
void initSpeex() { 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 // 8000 HZ --> Narrow-band mode
// TODO Manage the other modes // TODO Manage the other modes
_speexModePtr = &speex_nb_mode; _speexModePtr = &speex_nb_mode;
...@@ -73,6 +58,14 @@ public: ...@@ -73,6 +58,14 @@ public:
// Init the encoder struct // Init the encoder struct
speex_bits_init(&_speex_enc_bits); speex_bits_init(&_speex_enc_bits);
_speex_enc_state = speex_encoder_init(_speexModePtr); _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_VAD, &enable);
speex_encoder_ctl(_speex_enc_state, SPEEX_SET_DTX, &enable); speex_encoder_ctl(_speex_enc_state, SPEEX_SET_DTX, &enable);
speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality); speex_encoder_ctl(_speex_enc_state, SPEEX_SET_VBR_QUALITY, &quality);
...@@ -87,6 +80,7 @@ public: ...@@ -87,6 +80,7 @@ public:
speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &attenuation); 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_VAD, &enable);
speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable); speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enable);
#endif
} }
...@@ -119,8 +113,12 @@ public: ...@@ -119,8 +113,12 @@ public:
virtual int codecEncode (unsigned char *dst, short *src, unsigned int size) virtual int codecEncode (unsigned char *dst, short *src, unsigned int size)
{ {
speex_bits_reset(&_speex_enc_bits); speex_bits_reset(&_speex_enc_bits);
#ifdef HAVE_SPEEX_DSP
speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate); speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate);
speex_preprocess_run(_preprocess_state, src); speex_preprocess_run(_preprocess_state, src);
#endif
speex_encode_int(_speex_enc_state, src, &_speex_enc_bits); speex_encode_int(_speex_enc_state, src, &_speex_enc_bits);
int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size); int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size);
return nbBytes; return nbBytes;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment