summaryrefslogtreecommitdiff
path: root/gr-vocoder
diff options
context:
space:
mode:
Diffstat (limited to 'gr-vocoder')
-rw-r--r--gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h6
-rw-r--r--gr-vocoder/lib/freedv_tx_ss_impl.cc23
-rw-r--r--gr-vocoder/lib/freedv_tx_ss_impl.h9
-rw-r--r--gr-vocoder/python/vocoder/bindings/freedv_tx_ss_python.cc7
4 files changed, 26 insertions, 19 deletions
diff --git a/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h b/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h
index b2b42b4bba..9030f0186f 100644
--- a/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h
+++ b/gr-vocoder/include/gnuradio/vocoder/freedv_tx_ss.h
@@ -22,12 +22,12 @@ namespace vocoder {
* \brief FreeDV modulator
* \ingroup audio_blk
*
- * Input: Speech (audio) signal as 16-bit shorts, sampling rate 8 kHz.
+ * Input: Speech (audio) signal as 16-bit shorts.
*
- * Output: Signal (audio) as 16-bit shorts, sampling rate 8 kHz.
+ * Output: Signal (audio) as 16-bit shorts.
*
*/
-class VOCODER_API freedv_tx_ss : virtual public gr::sync_block
+class VOCODER_API freedv_tx_ss : virtual public gr::block
{
public:
typedef std::shared_ptr<freedv_tx_ss> sptr;
diff --git a/gr-vocoder/lib/freedv_tx_ss_impl.cc b/gr-vocoder/lib/freedv_tx_ss_impl.cc
index 1f3dadeb52..b1160d1ac9 100644
--- a/gr-vocoder/lib/freedv_tx_ss_impl.cc
+++ b/gr-vocoder/lib/freedv_tx_ss_impl.cc
@@ -31,9 +31,9 @@ freedv_tx_ss::make(int mode, const std::string msg_txt, int interleave_frames)
freedv_tx_ss_impl::freedv_tx_ss_impl(int mode,
const std::string msg_txt,
int interleave_frames)
- : sync_block("vocoder_freedv_tx_ss",
- io_signature::make(1, 1, sizeof(short)),
- io_signature::make(1, 1, sizeof(short))),
+ : block("vocoder_freedv_tx_ss",
+ io_signature::make(1, 1, sizeof(short)),
+ io_signature::make(1, 1, sizeof(short))),
d_mode(mode),
d_msg_text(msg_txt),
d_interleave_frames(interleave_frames)
@@ -53,6 +53,7 @@ freedv_tx_ss_impl::freedv_tx_ss_impl(int mode,
#endif
d_tx_str = msg_txt + "\r"; // FreeDV uses Carriage Return termination
freedv_set_callback_txt(d_freedv, NULL, get_next_tx_char, this);
+ d_speech_samples = freedv_get_n_speech_samples(d_freedv);
d_nom_modem_samples = freedv_get_n_nom_modem_samples(d_freedv);
set_output_multiple(d_nom_modem_samples);
}
@@ -91,17 +92,23 @@ void freedv_tx_ss_impl::set_tx_bpf(bool val)
freedv_tx_ss_impl::set_tx_bpf(0);
}
-int freedv_tx_ss_impl::work(int noutput_items,
- gr_vector_const_void_star& input_items,
- gr_vector_void_star& output_items)
+void freedv_tx_ss_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required)
+{
+ ninput_items_required[0] = (noutput_items / d_nom_modem_samples) * d_speech_samples;
+}
+
+int freedv_tx_ss_impl::general_work(int noutput_items,
+ gr_vector_int& ninput_items,
+ gr_vector_const_void_star& input_items,
+ gr_vector_void_star& output_items)
{
short* in = (short*)input_items[0];
short* out = (short*)output_items[0];
int i;
for (i = 0; i < (noutput_items / d_nom_modem_samples); i++)
- freedv_tx(
- d_freedv, &(out[i * d_nom_modem_samples]), &(in[i * d_nom_modem_samples]));
+ freedv_tx(d_freedv, &(out[i * d_nom_modem_samples]), &(in[i * d_speech_samples]));
+ consume_each(i * d_speech_samples);
return noutput_items;
}
diff --git a/gr-vocoder/lib/freedv_tx_ss_impl.h b/gr-vocoder/lib/freedv_tx_ss_impl.h
index f4f341b97e..bf4c0ccef1 100644
--- a/gr-vocoder/lib/freedv_tx_ss_impl.h
+++ b/gr-vocoder/lib/freedv_tx_ss_impl.h
@@ -50,9 +50,12 @@ public:
void set_tx_bpf(int val);
// Where all the action really happens
- int work(int noutput_items,
- gr_vector_const_void_star& input_items,
- gr_vector_void_star& output_items);
+ void forecast(int noutput_items, gr_vector_int& ninput_items_required);
+
+ int general_work(int noutput_items,
+ gr_vector_int& ninput_items,
+ gr_vector_const_void_star& input_items,
+ gr_vector_void_star& output_items);
};
} /* namespace vocoder */
diff --git a/gr-vocoder/python/vocoder/bindings/freedv_tx_ss_python.cc b/gr-vocoder/python/vocoder/bindings/freedv_tx_ss_python.cc
index a770bb6bfb..8da2a4aa6b 100644
--- a/gr-vocoder/python/vocoder/bindings/freedv_tx_ss_python.cc
+++ b/gr-vocoder/python/vocoder/bindings/freedv_tx_ss_python.cc
@@ -25,11 +25,8 @@ void bind_freedv_tx_ss(py::module& m)
using freedv_tx_ss = ::gr::vocoder::freedv_tx_ss;
- py::class_<freedv_tx_ss,
- gr::sync_block,
- gr::block,
- gr::basic_block,
- std::shared_ptr<freedv_tx_ss>>(m, "freedv_tx_ss", D(freedv_tx_ss))
+ py::class_<freedv_tx_ss, gr::block, gr::basic_block, std::shared_ptr<freedv_tx_ss>>(
+ m, "freedv_tx_ss", D(freedv_tx_ss))
.def(py::init(&freedv_tx_ss::make),
py::arg("mode") = gr::vocoder::freedv_api::MODE_1600,