inline void testClamp24(float f) { int32_t ival = clamp24_from_float(f / (1 << 23)); // test clamping ALOGV("clamp24_from_float(%f) = %d\n", f, ival); if (f > lim24pos) { EXPECT_EQ(ival, lim24pos); } else if (f < lim24neg) { EXPECT_EQ(ival, lim24neg); } // if in range, make sure round trip clamp and conversion is correct. if (f < lim24pos - 1. && f > lim24neg + 1.) { int ival2 = clamp24_from_float(float_from_q8_23(ival)); int diff = abs(ival - ival2); EXPECT_LE(diff, 1); } }
void memcpy_to_float_from_q8_23(float *dst, const int32_t *src, size_t count) { while (count--) { *dst++ = float_from_q8_23(*src++); } }