Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
savoirfairelinux
jami-daemon
Commits
c6e27581
Commit
c6e27581
authored
Feb 17, 2009
by
Emmanuel Milou
Browse files
Merge branch 'master' of
ssh://sflphone@192.168.1.213//home/sflphone/SFLphone/sflphone
parents
95da7a1c
6421269d
Changes
3
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
c6e27581
...
...
@@ -232,11 +232,14 @@ AS_IF([test "x$with_speex" != xno],
[AC_MSG_FAILURE(
[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],
...
...
src/audio/codecs/Makefile.am
View file @
c6e27581
...
...
@@ -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
...
...
src/audio/codecs/speexcodec.cpp
View file @
c6e27581
/*
* Copyright (C) 200
5
Savoir-Faire Linux inc.
* Author:
Yan Morin <yan.morin
@savoirfairelinux.com>
* Author:
Jerome Oufella <jerome.oufella
@savoirfairelinux.com>
* Copyright (C) 200
7-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,116 +23,114 @@
#include
<speex/speex.h>
#include
<speex/speex_preprocess.h>
class
Speex
:
public
AudioCodec
{
public:
Speex
(
int
payload
=
0
)
:
AudioCodec
(
payload
,
"speex"
),
_speexModePtr
(
NULL
),
_speex_dec_bits
(),
_speex_enc_bits
(),
_speex_dec_state
(),
_speex_enc_state
(),
_speex_frame_size
(),
_preprocess_state
()
{
_clockRate
=
8000
;
_channel
=
1
;
_bitrate
=
0
;
_bandwidth
=
0
;
initSpeex
();
}
public:
Speex
(
int
payload
=
0
)
:
AudioCodec
(
payload
,
"speex"
),
_speexModePtr
(
NULL
),
_speex_dec_bits
(),
_speex_enc_bits
(),
_speex_dec_state
(),
_speex_enc_state
(),
_speex_frame_size
(),
_preprocess_state
()
{
_clockRate
=
8000
;
_channel
=
1
;
_bitrate
=
0
;
_bandwidth
=
0
;
initSpeex
();
}
Speex
(
const
Speex
&
);
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
;
// Init the decoder struct
speex_bits_init
(
&
_speex_dec_bits
);
_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
);
// 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
);
void
initSpeex
()
{
// 8000 HZ --> Narrow-band mode
// TODO Manage the other modes
_speexModePtr
=
&
speex_nb_mode
;
// Init the decoder struct
speex_bits_init
(
&
_speex_dec_bits
);
_speex_dec_state
=
speex_decoder_init
(
_speexModePtr
);
// 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
);
speex_encoder_ctl
(
_speex_enc_state
,
SPEEX_SET_COMPLEXITY
,
&
complex
);
// 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
);
#endif
}
~
Speex
()
{
terminateSpeex
();
}
void
terminateSpeex
()
{
// Destroy the decoder struct
speex_bits_destroy
(
&
_speex_dec_bits
);
speex_decoder_destroy
(
_speex_dec_state
);
_speex_dec_state
=
0
;
// Destroy the encoder struct
speex_bits_destroy
(
&
_speex_enc_bits
);
speex_encoder_destroy
(
_speex_enc_state
);
_speex_enc_state
=
0
;
}
virtual
int
codecDecode
(
short
*
dst
,
unsigned
char
*
src
,
unsigned
int
size
)
{
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
;
}
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
;
}
~
Speex
()
{
terminateSpeex
();
}
void
terminateSpeex
()
{
// Destroy the decoder struct
speex_bits_destroy
(
&
_speex_dec_bits
);
speex_decoder_destroy
(
_speex_dec_state
);
_speex_dec_state
=
0
;
// Destroy the encoder struct
speex_bits_destroy
(
&
_speex_enc_bits
);
speex_encoder_destroy
(
_speex_enc_state
);
_speex_enc_state
=
0
;
}
virtual
int
codecDecode
(
short
*
dst
,
unsigned
char
*
src
,
unsigned
int
size
)
{
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
;
}
virtual
int
codecEncode
(
unsigned
char
*
dst
,
short
*
src
,
unsigned
int
size
)
{
speex_bits_reset
(
&
_speex_enc_bits
);
speex_encoder_ctl
(
_speex_enc_state
,
SPEEX_SET_SAMPLING_RATE
,
&
_clockRate
);
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
;
}
private:
const
SpeexMode
*
_speexModePtr
;
SpeexBits
_speex_dec_bits
;
SpeexBits
_speex_enc_bits
;
void
*
_speex_dec_state
;
void
*
_speex_enc_state
;
int
_speex_frame_size
;
private:
const
SpeexMode
*
_speexModePtr
;
SpeexBits
_speex_dec_bits
;
SpeexBits
_speex_enc_bits
;
void
*
_speex_dec_state
;
void
*
_speex_enc_state
;
int
_speex_frame_size
;
SpeexPreprocessState
*
_preprocess_state
;
};
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment