summaryrefslogtreecommitdiff
path: root/gr-vocoder
diff options
context:
space:
mode:
authorA. Maitland Bottoms <bottoms@debian.org>2016-06-25 17:54:28 -0400
committerA. Maitland Bottoms <bottoms@debian.org>2016-06-25 18:49:56 -0400
commit7e20b582f8fff0ad63771705eeb6a037ce9b8628 (patch)
tree96a3acabc5a92ba493e50f5a13ef8f7144321c40 /gr-vocoder
parent45cbe43da3317d9c872672553185d36c5cdf59bd (diff)
gr-vocoder: codec2 subcomponent using external codec2 library
Diffstat (limited to 'gr-vocoder')
-rw-r--r--gr-vocoder/CMakeLists.txt15
-rw-r--r--gr-vocoder/examples/CMakeLists.txt9
-rw-r--r--gr-vocoder/grc/CMakeLists.txt11
-rw-r--r--gr-vocoder/grc/vocoder_codec2_decode_ps.xml10
-rw-r--r--gr-vocoder/grc/vocoder_codec2_encode_sp.xml10
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt10
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/codec2.h10
-rw-r--r--gr-vocoder/lib/CMakeLists.txt83
-rw-r--r--gr-vocoder/python/vocoder/CMakeLists.txt15
-rw-r--r--gr-vocoder/swig/CMakeLists.txt4
-rw-r--r--gr-vocoder/swig/vocoder_swig.i25
11 files changed, 112 insertions, 90 deletions
diff --git a/gr-vocoder/CMakeLists.txt b/gr-vocoder/CMakeLists.txt
index 37c0cf70e9..ddf3684479 100644
--- a/gr-vocoder/CMakeLists.txt
+++ b/gr-vocoder/CMakeLists.txt
@@ -89,6 +89,21 @@ CPACK_COMPONENT("vocoder_swig"
)
########################################################################
+## CODEC2 Support
+########################################################################
+find_package(Codec2)
+if(LIBCODEC2_FOUND)
+ GR_APPEND_SUBCOMPONENT("codec2")
+ #message(STATUS "libcodec2 modes: ${CODEC2_MODES}")
+ if(LIBCODEC2_HAS_CODEC2_MODE_700)
+ #message(STATUS "libcodec2 has 700bps mode")
+ endif()
+ if (LIBCODEC2_HAS_FREEDV_API)
+ #message(STATUS "libcodec2 had FreeDV api modes: ${FREEDV_MODES}")
+ endif()
+endif(LIBCODEC2_FOUND)
+
+########################################################################
# Add subdirectories
########################################################################
add_subdirectory(include/gnuradio/vocoder)
diff --git a/gr-vocoder/examples/CMakeLists.txt b/gr-vocoder/examples/CMakeLists.txt
index 769ddf602a..86cba6d01f 100644
--- a/gr-vocoder/examples/CMakeLists.txt
+++ b/gr-vocoder/examples/CMakeLists.txt
@@ -25,7 +25,6 @@ include(GrPython)
GR_PYTHON_INSTALL(
PROGRAMS
alaw_audio_loopback.py
- codec2_audio_loopback.py
cvsd_audio_loopback.py
g721_audio_loopback.py
g723_24_audio_loopback.py
@@ -35,3 +34,11 @@ GR_PYTHON_INSTALL(
DESTINATION ${GR_PKG_VOCODER_EXAMPLES_DIR}
COMPONENT "vocoder_examples"
)
+if(LIBCODEC2_FOUND)
+ GR_PYTHON_INSTALL(
+ PROGRAMS
+ codec2_audio_loopback.py
+ DESTINATION ${GR_PKG_VOCODER_EXAMPLES_DIR}
+ COMPONENT "vocoder_examples"
+ )
+endif(LIBCODEC2_FOUND)
diff --git a/gr-vocoder/grc/CMakeLists.txt b/gr-vocoder/grc/CMakeLists.txt
index f8cf8231b2..35a585a754 100644
--- a/gr-vocoder/grc/CMakeLists.txt
+++ b/gr-vocoder/grc/CMakeLists.txt
@@ -21,8 +21,6 @@ install(FILES
vocoder_alaw_decode_bs.xml
vocoder_alaw_encode_sb.xml
vocoder_block_tree.xml
- vocoder_codec2_decode_ps.xml
- vocoder_codec2_encode_sp.xml
vocoder_cvsd_decode_bs.xml
vocoder_cvsd_decode.xml
vocoder_cvsd_encode_sb.xml
@@ -40,3 +38,12 @@ install(FILES
DESTINATION ${GRC_BLOCKS_DIR}
COMPONENT "vocoder_python"
)
+
+if(LIBCODEC2_FOUND)
+ install(FILES
+ vocoder_codec2_decode_ps.xml
+ vocoder_codec2_encode_sp.xml
+ DESTINATION ${GRC_BLOCKS_DIR}
+ COMPONENT "vocoder_python"
+ )
+endif(LIBCODEC2_FOUND)
diff --git a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml b/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
index b6e10ef8ba..8448dc83df 100644
--- a/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
+++ b/gr-vocoder/grc/vocoder_codec2_decode_ps.xml
@@ -39,11 +39,19 @@
<name>1200 bps</name>
<key>codec2.MODE_1200</key>
</option>
+ <option>
+ <name>700 bps</name>
+ <key>codec2.MODE_700</key>
+ </option>
+ <option>
+ <name>700B bps</name>
+ <key>codec2.MODE_700B</key>
+ </option>
</param>
<sink>
<name>in</name>
<type>byte</type>
- <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48 }[$mode]</vlen>
+ <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[$mode]</vlen>
</sink>
<source>
<name>out</name>
diff --git a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml b/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
index 6af54fa586..f11ad443c6 100644
--- a/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
+++ b/gr-vocoder/grc/vocoder_codec2_encode_sp.xml
@@ -39,6 +39,14 @@
<name>1200 bps</name>
<key>codec2.MODE_1200</key>
</option>
+ <option>
+ <name>700 bps</name>
+ <key>codec2.MODE_700</key>
+ </option>
+ <option>
+ <name>700B bps</name>
+ <key>codec2.MODE_700B</key>
+ </option>
</param>
<sink>
<name>in</name>
@@ -47,7 +55,7 @@
<source>
<name>out</name>
<type>byte</type>
- <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48 }[$mode]</vlen>
+ <vlen>{ 0: 64, 1: 48, 2: 64, 3: 56, 4: 52, 5: 48, 6: 28, 7: 28 }[$mode]</vlen>
</source>
</block>
diff --git a/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt b/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
index 60f75e7913..6d9bbe8310 100644
--- a/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
+++ b/gr-vocoder/include/gnuradio/vocoder/CMakeLists.txt
@@ -39,3 +39,13 @@ install(FILES
DESTINATION ${GR_INCLUDE_DIR}/gnuradio/vocoder
COMPONENT "vocoder_devel"
)
+
+if(LIBCODEC2_FOUND)
+install(FILES
+ codec2.h
+ codec2_decode_ps.h
+ codec2_encode_sp.h
+ DESTINATION ${GR_INCLUDE_DIR}/gnuradio/vocoder
+ COMPONENT "vocoder_devel"
+)
+endif(LIBCODEC2_FOUND)
diff --git a/gr-vocoder/include/gnuradio/vocoder/codec2.h b/gr-vocoder/include/gnuradio/vocoder/codec2.h
index a3c2225208..afa53d5ac0 100644
--- a/gr-vocoder/include/gnuradio/vocoder/codec2.h
+++ b/gr-vocoder/include/gnuradio/vocoder/codec2.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2014 Free Software Foundation, Inc.
+ * Copyright 2014,2016 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -26,7 +26,7 @@
#include <gnuradio/vocoder/api.h>
extern "C" {
-#include "../lib/codec2/codec2.h"
+#include <codec2/codec2.h>
}
namespace gr {
@@ -42,6 +42,12 @@ namespace gr {
MODE_1400 = CODEC2_MODE_1400,
MODE_1300 = CODEC2_MODE_1300,
MODE_1200 = CODEC2_MODE_1200,
+#ifdef CODEC2_MODE_700
+ MODE_700 = CODEC2_MODE_700,
+#endif
+#ifdef CODEC2_MODE_700B
+ MODE_700B = CODEC2_MODE_700B,
+#endif
};
private:
diff --git a/gr-vocoder/lib/CMakeLists.txt b/gr-vocoder/lib/CMakeLists.txt
index a347cbf7fe..67939c53d2 100644
--- a/gr-vocoder/lib/CMakeLists.txt
+++ b/gr-vocoder/lib/CMakeLists.txt
@@ -82,71 +82,6 @@ endif (NOT DEFINED GR_USE_SYSTEM_LIBGSM)
mark_as_advanced(LIBGSM_INCLUDE_DIR LIBGSM_LIBRARIES)
########################################################################
-# Check for system libcodec2 via CMake variable GR_USE_SYSTEM_LIBCODEC2
-# if undefined, try to find system libgsm library,
-# but if there is no system library use a local copy.
-# if defined True, use system libcodec2 if found, otherwise do not
-# use a local copy.
-# if defined False, use the local copy
-########################################################################
-if (NOT DEFINED GR_USE_SYSTEM_LIBCODEC2)
- find_path(LIBCODEC2_INCLUDE_DIR NAMES codec2.h
- PATHS
- ${LIBCODEC2_PKG_INCLUDE_DIRS}
- /usr/include/codec2
- /usr/include
- )
-
- find_library(LIBCODEC2_LIBRARIES NAMES codec2
- PATHS
- ${LIBCODEC2_PKG_LIBRARY_DIRS}
- /usr/lib
- )
-
- if(LIBCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
- set(GR_USE_SYSTEM_LIBCODEC2 TRUE CACHE INTERNAL "System libcodec2 found")
- message(STATUS "Found libcodec2: ${LIBCODEC2_INCLUDE_DIR}, ${LIBCODEC2_LIBRARIES}")
- set(GR_USE_LOCAL_LIBCODEC2 FALSE)
- set(GR_USE_SYSTEM_LIBCODEC2 TRUE)
- else(LIBCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
- set(GR_USE_SYSTEM_LIBCODEC2 FALSE CACHE INTERNAL "System libcodec2 found")
- message(STATUS "System libcodec2 not found.")
- set(GR_USE_LOCAL_LIBCODEC2 TRUE)
- endif(LIBCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
-else (NOT DEFINED GR_USE_SYSTEM_LIBCODEC2)
- if (GR_USE_SYSTEM_LIBCODEC2)
- find_path(LIBCODEC2_INCLUDE_DIR NAMES codec2.h
- PATHS
- ${LIBCODEC2_PKG_INCLUDE_DIRS}
- /usr/include/codec2
- /usr/include
- )
-
- find_library(LIBCODEC2_LIBRARIES NAMES codec2
- PATHS
- ${LIBGSM_PKG_LIBRARY_DIRS}
- /usr/lib
- )
-
- if(LIBCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
- set(GR_USE_SYSTEM_LIBCODEC2 TRUE CACHE INTERNAL "System libcodec2 found")
- message(STATUS "Found libgsm: ${LIBCODEC2_INCLUDE_DIR}, ${LIBCODEC2_LIBRARIES}")
- set(GR_USE_LOCAL_LIBCODEC2 FALSE)
- else(LIBGCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
- set(GR_USE_SYSTEM_LIBCODEC2 FALSE CACHE INTERNAL "System libcodec2 found")
- message(STATUS "System libcodec2 not found.")
- set(GR_USE_LOCAL_LIBCODEC2 FALSE)
- endif(LIBCODEC2_INCLUDE_DIR AND LIBCODEC2_LIBRARIES)
- else (GR_USE_SYSTEM_LIBCODEC2)
- set(GR_USE_LOCAL_LIBCODEC2 TRUE)
- message(STATUS "Using gnuradio local copy of libcodec2.")
- endif (GR_USE_SYSTEM_LIBCODEC2)
-endif (NOT DEFINED GR_USE_SYSTEM_LIBCODEC2)
-
-mark_as_advanced(LIBCODEC2_INCLUDE_DIR LIBCODEC2_LIBRARIES)
-
-
-########################################################################
# Setup the include and linker paths
########################################################################
include_directories(
@@ -172,9 +107,6 @@ link_directories(${LOG4CPP_LIBRARY_DIRS})
list(APPEND gr_vocoder_sources
alaw_decode_bs_impl.cc
alaw_encode_sb_impl.cc
- codec2.cc
- codec2_decode_ps_impl.cc
- codec2_encode_sp_impl.cc
cvsd_decode_bs_impl.cc
cvsd_encode_sb_impl.cc
g721_decode_bs_impl.cc
@@ -188,6 +120,13 @@ list(APPEND gr_vocoder_sources
ulaw_decode_bs_impl.cc
ulaw_encode_sb_impl.cc
)
+if(LIBCODEC2_FOUND)
+ list(APPEND gr_vocoder_sources
+ codec2.cc
+ codec2_decode_ps_impl.cc
+ codec2_encode_sp_impl.cc
+ )
+endif(LIBCODEC2_FOUND)
#Add Windows DLL resource file if using MSVC
if(MSVC)
@@ -208,10 +147,6 @@ endif(MSVC)
########################################################################
GR_INCLUDE_SUBDIRECTORY(g7xx)
-if(GR_USE_LOCAL_LIBCODEC2)
- GR_INCLUDE_SUBDIRECTORY(codec2)
-endif(GR_USE_LOCAL_LIBCODEC2)
-
if(GR_USE_LOCAL_LIBGSM)
GR_INCLUDE_SUBDIRECTORY(gsm)
endif(GR_USE_LOCAL_LIBGSM)
@@ -222,9 +157,9 @@ list(APPEND vocoder_libs
${LOG4CPP_LIBRARIES}
)
-if(GR_USE_SYSTEM_LIBCODEC2)
+if(LIBCODEC2_LIBRARIES)
list(APPEND vocoder_libs ${LIBCODEC2_LIBRARIES})
-endif(GR_USE_SYSTEM_LIBCODEC2)
+endif(LIBCODEC2_LIBRARIES)
if(GR_USE_SYSTEM_LIBGSM)
list(APPEND vocoder_libs ${LIBGSM_LIBRARIES})
diff --git a/gr-vocoder/python/vocoder/CMakeLists.txt b/gr-vocoder/python/vocoder/CMakeLists.txt
index ca8323daab..1626df1868 100644
--- a/gr-vocoder/python/vocoder/CMakeLists.txt
+++ b/gr-vocoder/python/vocoder/CMakeLists.txt
@@ -42,7 +42,20 @@ if(ENABLE_TESTING)
)
include(GrTest)
- file(GLOB py_qa_test_files "qa_*.py")
+ list(APPEND py_qa_test_files
+ qa_alaw_vocoder.py
+ qa_cvsd_vocoder.py
+ qa_g721_vocoder.py
+ qa_g723_24_vocoder.py
+ qa_g723_40_vocoder.py
+ qa_gsm_full_rate.py
+ qa_ulaw_vocoder.py
+ )
+ if(LIBCODEC2_FOUND)
+ list(APPEND py_qa_test_files
+ qa_codec2_vocoder.py
+ )
+ endif()
foreach(py_qa_test_file ${py_qa_test_files})
get_filename_component(py_qa_test_name ${py_qa_test_file} NAME_WE)
GR_ADD_TEST(${py_qa_test_name} ${QA_PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file})
diff --git a/gr-vocoder/swig/CMakeLists.txt b/gr-vocoder/swig/CMakeLists.txt
index 26623969a7..6ba29516f7 100644
--- a/gr-vocoder/swig/CMakeLists.txt
+++ b/gr-vocoder/swig/CMakeLists.txt
@@ -33,6 +33,10 @@ if(ENABLE_GR_CTRLPORT)
list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT")
endif(ENABLE_GR_CTRLPORT)
+if(LIBCODEC2_FOUND)
+ list(APPEND GR_SWIG_FLAGS "-DLIBCODEC2_FOUND")
+endif(LIBCODEC2_FOUND)
+
set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/vocoder_swig_doc.i)
set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/vocoder)
set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc)
diff --git a/gr-vocoder/swig/vocoder_swig.i b/gr-vocoder/swig/vocoder_swig.i
index dac35c9cd4..22aad98e08 100644
--- a/gr-vocoder/swig/vocoder_swig.i
+++ b/gr-vocoder/swig/vocoder_swig.i
@@ -30,9 +30,6 @@
%{
#include "gnuradio/vocoder/alaw_decode_bs.h"
#include "gnuradio/vocoder/alaw_encode_sb.h"
-#include "gnuradio/vocoder/codec2.h"
-#include "gnuradio/vocoder/codec2_decode_ps.h"
-#include "gnuradio/vocoder/codec2_encode_sp.h"
#include "gnuradio/vocoder/cvsd_decode_bs.h"
#include "gnuradio/vocoder/cvsd_encode_sb.h"
#include "gnuradio/vocoder/g721_decode_bs.h"
@@ -49,9 +46,6 @@
%include "gnuradio/vocoder/alaw_decode_bs.h"
%include "gnuradio/vocoder/alaw_encode_sb.h"
-%include "gnuradio/vocoder/codec2.h"
-%include "gnuradio/vocoder/codec2_decode_ps.h"
-%include "gnuradio/vocoder/codec2_encode_sp.h"
%include "gnuradio/vocoder/cvsd_decode_bs.h"
%include "gnuradio/vocoder/cvsd_encode_sb.h"
%include "gnuradio/vocoder/g721_decode_bs.h"
@@ -67,8 +61,6 @@
GR_SWIG_BLOCK_MAGIC2(vocoder, alaw_decode_bs);
GR_SWIG_BLOCK_MAGIC2(vocoder, alaw_encode_sb);
-GR_SWIG_BLOCK_MAGIC2(vocoder, codec2_decode_ps);
-GR_SWIG_BLOCK_MAGIC2(vocoder, codec2_encode_sp);
GR_SWIG_BLOCK_MAGIC2(vocoder, cvsd_decode_bs);
GR_SWIG_BLOCK_MAGIC2(vocoder, cvsd_encode_sb);
GR_SWIG_BLOCK_MAGIC2(vocoder, g721_decode_bs);
@@ -81,3 +73,20 @@ GR_SWIG_BLOCK_MAGIC2(vocoder, gsm_fr_decode_ps);
GR_SWIG_BLOCK_MAGIC2(vocoder, gsm_fr_encode_sp);
GR_SWIG_BLOCK_MAGIC2(vocoder, ulaw_decode_bs);
GR_SWIG_BLOCK_MAGIC2(vocoder, ulaw_encode_sb);
+
+#ifdef LIBCODEC2_FOUND
+%{
+#include <codec2/codec2.h>
+#include "gnuradio/vocoder/codec2.h"
+#include "gnuradio/vocoder/codec2_decode_ps.h"
+#include "gnuradio/vocoder/codec2_encode_sp.h"
+%}
+
+%include <codec2/codec2.h>
+%include "gnuradio/vocoder/codec2.h"
+%include "gnuradio/vocoder/codec2_decode_ps.h"
+%include "gnuradio/vocoder/codec2_encode_sp.h"
+
+GR_SWIG_BLOCK_MAGIC2(vocoder, codec2_decode_ps);
+GR_SWIG_BLOCK_MAGIC2(vocoder, codec2_encode_sp);
+#endif