int ii = 0; // input index
int oo = 0; // output index
+ int ni = ninput_items[0] - d_interp->ntaps(); // don't use more input than this
float mm_val;
- while (oo < noutput_items){
+ while (oo < noutput_items && ii < ni ){
// produce output sample
out[oo] = d_interp->interpolate (&in[ii], d_mu);
d_last_sample = out[oo];
d_omega = d_omega + d_gain_omega * mm_val;
- if (d_omega > d_max_omega)
- d_omega = d_max_omega;
- else if (d_omega < d_min_omega)
- d_omega = d_min_omega;
-
+ d_omega = d_omega_mid + gr_branchless_clip(d_omega-d_omega_mid, d_omega_relative_limit); // make sure we don't walk away
d_mu = d_mu + d_omega + d_gain_mu * mm_val;
ii += (int) floor(d_mu);
consume_each (ii);
- return noutput_items;
+ return oo;
}