summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/complex_to_interleaved_short_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib/complex_to_interleaved_short_impl.cc')
-rw-r--r--gr-blocks/lib/complex_to_interleaved_short_impl.cc20
1 files changed, 11 insertions, 9 deletions
diff --git a/gr-blocks/lib/complex_to_interleaved_short_impl.cc b/gr-blocks/lib/complex_to_interleaved_short_impl.cc
index 2e8e8d047d..6a20e0b59f 100644
--- a/gr-blocks/lib/complex_to_interleaved_short_impl.cc
+++ b/gr-blocks/lib/complex_to_interleaved_short_impl.cc
@@ -14,21 +14,26 @@
#include "complex_to_interleaved_short_impl.h"
#include <gnuradio/io_signature.h>
+#include <volk/volk.h>
namespace gr {
namespace blocks {
-complex_to_interleaved_short::sptr complex_to_interleaved_short::make(bool vector)
+complex_to_interleaved_short::sptr complex_to_interleaved_short::make(bool vector,
+ float scale_factor)
{
- return gnuradio::get_initial_sptr(new complex_to_interleaved_short_impl(vector));
+ return gnuradio::get_initial_sptr(
+ new complex_to_interleaved_short_impl(vector, scale_factor));
}
-complex_to_interleaved_short_impl::complex_to_interleaved_short_impl(bool vector)
+complex_to_interleaved_short_impl::complex_to_interleaved_short_impl(bool vector,
+ float scale_factor)
: sync_interpolator(
"complex_to_interleaved_short",
io_signature::make(1, 1, sizeof(gr_complex)),
io_signature::make(1, 1, vector ? 2 * sizeof(short) : sizeof(short)),
vector ? 1 : 2),
+ d_scalar(scale_factor),
d_vector(vector)
{
}
@@ -37,14 +42,11 @@ int complex_to_interleaved_short_impl::work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items)
{
- const gr_complex* in = (const gr_complex*)input_items[0];
+ const float* in = (const float*)input_items[0];
short* out = (short*)output_items[0];
- int npairs = (d_vector ? noutput_items : noutput_items / 2);
- for (int i = 0; i < npairs; i++) {
- *out++ = (short)lrintf(in[i].real()); // FIXME saturate?
- *out++ = (short)lrintf(in[i].imag());
- }
+ volk_32f_s32f_convert_16i(
+ out, in, d_scalar, d_vector ? noutput_items * 2 : noutput_items);
return noutput_items;
}