diff options
author | Tom Rondeau <tom@trondeau.com> | 2014-10-16 12:53:19 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2014-10-16 12:53:19 -0400 |
commit | ba0bb94b06d56083e51e237d5e2987140f3bf610 (patch) | |
tree | 34a68abcd6f96bad492230fd2eaa41ab2a70a049 /gr-qtgui/lib/number_sink_impl.cc | |
parent | b55a740c56dd4babeb75c1d4c39dde54c20496a9 (diff) |
qtgui: fixed an issue with the number sink mistreating non-float inputs.
Dealing with ints will require an api change.
Diffstat (limited to 'gr-qtgui/lib/number_sink_impl.cc')
-rw-r--r-- | gr-qtgui/lib/number_sink_impl.cc | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/gr-qtgui/lib/number_sink_impl.cc b/gr-qtgui/lib/number_sink_impl.cc index 16e8d20084..ea07c5dbd2 100644 --- a/gr-qtgui/lib/number_sink_impl.cc +++ b/gr-qtgui/lib/number_sink_impl.cc @@ -328,6 +328,32 @@ namespace gr { } } + float + number_sink_impl::get_item(const void *input_items, int n) + { + char *inc; + short *ins; + float *inf; + + switch(d_itemsize) { + case(1): + inc = (char*)input_items; + return static_cast<float>(inc[n]); + break; + case(2): + ins = (short*)input_items; + return static_cast<float>(ins[n]); + break; + case(4): + inf = (float*)input_items; + return static_cast<float>(inf[n]); + break; + default: + throw std::runtime_error("item size not supported"); + } + return 0; + } + int number_sink_impl::work(int noutput_items, gr_vector_const_void_star &input_items, @@ -339,10 +365,10 @@ namespace gr { if(d_average > 0) { for(int n = 0; n < d_nconnections; n++) { - float *in = (float*)input_items[n]; for(int i = 0; i < noutput_items; i++) { - if(std::isfinite(in[i])) - d_avg_value[n] = d_iir[n].filter(in[i]); + float x = get_item(input_items[n], i); + if(std::isfinite(x)) + d_avg_value[n] = d_iir[n].filter(x); } } } @@ -357,7 +383,7 @@ namespace gr { } else { for(int n = 0; n < d_nconnections; n++) { - float x = ((float*)input_items[n])[0]; + float x = get_item(input_items[n], 0); if(std::isfinite(x)) d[n] = x; } |