software codec option, fix gruel incl
git-svn-id: http://op25.osmocom.org/svn/trunk@321 65a5c917-d112-43f1-993d-58c26a4786be
This commit is contained in:
parent
fbffa862a8
commit
3293212043
|
@ -27,7 +27,7 @@ grincludedir = $(includedir)/gnuradio
|
||||||
swigincludedir = $(grincludedir)/swig
|
swigincludedir = $(grincludedir)/swig
|
||||||
|
|
||||||
# gruel includes
|
# gruel includes
|
||||||
gruelincludedir = $(includedir)/gruel
|
gruelincludedir = $(GRUEL_INCLUDEDIR)/gruel
|
||||||
|
|
||||||
# Install this stuff in the appropriate subdirectory
|
# Install this stuff in the appropriate subdirectory
|
||||||
# This usually ends up at:
|
# This usually ends up at:
|
||||||
|
|
|
@ -87,6 +87,8 @@ GR_REQUIRE_BOOST_INCLUDES
|
||||||
|
|
||||||
STD_DEFINES_AND_INCLUDES="$GNURADIO_CORE_CFLAGS $BOOST_CFLAGS"
|
STD_DEFINES_AND_INCLUDES="$GNURADIO_CORE_CFLAGS $BOOST_CFLAGS"
|
||||||
AC_SUBST(STD_DEFINES_AND_INCLUDES)
|
AC_SUBST(STD_DEFINES_AND_INCLUDES)
|
||||||
|
|
||||||
|
PKG_CHECK_MODULES(GRUEL, gruel)
|
||||||
|
|
||||||
AC_CONFIG_FILES([\
|
AC_CONFIG_FILES([\
|
||||||
Makefile \
|
Makefile \
|
||||||
|
|
|
@ -85,7 +85,9 @@ _repeater_la_LDFLAGS = $(NO_UNDEFINED) -module -avoid-version -L../../../imbe_vo
|
||||||
# c++ standard library
|
# c++ standard library
|
||||||
_repeater_la_LIBADD = \
|
_repeater_la_LIBADD = \
|
||||||
$(PYTHON_LDFLAGS) \
|
$(PYTHON_LDFLAGS) \
|
||||||
-lstdc++
|
-lstdc++ \
|
||||||
|
../../../blocks/src/lib/software_imbe_decoder.lo \
|
||||||
|
../../../blocks/src/lib/imbe_decoder.lo
|
||||||
|
|
||||||
repeater.cc repeater.py: repeater.i $(ALL_IFILES)
|
repeater.cc repeater.py: repeater.i $(ALL_IFILES)
|
||||||
$(SWIG) $(SWIGPYTHONARGS) -module repeater -o repeater.cc $<
|
$(SWIG) $(SWIGPYTHONARGS) -module repeater -o repeater.cc $<
|
||||||
|
|
|
@ -225,6 +225,12 @@ repeater_vocoder::repeater_vocoder (bool encode_flag, bool verbose_flag, int str
|
||||||
init_sock(udp_host, opt_udp_port);
|
init_sock(udp_host, opt_udp_port);
|
||||||
|
|
||||||
clear_bits(f_body);
|
clear_bits(f_body);
|
||||||
|
|
||||||
|
const char *p = getenv("IMBE");
|
||||||
|
if (p && strcasecmp(p, "soft") == 0)
|
||||||
|
d_software_imbe_decoder = true;
|
||||||
|
else
|
||||||
|
d_software_imbe_decoder = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -313,14 +319,26 @@ void repeater_vocoder::rxchar(char c)
|
||||||
rxbuf[rxbufp] = 0;
|
rxbuf[rxbufp] = 0;
|
||||||
sscanf(rxbuf, "%x %x %x %x %x %x %x %x", &u[0], &u[1], &u[2], &u[3], &u[4], &u[5], &u[6], &u[7]);
|
sscanf(rxbuf, "%x %x %x %x %x %x %x %x", &u[0], &u[1], &u[2], &u[3], &u[4], &u[5], &u[6], &u[7]);
|
||||||
rxbufp = 0;
|
rxbufp = 0;
|
||||||
for (int i=0; i < 8; i++) {
|
|
||||||
frame_vector[i] = u[i];
|
|
||||||
}
|
|
||||||
/* TEST*/ frame_vector[7] >>= 1;
|
|
||||||
// decode 88 bits, outputs 160 sound samples (8000 rate)
|
// decode 88 bits, outputs 160 sound samples (8000 rate)
|
||||||
vocoder.imbe_decode(frame_vector, snd);
|
if (d_software_imbe_decoder) {
|
||||||
|
voice_codeword cw;
|
||||||
|
imbe_header_encode(cw, u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7]);
|
||||||
|
software_decoder.decode(cw);
|
||||||
|
audio_samples *samples = software_decoder.audio();
|
||||||
|
assert (samples->size() == FRAME);
|
||||||
|
for (int i=0; i < FRAME; i++) {
|
||||||
|
snd[i] = (int16_t)(samples->front() * 32768.0);
|
||||||
|
samples->pop_front();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i=0; i < 8; i++) {
|
||||||
|
frame_vector[i] = u[i];
|
||||||
|
}
|
||||||
|
/* TEST*/ frame_vector[7] >>= 1;
|
||||||
|
vocoder.imbe_decode(frame_vector, snd);
|
||||||
|
}
|
||||||
if (opt_udp_port > 0) {
|
if (opt_udp_port > 0) {
|
||||||
sendto(write_sock, snd, FRAME * sizeof(uint16_t), 0, (struct sockaddr*)&write_sock_addr, sizeof(write_sock_addr));
|
sendto(write_sock, snd, FRAME * sizeof(int16_t), 0, (struct sockaddr*)&write_sock_addr, sizeof(write_sock_addr));
|
||||||
} else {
|
} else {
|
||||||
// add generated samples to output queue
|
// add generated samples to output queue
|
||||||
for (int i = 0; i < FRAME; i++) {
|
for (int i = 0; i < FRAME; i++) {
|
||||||
|
|
|
@ -32,6 +32,9 @@ typedef std::vector<bool> bit_vector;
|
||||||
|
|
||||||
#include <imbe_vocoder.h>
|
#include <imbe_vocoder.h>
|
||||||
|
|
||||||
|
#include <imbe_decoder.h>
|
||||||
|
#include <software_imbe_decoder.h>
|
||||||
|
|
||||||
class repeater_vocoder;
|
class repeater_vocoder;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -115,6 +118,8 @@ private:
|
||||||
uint8_t save_l;
|
uint8_t save_l;
|
||||||
bit_vector f_body;
|
bit_vector f_body;
|
||||||
imbe_vocoder vocoder;
|
imbe_vocoder vocoder;
|
||||||
|
software_imbe_decoder software_decoder;
|
||||||
|
bool d_software_imbe_decoder;
|
||||||
|
|
||||||
std::deque<uint8_t> output_queue;
|
std::deque<uint8_t> output_queue;
|
||||||
std::deque<uint16_t> output_queue_decode;
|
std::deque<uint16_t> output_queue_decode;
|
||||||
|
|
Reference in New Issue