int main(void) { struct FFIIRFilterCoeffs *fcoeffs = NULL; struct FFIIRFilterState *fstate = NULL; float cutoff_coeff = 0.4; int16_t x[SIZE], y[SIZE]; int i; fcoeffs = ff_iir_filter_init_coeffs(NULL, FF_FILTER_TYPE_BUTTERWORTH, FF_FILTER_MODE_LOWPASS, FILT_ORDER, cutoff_coeff, 0.0, 0.0); fstate = ff_iir_filter_init_state(FILT_ORDER); for (i = 0; i < SIZE; i++) x[i] = lrint(0.75 * INT16_MAX * sin(0.5 * M_PI * i * i / SIZE)); ff_iir_filter(fcoeffs, fstate, SIZE, x, 1, y, 1); for (i = 0; i < SIZE; i++) printf("%6d %6d\n", x[i], y[i]); ff_iir_filter_free_coeffsp(&fcoeffs); ff_iir_filter_free_statep(&fstate); return 0; }
void ff_psy_preprocess(struct FFPsyPreprocessContext *ctx, const int16_t *audio, int16_t *dest, int tag, int channels) { int ch, i; if (ctx->fstate) { for (ch = 0; ch < channels; ch++) ff_iir_filter(ctx->fcoeffs, ctx->fstate[tag+ch], ctx->avctx->frame_size, audio + ch, ctx->avctx->channels, dest + ch, ctx->avctx->channels); } else { for (ch = 0; ch < channels; ch++) for (i = 0; i < ctx->avctx->frame_size; i++) dest[i*ctx->avctx->channels + ch] = audio[i*ctx->avctx->channels + ch]; } }