diff options
Diffstat (limited to 'gr-blocks/lib/interleaved_short_to_complex_impl.cc')
-rw-r--r-- | gr-blocks/lib/interleaved_short_to_complex_impl.cc | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/gr-blocks/lib/interleaved_short_to_complex_impl.cc b/gr-blocks/lib/interleaved_short_to_complex_impl.cc index 962b29b37c..bb1e229bf1 100644 --- a/gr-blocks/lib/interleaved_short_to_complex_impl.cc +++ b/gr-blocks/lib/interleaved_short_to_complex_impl.cc @@ -31,19 +31,24 @@ namespace gr { namespace blocks { - interleaved_short_to_complex::sptr interleaved_short_to_complex::make(bool vector_input) + interleaved_short_to_complex::sptr interleaved_short_to_complex::make(bool vector_input, bool swap) { - return gnuradio::get_initial_sptr(new interleaved_short_to_complex_impl(vector_input)); + return gnuradio::get_initial_sptr(new interleaved_short_to_complex_impl(vector_input, swap)); } - interleaved_short_to_complex_impl::interleaved_short_to_complex_impl(bool vector_input) + interleaved_short_to_complex_impl::interleaved_short_to_complex_impl(bool vector_input, bool swap) : sync_decimator("interleaved_short_to_complex", gr::io_signature::make (1, 1, (vector_input?2:1)*sizeof(short)), gr::io_signature::make (1, 1, sizeof(gr_complex)), vector_input?1:2), - d_vector_input(vector_input) + d_vector_input(vector_input), d_swap(swap) { } + + void interleaved_short_to_complex_impl::set_swap(bool swap) + { + d_swap = swap; + } int interleaved_short_to_complex_impl::work(int noutput_items, @@ -55,6 +60,15 @@ namespace gr { interleaved_short_array_to_complex (in, out, 2 * noutput_items); + if (d_swap) { + float* p = (float*)output_items[0]; + for (int i = 0; i < noutput_items; ++i) { + float f = p[2*i+1]; + p[2*i+1] = p[2*i+0]; + p[2*i+0] = f; + } + } + return noutput_items; } |