AudioResamplerFirProcess.h中int和float的不同算术插值函数

时间:2015-04-30 13:34:07

标签: android audio

目前我正在尝试为AudioResamplerDyn做一些SSE优化,它看起来只有ARM霓虹灯优化。

在我的实现过程中,我对AudioResamplerFirProcess.h中的插值函数有疑问:

template<typename TC, typename TINTERP>
inline
TC interpolate(TC coef_0, TC coef_1, TINTERP lerp)
{
    return lerp * (coef_1 - coef_0) + coef_0;
}

template<>
inline int16_t interpolate<int16_t, uint32_t>(int16_t coef_0, int16_t coef_1, uint32_t lerp)
{   // in some CPU architectures 16b x 16b multiplies are faster.
    return (static_cast<int16_t>(lerp) * static_cast<int16_t>(coef_1 - coef_0) >> 15) + coef_0;
}

(int16_t,uint32_t)的代码让我很困惑,因为它看起来不是lerp *(coef_1 - coef_0)+ coef_0的实现,它将用于(float,float)。如果有人知道为什么float和int使用不同的算术?

0 个答案:

没有答案