diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-09-25 11:47:54 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-09-25 11:49:52 -0400 |
commit | 0efc17902814aa9d80ea6acc6cb71ef1e545969c (patch) | |
tree | 28ff2a7605c1ee616290d70e230a47727c6cadfd | |
parent | 33f0601d27ad6ca1e9dc55ecce259f7eb9231385 (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.cc | 28 | ||||
-rw-r--r-- | gr-blocks/lib/keep_m_in_n_impl.h | 6 |
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 */ |