// Copyright (c) 2000-2001 Brad Hughes // // Use, modification and distribution is allowed without limitation, // warranty, or liability of any kind. // #ifndef INLINES_H #define INLINES_H #include "fft.h" // *fast* convenience functions static inline void calc_freq(short* dest, short *src) { static fft_state *state = NULL; float tmp_out[257]; int i; if (!state) state = fft_init(); fft_perform(src, tmp_out, state); for (i = 0; i < 256; i++) dest[i] = ((int) sqrt(tmp_out[i + 1])) >> 8; } static inline void calc_mono_freq(short dest[2][256], short src[2][512], int nch) { int i; short *d, *sl, *sr, tmp[512]; if (nch == 1) calc_freq(dest[0], src[0]); else { d = tmp; sl = src[0]; sr = src[1]; for (i = 0; i < 512; i++) { *(d++) = (*(sl++) + *(sr++)) >> 1; } calc_freq(dest[0], tmp); } } static inline void stereo16_from_multichannel(register short *l, register short *r, register short *s, long cnt, int chan) { while (cnt > 0) { l[0] = s[0]; r[0] = s[1]; s += chan; l++; r++; cnt--; } } static inline void stereo16_from_stereopcm16(register short *l, register short *r, register short *s, long cnt) { while (cnt >= 4l) { l[0] = s[0]; r[0] = s[1]; l[1] = s[2]; r[1] = s[3]; l[2] = s[4]; r[2] = s[5]; l[3] = s[6]; r[3] = s[7]; l += 4; r += 4; s += 8; cnt -= 4l; } if (cnt > 0l) { l[0] = s[0]; r[0] = s[1]; if (cnt > 1l) { l[1] = s[2]; r[1] = s[3]; if (cnt > 2l) { l[2] = s[4]; r[2] = s[5]; } } } } static inline void mono16_from_monopcm16(register short *l, register short *s, long cnt) { while (cnt >= 4l) { l[0] = s[0]; l[1] = s[1]; l[2] = s[2]; l[3] = s[3]; l += 4; s += 4; cnt -= 4l; } if (cnt > 0l) { l[0] = s[0]; if (cnt > 1l) { l[1] = s[1]; if (cnt > 2l) { l[2] = s[2]; } } } } #endif // INLINES_H