diff options
Diffstat (limited to 'gr-blocks/lib/interleave_impl.cc')
-rw-r--r-- | gr-blocks/lib/interleave_impl.cc | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/gr-blocks/lib/interleave_impl.cc b/gr-blocks/lib/interleave_impl.cc index 22d6488f7a..5584eec601 100644 --- a/gr-blocks/lib/interleave_impl.cc +++ b/gr-blocks/lib/interleave_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2012 Free Software Foundation, Inc. + * Copyright 2012,2014 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -29,17 +29,21 @@ namespace gr { namespace blocks { - - interleave::sptr interleave::make(size_t itemsize, unsigned int blocksize) + + interleave::sptr interleave::make(size_t itemsize, unsigned int blocksize, + bool set_rel_rate) { - return gnuradio::get_initial_sptr(new interleave_impl(itemsize, blocksize)); + return gnuradio::get_initial_sptr + (new interleave_impl(itemsize, blocksize, set_rel_rate)); } - - interleave_impl::interleave_impl(size_t itemsize, unsigned int blocksize) + + interleave_impl::interleave_impl(size_t itemsize, unsigned int blocksize, + bool set_rel_rate) : block("interleave", io_signature::make (1, io_signature::IO_INFINITE, itemsize), io_signature::make (1, 1, itemsize)), - d_itemsize(itemsize), d_blocksize(blocksize) + d_itemsize(itemsize), d_blocksize(blocksize), + d_set_rel_rate(set_rel_rate) { set_fixed_rate(true); set_output_multiple(d_blocksize); @@ -48,13 +52,14 @@ namespace gr { bool interleave_impl::check_topology(int ninputs, int noutputs) { - set_relative_rate((double)ninputs); + if(d_set_rel_rate) + set_relative_rate(static_cast<double>(ninputs)); d_ninputs = ninputs; set_output_multiple(d_blocksize * d_ninputs); return true; } - - + + int interleave_impl::fixed_rate_ninput_to_noutput(int ninput) { @@ -66,7 +71,7 @@ namespace gr { { return (int) ((noutput / d_ninputs) + .5); } - + void interleave_impl::forecast(int noutput_items, gr_vector_int& ninput_items_required) @@ -85,7 +90,7 @@ namespace gr { size_t noutput_blocks = (size_t) ((noutput_items/d_blocksize) + .5); const char **in = (const char**)&input_items[0]; char *out = (char*)output_items[0]; - + for (unsigned int i = 0; i < noutput_blocks; i += d_ninputs) { for (unsigned int n = 0; n < d_ninputs; n++){ memcpy(out, in[n], d_itemsize * d_blocksize); @@ -98,7 +103,7 @@ namespace gr { } - - + + } /* namespace blocks */ } /* namespace gr */ |