/** * Setup the audio-filter chain * * must be called before auplay/ausrc-alloc */ static int aufilt_setup(struct audio *a) { struct aufilt_prm encprm, decprm; struct autx *tx = &a->tx; struct aurx *rx = &a->rx; struct le *le; /* wait until we have both Encoder and Decoder */ if (!tx->ac || !rx->ac) return 0; if (!list_isempty(&tx->filtl) || !list_isempty(&rx->filtl)) return 0; aufilt_param_set(&encprm, tx->ac, tx->ptime); aufilt_param_set(&decprm, rx->ac, rx->ptime); /* Audio filters */ for (le = list_head(aufilt_list()); le; le = le->next) { struct aufilt *af = le->data; struct aufilt_enc_st *encst = NULL; struct aufilt_dec_st *decst = NULL; void *ctx = NULL; int err = 0; if (af->encupdh) { err |= af->encupdh(&encst, &ctx, af, &encprm); if (err) { continue; } encst->af = af; list_append(&tx->filtl, &encst->le, encst); } if (af->decupdh) { err |= af->decupdh(&decst, &ctx, af, &decprm); if (err) { continue; } decst->af = af; list_append(&rx->filtl, &decst->le, decst); } if (err) { DEBUG_WARNING("audio-filter '%s' update failed (%m)\n", af->name, err); break; } } return 0; }
/** * Setup the audio-filter chain * * must be called before auplay/ausrc-alloc */ static int aufilt_setup(struct audio *a) { struct aufilt_prm encprm, decprm; struct autx *tx = &a->tx; struct aurx *rx = &a->rx; struct le *le; int err = 0; aufilt_param_set(&encprm, tx->ac ? tx->ac : rx->ac, tx->ptime); aufilt_param_set(&decprm, rx->ac ? rx->ac : tx->ac, rx->ptime); /* Audio filters */ for (le = list_head(aufilt_list()); le; le = le->next) { struct aufilt *af = le->data; struct aufilt_st *st = NULL; err = af->updh(&st, af, &encprm, &decprm); if (err) { DEBUG_WARNING("audio-filter '%s' update failed (%m)\n", af->name, err); break; } st->af = af; list_append(&a->filtl, &st->le, st); if (le == list_head(aufilt_list())) (void)re_printf("audio filters: (dsp)"); (void)re_printf("<--->[%s]", af->name); if (le == list_tail(aufilt_list())) (void)re_printf("<--->(codec)\n"); } return 0; }