summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/number_sink_impl.cc
diff options
context:
space:
mode:
authorTom Rondeau <tom@trondeau.com>2014-10-16 12:53:19 -0400
committerTom Rondeau <tom@trondeau.com>2014-10-16 12:53:19 -0400
commitba0bb94b06d56083e51e237d5e2987140f3bf610 (patch)
tree34a68abcd6f96bad492230fd2eaa41ab2a70a049 /gr-qtgui/lib/number_sink_impl.cc
parentb55a740c56dd4babeb75c1d4c39dde54c20496a9 (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.cc34
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;
}