Lines Matching full:chain

1 /* SoX Effects chain     (c) 2007 robs@users.sourceforge.net
89 /* Effects chain: */
124 /* Add an effect to the chain. *in is the input signal for this effect. *out is
128 * ready for the next effect in the chain.
130 int sox_add_effect(sox_effects_chain_t * chain, sox_effect_t * effp, sox_signalinfo_t * in, sox_sig… in sox_add_effect() argument
136 effp->global_info = &chain->global_info; in sox_add_effect()
139 effp->in_encoding = chain->in_enc; in sox_add_effect()
140 effp->out_encoding = chain->out_enc; in sox_add_effect()
187 if (chain->length == chain->table_size) { in sox_add_effect()
188 chain->table_size += EFF_TABLE_STEP; in sox_add_effect()
190 "new size = %" PRIuPTR, chain->table_size); in sox_add_effect()
191 lsx_revalloc(chain->effects, chain->table_size); in sox_add_effect()
194 chain->effects[chain->length] = in sox_add_effect()
195 lsx_calloc(effp->flows, sizeof(chain->effects[chain->length][0])); in sox_add_effect()
196 chain->effects[chain->length][0] = *effp; in sox_add_effect()
199 chain->effects[chain->length][f] = eff0; in sox_add_effect()
200 chain->effects[chain->length][f].flow = f; in sox_add_effect()
201 chain->effects[chain->length][f].priv = lsx_memdup(eff0.priv, eff0.handler.priv_size); in sox_add_effect()
202 if (start(&chain->effects[chain->length][f]) != SOX_SUCCESS) { in sox_add_effect()
208 ++chain->length; in sox_add_effect()
240 static int flow_effect(sox_effects_chain_t * chain, size_t n) in flow_effect() argument
242 sox_effect_t *effp1 = chain->effects[n - 1]; in flow_effect()
243 sox_effect_t *effp = chain->effects[n]; in flow_effect()
249 (chain->length == n + 1 || chain->effects[n+1]->flows == 1); in flow_effect()
258 il_change ? chain->il_buf : effp->obuf + effp->oend, in flow_effect()
265 deinterleave(chain->effects[n+1]->flows, obeg, chain->il_buf, in flow_effect()
268 sox_sample_t *obuf = il_change ? chain->il_buf : effp->obuf; in flow_effect()
277 shared(effp,effp1,idone,obeg,obuf,flow_offs,chain,n,effstatus) \ in flow_effect()
283 shared(effp,effp1,idone,obeg,obuf,flow_offs,chain,n,effstatus) \ in flow_effect()
290 int eff_status_c = effp->handler.flow(&chain->effects[n][f], in flow_effect()
309 interleave(effp->flows, obeg, chain->il_buf, sox_globals.bufsiz, in flow_effect()
339 static int drain_effect(sox_effects_chain_t * chain, size_t n) in drain_effect() argument
341 sox_effect_t *effp = chain->effects[n]; in drain_effect()
346 (chain->length == n + 1 || chain->effects[n+1]->flows == 1); in drain_effect()
353 il_change ? chain->il_buf : effp->obuf + effp->oend, in drain_effect()
360 deinterleave(chain->effects[n+1]->flows, obeg, chain->il_buf, in drain_effect()
363 sox_sample_t *obuf = il_change ? chain->il_buf : effp->obuf; in drain_effect()
369 int eff_status_c = effp->handler.drain(&chain->effects[n][f], in drain_effect()
385 interleave(effp->flows, obeg, chain->il_buf, sox_globals.bufsiz, in drain_effect()
402 /* Flow data through the effects chain until an effect or callback gives EOF */
403 int sox_flow_effects(sox_effects_chain_t * chain, int (* callback)(sox_bool all_done, void * client… in sox_flow_effects() argument
410 for (e = 0; e < chain->length; ++e) { in sox_flow_effects()
411 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects()
425 chain->il_buf = lsx_malloc(sox_globals.bufsiz * sizeof(sox_sample_t)); in sox_flow_effects()
427 chain->il_buf = NULL; in sox_flow_effects()
431 for (e = 0; e + 1 < chain->length; e++) { in sox_flow_effects()
432 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects()
433 if (effp->oend > effp->obeg && chain->effects[e+1]->flows > 1) { in sox_flow_effects()
434 sox_sample_t *sw = chain->il_buf; chain->il_buf = effp->obuf; effp->obuf = sw; in sox_flow_effects()
435 deinterleave(chain->effects[e+1]->flows, effp->oend - effp->obeg, in sox_flow_effects()
436 chain->il_buf, effp->obuf, sox_globals.bufsiz, effp->obeg); in sox_flow_effects()
440 e = chain->length - 1; in sox_flow_effects()
441 while (source_e < chain->length) { in sox_flow_effects()
442 #define have_imin (e > 0 && e < chain->length && chain->effects[e - 1]->oend - chain->effects[e - 1… in sox_flow_effects()
443 size_t osize = chain->effects[e]->oend - chain->effects[e]->obeg; in sox_flow_effects()
445 if (drain_effect(chain, e) == SOX_EOF) { in sox_flow_effects()
449 } else if (have_imin && flow_effect(chain, e) == SOX_EOF) { in sox_flow_effects()
451 if (e == chain->length - 1) in sox_flow_effects()
456 …if (e < chain->length && chain->effects[e]->oend - chain->effects[e]->obeg > osize) /* False for o… in sox_flow_effects()
465 if (callback && callback(source_e == chain->length, client_data) != SOX_SUCCESS) { in sox_flow_effects()
474 for (e = 0; e + 1 < chain->length; e++) { in sox_flow_effects()
475 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects()
476 if (effp->oend > effp->obeg && chain->effects[e+1]->flows > 1) { in sox_flow_effects()
477 sox_sample_t *sw = chain->il_buf; chain->il_buf = effp->obuf; effp->obuf = sw; in sox_flow_effects()
478 interleave(chain->effects[e+1]->flows, effp->oend - effp->obeg, in sox_flow_effects()
479 chain->il_buf, sox_globals.bufsiz, effp->obeg, effp->obuf); in sox_flow_effects()
483 free(chain->il_buf); in sox_flow_effects()
487 sox_uint64_t sox_effects_clips(sox_effects_chain_t * chain) in sox_effects_clips() argument
491 for (i = 1; i < chain->length - 1; ++i) in sox_effects_clips()
492 for (f = 0; f < chain->effects[i][0].flows; ++f) in sox_effects_clips()
493 clips += chain->effects[i][f].clips; in sox_effects_clips()
509 void sox_push_effect_last(sox_effects_chain_t *chain, sox_effect_t *effp) in sox_push_effect_last() argument
511 if (chain->length == chain->table_size) { in sox_push_effect_last()
512 chain->table_size += EFF_TABLE_STEP; in sox_push_effect_last()
514 "new size = %" PRIuPTR, chain->table_size); in sox_push_effect_last()
515 lsx_revalloc(chain->effects, chain->table_size); in sox_push_effect_last()
518 chain->effects[chain->length++] = effp; in sox_push_effect_last()
521 sox_effect_t *sox_pop_effect_last(sox_effects_chain_t *chain) in sox_pop_effect_last() argument
523 if (chain->length > 0) in sox_pop_effect_last()
526 chain->length--; in sox_pop_effect_last()
527 effp = chain->effects[chain->length]; in sox_pop_effect_last()
528 chain->effects[chain->length] = NULL; in sox_pop_effect_last()
559 void sox_delete_effect_last(sox_effects_chain_t *chain) in sox_delete_effect_last() argument
561 if (chain->length > 0) in sox_delete_effect_last()
563 chain->length--; in sox_delete_effect_last()
564 sox_delete_effect(chain->effects[chain->length]); in sox_delete_effect_last()
565 chain->effects[chain->length] = NULL; in sox_delete_effect_last()
569 /* Remove all effects from the chain.
573 void sox_delete_effects(sox_effects_chain_t * chain) in sox_delete_effects() argument
577 for (e = 0; e < chain->length; ++e) { in sox_delete_effects()
578 sox_delete_effect(chain->effects[e]); in sox_delete_effects()
579 chain->effects[e] = NULL; in sox_delete_effects()
581 chain->length = 0; in sox_delete_effects()