inline void testClamp16(float f) { int16_t ival = clamp16_from_float(f / (1 << 15)); // test clamping ALOGV("clamp16_from_float(%f) = %d\n", f, ival); if (f > lim16pos) { EXPECT_EQ(ival, lim16pos); } else if (f < lim16neg) { EXPECT_EQ(ival, lim16neg); } // if in range, make sure round trip clamp and conversion is correct. if (f < lim16pos - 1. && f > lim16neg + 1.) { int ival2 = clamp16_from_float(float_from_i16(ival)); int diff = abs(ival - ival2); EXPECT_LE(diff, 1); } }
void memcpy_to_i16_from_float(int16_t *dst, const float *src, size_t count) { while (count--) { *dst++ = clamp16_from_float(*src++); } }