SIGN
#define Z_DECLARE_LINEAR(SIGN, BIT, ENDIAN) \
z_feed_linear_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
x = pcm_sample_read(sx, AFMT_##SIGN##BIT##_##ENDIAN); \
y = pcm_sample_read(sy, AFMT_##SIGN##BIT##_##ENDIAN); \
pcm_sample_write(dst, x, AFMT_##SIGN##BIT##_##ENDIAN); \
#define _Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, adv) \
x = pcm_sample_read(p, AFMT_##SIGN##BIT##_##ENDIAN); \
#define Z_DECLARE_SINC(SIGN, BIT, ENDIAN) \
z_feed_sinc_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, +); \
Z_SINC_ACCUMULATE(SIGN, BIT, ENDIAN, -); \
pcm_sample_write(dst, pcm_clamp(v, AFMT_##SIGN##BIT##_##ENDIAN),\
AFMT_##SIGN##BIT##_##ENDIAN); \
#define Z_DECLARE_SINC_POLYPHASE(SIGN, BIT, ENDIAN) \
z_feed_sinc_polyphase_##SIGN##BIT##ENDIAN(struct z_info *info, uint8_t *dst) \
x = pcm_sample_read(p, AFMT_##SIGN##BIT##_##ENDIAN); \
x = pcm_sample_read(p, AFMT_##SIGN##BIT##_##ENDIAN); \
pcm_sample_write(dst, pcm_clamp(v, AFMT_##SIGN##BIT##_##ENDIAN),\
AFMT_##SIGN##BIT##_##ENDIAN); \
#define Z_DECLARE(SIGN, BIT, ENDIAN) \
Z_DECLARE_LINEAR(SIGN, BIT, ENDIAN) \
Z_DECLARE_SINC(SIGN, BIT, ENDIAN) \
Z_DECLARE_SINC_POLYPHASE(SIGN, BIT, ENDIAN)
#define Z_RESAMPLER_ENTRY(SIGN, BIT, ENDIAN) \
AFMT_##SIGN##BIT##_##ENDIAN, \
[Z_RESAMPLER_LINEAR] = z_feed_linear_##SIGN##BIT##ENDIAN, \
[Z_RESAMPLER_SINC] = z_feed_sinc_##SIGN##BIT##ENDIAN, \
z_feed_sinc_polyphase_##SIGN##BIT##ENDIAN \
#define FEEDVOLUME_ENTRY(SIGN, BIT, ENDIAN) \
AFMT_##SIGN##BIT##_##ENDIAN, \
feed_volume_##SIGN##BIT##ENDIAN \
#define FEEDVOLUME_DECLARE(SIGN, BIT, ENDIAN) \
feed_volume_##SIGN##BIT##ENDIAN(int *vol, int *matrix, \
AFMT_##SIGN##BIT##_##ENDIAN); \
AFMT_##SIGN##BIT##_##ENDIAN); \
AFMT_##SIGN##BIT##_##ENDIAN); \
if (SIGN(decleft) == SIGN(decright))
if (SIGN(decleft) == SIGN(decmiddle)) {
if (SIGN(decleft) == SIGN(decright))
if (SIGN(decleft) == SIGN(decmiddle)) {