summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2014-09-25 11:47:54 -0400
committerTom Rondeau <tom@trondeau.com>2014-09-25 11:49:52 -0400
commit0efc17902814aa9d80ea6acc6cb71ef1e545969c (patch)
tree28ff2a7605c1ee616290d70e230a47727c6cadfd
parent33f0601d27ad6ca1e9dc55ecce259f7eb9231385 (diff)
blocks: fixed up keem_m_in_n to handle relative rate and correct number of items in calls to work.
Original patch from Zhe Feng on mailing list.
-rw-r--r--gr-blocks/lib/keep_m_in_n_impl.cc28
-rw-r--r--gr-blocks/lib/keep_m_in_n_impl.h6
2 files changed, 28 insertions, 6 deletions
diff --git a/gr-blocks/lib/keep_m_in_n_impl.cc b/gr-blocks/lib/keep_m_in_n_impl.cc
index 878531dba3..b33eb7c1a8 100644
--- a/gr-blocks/lib/keep_m_in_n_impl.cc
+++ b/gr-blocks/lib/keep_m_in_n_impl.cc
@@ -59,13 +59,14 @@ namespace gr {
std::string s = boost::str(boost::format("keep_m_in_n: m (%1%) <= n %2%") % d_m % d_n);
throw std::runtime_error(s);
}
- if(d_offset < (d_n - d_m)) {
+ if(d_offset > (d_n - d_m)) {
std::string s = boost::str(boost::format("keep_m_in_n: offset (%1%) <= n (%2%) - m (%3%)") \
% d_offset % d_n % d_m);
throw std::runtime_error(s);
}
set_output_multiple(m);
+ set_relative_rate(static_cast<double>(d_n)/static_cast<double>(d_m));
}
void
@@ -74,6 +75,27 @@ namespace gr {
ninput_items_required[0] = d_n*(noutput_items/d_m);
}
+ void
+ keep_m_in_n_impl::set_m(int m)
+ {
+ d_m = m;
+ set_output_multiple(m);
+ set_relative_rate(static_cast<double>(d_n)/static_cast<double>(d_m));
+ }
+
+ void
+ keep_m_in_n_impl::set_n(int n)
+ {
+ d_n = n;
+ set_relative_rate(static_cast<double>(d_n)/static_cast<double>(d_m));
+ }
+
+ void
+ keep_m_in_n_impl::set_offset(int offset)
+ {
+ d_offset = offset;
+ }
+
int
keep_m_in_n_impl::general_work(int noutput_items,
gr_vector_int &ninput_items,
@@ -94,8 +116,8 @@ namespace gr {
memcpy( optr, iptr, d_m*d_itemsize );
}
- consume_each(d_n);
- return d_m;
+ consume_each(blks*d_n);
+ return blks*d_m;
}
} /* namespace blocks */
diff --git a/gr-blocks/lib/keep_m_in_n_impl.h b/gr-blocks/lib/keep_m_in_n_impl.h
index 39c78d399e..4a54b4c336 100644
--- a/gr-blocks/lib/keep_m_in_n_impl.h
+++ b/gr-blocks/lib/keep_m_in_n_impl.h
@@ -45,9 +45,9 @@ namespace gr {
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
- void set_m(int m) { d_m = m; }
- void set_n(int n) { d_n = n; }
- void set_offset(int offset) { d_offset = offset; }
+ void set_m(int m);
+ void set_n(int n);
+ void set_offset(int offset);
};
} /* namespace blocks */