summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/deinterleave_impl.cc
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2014-05-12 12:41:39 -0400
committerTom Rondeau <tom@trondeau.com>2014-05-17 17:45:14 -0400
commit81b7275ea6e915c7da2e593bb29a3b01df14805b (patch)
tree46cac972ed10d90dff80eed44c6c52da54f31c0a /gr-blocks/lib/deinterleave_impl.cc
parent1902afd22cb36305c14467fe8e9852e312336579 (diff)
blocks: add optional argument to deinterleave and interleave ctors to not set relative rate.
Whe using blocks of data, this doesn't always make sense (see the threading of the extended encoder and decoder in gr-fec).
Diffstat (limited to 'gr-blocks/lib/deinterleave_impl.cc')
-rw-r--r--gr-blocks/lib/deinterleave_impl.cc27
1 files changed, 16 insertions, 11 deletions
diff --git a/gr-blocks/lib/deinterleave_impl.cc b/gr-blocks/lib/deinterleave_impl.cc
index 5e1cc5221d..025e2b62c5 100644
--- a/gr-blocks/lib/deinterleave_impl.cc
+++ b/gr-blocks/lib/deinterleave_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
*
@@ -30,16 +30,20 @@
namespace gr {
namespace blocks {
- deinterleave::sptr deinterleave::make(size_t itemsize, unsigned int blocksize)
+ deinterleave::sptr deinterleave::make(size_t itemsize, unsigned int blocksize,
+ bool set_rel_rate)
{
- return gnuradio::get_initial_sptr(new deinterleave_impl(itemsize, blocksize));
+ return gnuradio::get_initial_sptr
+ (new deinterleave_impl(itemsize, blocksize, set_rel_rate));
}
-
- deinterleave_impl::deinterleave_impl(size_t itemsize, unsigned int blocksize)
+
+ deinterleave_impl::deinterleave_impl(size_t itemsize, unsigned int blocksize,
+ bool set_rel_rate)
: block("deinterleave",
io_signature::make (1, 1, itemsize),
io_signature::make (1, io_signature::IO_INFINITE, itemsize)),
- d_itemsize(itemsize), d_blocksize(blocksize), d_current_output(0)
+ d_itemsize(itemsize), d_blocksize(blocksize), d_current_output(0),
+ d_set_rel_rate(set_rel_rate)
{
set_output_multiple(blocksize);
}
@@ -47,11 +51,12 @@ namespace gr {
bool
deinterleave_impl::check_topology(int ninputs, int noutputs)
{
- set_relative_rate((double)noutputs);
+ if(d_set_rel_rate)
+ set_relative_rate(1.0/static_cast<double>(noutputs));
d_noutputs = noutputs;
return true;
}
-
+
int
deinterleave_impl::general_work(int noutput_items,
gr_vector_int& ninput_items,
@@ -60,14 +65,14 @@ namespace gr {
{
const char *in = (const char*)input_items[0];
char **out = (char**)&output_items[0];
-
+
memcpy(out[d_current_output], in, d_itemsize * d_blocksize);
consume_each(d_blocksize);
produce(d_current_output, d_blocksize);
d_current_output = (d_current_output + 1) % d_noutputs;
return WORK_CALLED_PRODUCE;
}
-
-
+
+
} /* namespace blocks */
} /* namespace gr */