yading@11: yading@11: #if defined(TEMPLATE_DITHER_DBL) yading@11: # define RENAME(N) N ## _double yading@11: # define DELEM double yading@11: # define CLIP(v) yading@11: yading@11: #elif defined(TEMPLATE_DITHER_FLT) yading@11: # define RENAME(N) N ## _float yading@11: # define DELEM float yading@11: # define CLIP(v) yading@11: yading@11: #elif defined(TEMPLATE_DITHER_S32) yading@11: # define RENAME(N) N ## _int32 yading@11: # define DELEM int32_t yading@11: # define CLIP(v) v = FFMAX(FFMIN(v, INT32_MAX), INT32_MIN) yading@11: yading@11: #elif defined(TEMPLATE_DITHER_S16) yading@11: # define RENAME(N) N ## _int16 yading@11: # define DELEM int16_t yading@11: # define CLIP(v) v = FFMAX(FFMIN(v, INT16_MAX), INT16_MIN) yading@11: yading@11: #else yading@11: ERROR yading@11: #endif yading@11: yading@11: void RENAME(swri_noise_shaping)(SwrContext *s, AudioData *dsts, const AudioData *srcs, const AudioData *noises, int count){ yading@11: int pos = s->dither.ns_pos; yading@11: int i, j, ch; yading@11: int taps = s->dither.ns_taps; yading@11: float S = s->dither.ns_scale; yading@11: float S_1 = s->dither.ns_scale_1; yading@11: yading@11: av_assert2((taps&3) != 2); yading@11: av_assert2((taps&3) != 3 || s->dither.ns_coeffs[taps] == 0); yading@11: yading@11: for (ch=0; chch_count; ch++) { yading@11: const float *noise = ((const float *)noises->ch[ch]) + s->dither.noise_pos; yading@11: const DELEM *src = (const DELEM*)srcs->ch[ch]; yading@11: DELEM *dst = (DELEM*)dsts->ch[ch]; yading@11: float *ns_errors = s->dither.ns_errors[ch]; yading@11: const float *ns_coeffs = s->dither.ns_coeffs; yading@11: pos = s->dither.ns_pos; yading@11: for (i=0; idither.ns_pos = pos; yading@11: } yading@11: yading@11: #undef RENAME yading@11: #undef DELEM yading@11: #undef CLIP