From e979dd755a05288c548b5921e623b4317928ffc9 Mon Sep 17 00:00:00 2001 From: Alexandre Savard Date: Thu, 12 Feb 2009 10:21:51 -0500 Subject: [PATCH 1/2] libspeexdsp added --- src/audio/codecs/Makefile.am | 2 +- src/audio/codecs/alaw.cpp | 2 ++ src/audio/codecs/gsmcodec.cpp | 3 ++ src/audio/codecs/speexcodec.cpp | 51 +++++++++++++++++++++++++++------ src/audio/codecs/ulaw.cpp | 4 ++- 5 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/audio/codecs/Makefile.am b/src/audio/codecs/Makefile.am index 0f790f478..6f8b16559 100644 --- a/src/audio/codecs/Makefile.am +++ b/src/audio/codecs/Makefile.am @@ -14,7 +14,7 @@ SPEEX_LIB = libcodec_speex.so 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 +libcodec_speex_so_LDFLAGS = --shared -lc -lspeex -lspeexdsp -lm INSTALL_SPEEX_RULE = install-libcodec_speex_so endif diff --git a/src/audio/codecs/alaw.cpp b/src/audio/codecs/alaw.cpp index d8b69d035..807d518ba 100644 --- a/src/audio/codecs/alaw.cpp +++ b/src/audio/codecs/alaw.cpp @@ -36,6 +36,7 @@ public: virtual ~Alaw(){} virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { + // _debug("Decoded by alaw \n"); int16* end = dst+size; while(dst>= 1; uint8* end = dst+size; while(dst #include +#include class Speex : public AudioCodec{ @@ -32,7 +33,8 @@ public: _speex_enc_bits(), _speex_dec_state(), _speex_enc_state(), - _speex_frame_size() + _speex_frame_size(), + _preprocess_state() { _clockRate = 8000; _channel = 1; @@ -44,7 +46,23 @@ public: Speex( const Speex& ); Speex& operator=(const Speex&); - void initSpeex() { + void initSpeex() { + int temp = 1; + int temp10 = 10; + int db = -10; + + int *enable; + enable = &temp; + + int *quality; + quality = &temp10; + + int *complex; + complex = &temp10; + + int *attenuation; + attenuation = &db; + /* if (_clockRate < 16000 ) { _speexModePtr = &speex_nb_mode; @@ -60,14 +78,27 @@ public: // Init the decoder struct speex_bits_init(&_speex_dec_bits); - _speex_dec_state = speex_decoder_init(_speexModePtr); - - // Init the encoder struct + _speex_dec_state = speex_decoder_init(_speexModePtr); + + // Init the encoder struct speex_bits_init(&_speex_enc_bits); _speex_enc_state = speex_encoder_init(_speexModePtr); + 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); + speex_encoder_ctl(_speex_enc_state, SPEEX_SET_COMPLEXITY, complex); - speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); - } + // Init the decoder struct + speex_decoder_ctl(_speex_dec_state, SPEEX_GET_FRAME_SIZE, &_speex_frame_size); + + // Init the preprocess struct + _preprocess_state = speex_preprocess_state_init(_speex_frame_size,_clockRate); + speex_preprocess_ctl(_preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, enable); + 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); + + } ~Speex() { @@ -91,6 +122,7 @@ public: int ratio = 320 / _speex_frame_size; speex_bits_read_from(&_speex_dec_bits, (char*)src, size); speex_decode_int(_speex_dec_state, &_speex_dec_bits, dst); + return _speex_frame_size * ratio; } @@ -98,8 +130,8 @@ public: { speex_bits_reset(&_speex_enc_bits); speex_encoder_ctl(_speex_enc_state,SPEEX_SET_SAMPLING_RATE,&_clockRate); - - speex_encode_int(_speex_enc_state, src, &_speex_enc_bits); + speex_preprocess_run(_preprocess_state, src); + speex_encode_int(_speex_enc_state, src, &_speex_enc_bits); int nbBytes = speex_bits_write(&_speex_enc_bits, (char*)dst, size); return nbBytes; } @@ -111,6 +143,7 @@ private: void *_speex_dec_state; void *_speex_enc_state; int _speex_frame_size; + SpeexPreprocessState *_preprocess_state; }; // the class factories diff --git a/src/audio/codecs/ulaw.cpp b/src/audio/codecs/ulaw.cpp index 2a53c81a0..6d44bff13 100644 --- a/src/audio/codecs/ulaw.cpp +++ b/src/audio/codecs/ulaw.cpp @@ -36,6 +36,7 @@ public: } virtual int codecDecode (short *dst, unsigned char *src, unsigned int size) { + // _debug("Decoded by ulaw"); int16* end = dst+size; while(dst>= 1; + // _debug("Encoded by ulaw \n"); + size >>= 1; uint8* end = dst+size; while(dst Date: Thu, 12 Feb 2009 11:03:44 -0500 Subject: [PATCH 2/2] Fix new call button when recording --- sflphone-gtk/src/actions.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c index 4f5e911a5..3d50dfc37 100644 --- a/sflphone-gtk/src/actions.c +++ b/sflphone-gtk/src/actions.c @@ -308,6 +308,7 @@ sflphone_pick_up() (void) time(&selectedCall->_stop); break; case CALL_STATE_CURRENT: + case CALL_STATE_RECORD: sflphone_new_call(); break; case CALL_STATE_RINGING: