summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/interleave_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib/interleave_impl.cc')
-rw-r--r--gr-blocks/lib/interleave_impl.cc33
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 */