uint16_t run_algorithm(void) { if (rnd < 0x004F) send_time(sync_algorithm); update_rnd(); return 1; }
static float quantize_boost_interleave (void *obuf ,float *in_bufs ,size_t chan_stride ,unsigned channels ,unsigned in_length ,unsigned out_length ,uint_fast32_t *dither_seed ,unsigned fmtbits ) { float maxv = 0.0f; uint_fast32_t rseed = *dither_seed; float boost; if (channels == 2) { unsigned j; float minv = 0.0f; float maxr = 0.0f; float minr = 0.0f; for (j = 0; j < in_length; j++) { float s1 = in_bufs[j]; float s2 = in_bufs[chan_stride+j]; maxv = (s1 > maxv) ? s1 : maxv; minv = (s1 < minv) ? s1 : minv; maxr = (s2 > maxr) ? s2 : maxr; minr = (s2 < minr) ? s2 : minr; } maxv = (maxv > maxr) ? maxv : maxr; minv = (minv < minr) ? minv : minr; maxv += 1.0f; maxv = (maxv > -minv) ? maxv : -minv; if (fmtbits == 12 && channels == 2) { unsigned char *out_buf = obuf; maxv *= 1.0f / 2048.0f; boost = 1.0f / maxv; for (j = 0; j < in_length; j++) { float s1 = in_bufs[j] * boost; float s2 = in_bufs[chan_stride+j] * boost; int_fast32_t r1 = (rseed = update_rnd(rseed)) & 0x3FFFFFFFu; int_fast32_t r2 = (rseed = update_rnd(rseed)) & 0x3FFFFFFFu; int_fast32_t r3 = (rseed = update_rnd(rseed)) & 0x3FFFFFFFu; int_fast32_t r4 = (rseed = update_rnd(rseed)) & 0x3FFFFFFFu; float d1 = (r1 + r2) * (1.0f / 0x7FFFFFFF); float d2 = (r3 + r4) * (1.0f / 0x7FFFFFFF); int_fast32_t v1 = (int_fast32_t)(d1 + s1 + 2048.0f) - 2048; int_fast32_t v2 = (int_fast32_t)(d2 + s2 + 2048.0f) - 2048; v1 = (v1 > (int)0x7FF) ? 0x7FF : ((v1 < -(int)0x800) ? -(int)0x800 : v1); v2 = (v2 > (int)0x7FF) ? 0x7FF : ((v2 < -(int)0x800) ? -(int)0x800 : v2); encode2x12(out_buf + 3*j, v1, v2); } for (; j < out_length; j++) { encode2x12(out_buf + 3*j, 0, 0); } } else if (fmtbits == 16 && channels == 2) { int_least16_t *out_buf = obuf; maxv *= 1.0f / 32764.0f; boost = ((float)((((uint_fast64_t)1u) << 33))) / maxv; /* 4091ms */ for (j = 0; j < in_length; j++) { uint_fast32_t d1, d2, d3, d4; float f1, f2; int_fast64_t lch, rch; f1 = in_bufs[j]; f2 = in_bufs[chan_stride+j]; d1 = update_rnd(rseed); d2 = update_rnd(d1); d3 = update_rnd(d2); d4 = update_rnd(d3); f1 *= boost; f2 *= boost; rseed = d4; lch = (int_fast64_t)f1; rch = (int_fast64_t)f2; lch += (int_fast64_t)(d1 & 0xFFFFFFFFu); rch += (int_fast64_t)(d2 & 0xFFFFFFFFu); lch += (int_fast64_t)(d3 & 0xFFFFFFFFu); rch += (int_fast64_t)(d4 & 0xFFFFFFFFu); lch = lch >> 33; rch = rch >> 33; out_buf[2*j+0] = (int_least16_t)lch; out_buf[2*j+1] = (int_least16_t)rch; } for (; j < out_length; j++) { out_buf[2*j+0] = 0; out_buf[2*j+1] = 0; } } else {