summaryrefslogtreecommitdiff
path: root/gr-vocoder/lib/freedv_tx_ss_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-vocoder/lib/freedv_tx_ss_impl.cc')
-rw-r--r--gr-vocoder/lib/freedv_tx_ss_impl.cc23
1 files changed, 15 insertions, 8 deletions
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;
}