Lines Matching refs:effp
30 static int default_function(sox_effect_t * effp UNUSED) in default_function()
36 int lsx_flow_copy(sox_effect_t * effp UNUSED, const sox_sample_t * ibuf, in lsx_flow_copy()
45 static int default_drain(sox_effect_t * effp UNUSED, sox_sample_t *obuf UNUSED, size_t *osamp) in default_drain()
52 static int default_getopts(sox_effect_t * effp, int argc, char **argv UNUSED) in default_getopts() argument
54 return --argc? lsx_usage(effp) : SOX_SUCCESS; in default_getopts()
60 sox_effect_t * effp = lsx_calloc(1, sizeof(*effp)); in sox_create_effect() local
61 effp->obuf = NULL; in sox_create_effect()
63 effp->global_info = sox_get_effects_globals(); in sox_create_effect()
64 effp->handler = *eh; in sox_create_effect()
65 if (!effp->handler.getopts) effp->handler.getopts = default_getopts; in sox_create_effect()
66 if (!effp->handler.start ) effp->handler.start = default_function; in sox_create_effect()
67 if (!effp->handler.flow ) effp->handler.flow = lsx_flow_copy; in sox_create_effect()
68 if (!effp->handler.drain ) effp->handler.drain = default_drain; in sox_create_effect()
69 if (!effp->handler.stop ) effp->handler.stop = default_function; in sox_create_effect()
70 if (!effp->handler.kill ) effp->handler.kill = default_function; in sox_create_effect()
72 effp->priv = lsx_calloc(1, effp->handler.priv_size); in sox_create_effect()
74 return effp; in sox_create_effect()
77 int sox_effect_options(sox_effect_t *effp, int argc, char * const argv[]) in sox_effect_options() argument
82 argv2[0] = (char *)effp->handler.name; in sox_effect_options()
84 result = effp->handler.getopts(effp, argc + 1, argv2); in sox_effect_options()
110 int lsx_effect_set_imin(sox_effect_t * effp, size_t imin) in lsx_effect_set_imin() argument
112 if (imin > sox_globals.bufsiz / effp->flows) { in lsx_effect_set_imin()
117 effp->imin = imin; in lsx_effect_set_imin()
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
132 int ret, (*start)(sox_effect_t * effp) = effp->handler.start; in sox_add_effect()
136 effp->global_info = &chain->global_info; in sox_add_effect()
137 effp->in_signal = *in; in sox_add_effect()
138 effp->out_signal = *out; 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()
141 if (!(effp->handler.flags & SOX_EFF_CHAN)) in sox_add_effect()
142 effp->out_signal.channels = in->channels; in sox_add_effect()
143 if (!(effp->handler.flags & SOX_EFF_RATE)) in sox_add_effect()
144 effp->out_signal.rate = in->rate; in sox_add_effect()
145 if (!(effp->handler.flags & SOX_EFF_PREC)) in sox_add_effect()
146 effp->out_signal.precision = (effp->handler.flags & SOX_EFF_MODIFY)? in sox_add_effect()
148 if (!(effp->handler.flags & SOX_EFF_GAIN)) in sox_add_effect()
149 effp->out_signal.mult = in->mult; in sox_add_effect()
151 effp->flows = in sox_add_effect()
152 (effp->handler.flags & SOX_EFF_MCHAN)? 1 : effp->in_signal.channels; in sox_add_effect()
153 effp->clips = 0; in sox_add_effect()
154 effp->imin = 0; in sox_add_effect()
155 eff0 = *effp, eff0.priv = lsx_memdup(eff0.priv, eff0.handler.priv_size); in sox_add_effect()
157 ret = start(effp); in sox_add_effect()
161 effp->handler.kill(effp); in sox_add_effect()
162 free(effp->priv); in sox_add_effect()
163 effp->priv = NULL; in sox_add_effect()
173 if (!(effp->handler.flags & SOX_EFF_LENGTH)) { in sox_add_effect()
174 effp->out_signal.length = in->length; in sox_add_effect()
175 if (effp->out_signal.length != SOX_UNKNOWN_LEN) { in sox_add_effect()
176 if (effp->handler.flags & SOX_EFF_CHAN) in sox_add_effect()
177 effp->out_signal.length = in sox_add_effect()
178 effp->out_signal.length / in->channels * effp->out_signal.channels; in sox_add_effect()
179 if (effp->handler.flags & SOX_EFF_RATE) in sox_add_effect()
180 effp->out_signal.length = in sox_add_effect()
181 effp->out_signal.length / in->rate * effp->out_signal.rate + .5; in sox_add_effect()
185 *in = effp->out_signal; 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()
198 for (f = 1; f < effp->flows; ++f) { in sox_add_effect()
243 sox_effect_t *effp = chain->effects[n]; in flow_effect() local
247 size_t obeg = sox_globals.bufsiz - effp->oend; in flow_effect()
248 sox_bool il_change = (effp->flows == 1) != in flow_effect()
255 if (effp->flows == 1) { /* Run effect on all channels at once */ in flow_effect()
256 idone -= idone % effp->in_signal.channels; in flow_effect()
257 effstatus = effp->handler.flow(effp, effp1->obuf + effp1->obeg, in flow_effect()
258 il_change ? chain->il_buf : effp->obuf + effp->oend, in flow_effect()
260 if (obeg % effp->out_signal.channels != 0) { in flow_effect()
266 effp->obuf, sox_globals.bufsiz, effp->oend); in flow_effect()
268 sox_sample_t *obuf = il_change ? chain->il_buf : effp->obuf; in flow_effect()
269 size_t flow_offs = sox_globals.bufsiz/effp->flows; 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()
287 for (f = 0; f < effp->flows; ++f) { in flow_effect()
288 size_t idonec = idone / effp->flows; in flow_effect()
289 size_t odonec = obeg / effp->flows; in flow_effect()
290 int eff_status_c = effp->handler.flow(&chain->effects[n][f], in flow_effect()
291 effp1->obuf + f*flow_offs + effp1->obeg/effp->flows, in flow_effect()
292 obuf + f*flow_offs + effp->oend/effp->flows, in flow_effect()
305 idone = effp->flows * idone_max; in flow_effect()
306 obeg = effp->flows * odone_max; in flow_effect()
309 interleave(effp->flows, obeg, chain->il_buf, sox_globals.bufsiz, in flow_effect()
310 effp->oend, effp->obuf + effp->oend); in flow_effect()
315 else if (effp1->oend - effp1->obeg < effp->imin) { /* Need to refill? */ in flow_effect()
316 size_t flow_offs = sox_globals.bufsiz/effp->flows; in flow_effect()
317 for (f = 0; f < effp->flows; ++f) in flow_effect()
319 effp1->obuf + f * flow_offs + effp1->obeg/effp->flows, in flow_effect()
320 (effp1->oend - effp1->obeg)/effp->flows * sizeof(*effp1->obuf)); in flow_effect()
325 effp->oend += obeg; in flow_effect()
331 n, effp->flows, pre_idone, pre_odone, idone, obeg, in flow_effect()
341 sox_effect_t *effp = chain->effects[n]; in drain_effect() local
344 size_t obeg = sox_globals.bufsiz - effp->oend; in drain_effect()
345 sox_bool il_change = (effp->flows == 1) != in drain_effect()
351 if (effp->flows == 1) { /* Run effect on all channels at once */ in drain_effect()
352 effstatus = effp->handler.drain(effp, in drain_effect()
353 il_change ? chain->il_buf : effp->obuf + effp->oend, in drain_effect()
355 if (obeg % effp->out_signal.channels != 0) { in drain_effect()
361 effp->obuf, sox_globals.bufsiz, effp->oend); in drain_effect()
363 sox_sample_t *obuf = il_change ? chain->il_buf : effp->obuf; in drain_effect()
364 size_t flow_offs = sox_globals.bufsiz/effp->flows; in drain_effect()
367 for (f = 0; f < effp->flows; ++f) { in drain_effect()
368 size_t odonec = obeg / effp->flows; in drain_effect()
369 int eff_status_c = effp->handler.drain(&chain->effects[n][f], in drain_effect()
370 obuf + f*flow_offs + effp->oend/effp->flows, in drain_effect()
382 obeg = effp->flows * odone_last; in drain_effect()
385 interleave(effp->flows, obeg, chain->il_buf, sox_globals.bufsiz, in drain_effect()
386 effp->oend, effp->obuf + effp->oend); in drain_effect()
391 effp->oend += obeg; in drain_effect()
396 n, effp->flows, (size_t)0, pre_odone, (size_t)0, obeg); in drain_effect()
411 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects() local
412 effp->obuf = in sox_flow_effects()
413 lsx_realloc(effp->obuf, sox_globals.bufsiz * sizeof(*effp->obuf)); in sox_flow_effects()
417 if (effp->oend > sox_globals.bufsiz) { in sox_flow_effects()
420 effp->obeg = effp->oend = 0; in sox_flow_effects()
422 max_flows = max(max_flows, effp->flows); in sox_flow_effects()
432 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects() local
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()
475 sox_effect_t *effp = chain->effects[e]; in sox_flow_effects() local
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()
497 sox_uint64_t sox_stop_effect(sox_effect_t *effp) in sox_stop_effect() argument
502 for (f = 0; f < effp->flows; ++f) { in sox_stop_effect()
503 effp[f].handler.stop(&effp[f]); in sox_stop_effect()
504 clips += effp[f].clips; in sox_stop_effect()
509 void sox_push_effect_last(sox_effects_chain_t *chain, sox_effect_t *effp) in sox_push_effect_last() argument
518 chain->effects[chain->length++] = effp; in sox_push_effect_last()
525 sox_effect_t *effp; in sox_pop_effect_last() local
527 effp = chain->effects[chain->length]; in sox_pop_effect_last()
529 return effp; in sox_pop_effect_last()
539 void sox_delete_effect(sox_effect_t *effp) in sox_delete_effect() argument
544 if ((clips = sox_stop_effect(effp)) != 0) in sox_delete_effect()
546 effp->handler.name, clips); in sox_delete_effect()
547 if (effp->obeg != effp->oend) in sox_delete_effect()
549 (effp->oend - effp->obeg)/effp->out_signal.channels); in sox_delete_effect()
552 effp->handler.kill(effp); /* N.B. only one kill; not one per flow */ in sox_delete_effect()
553 for (f = 0; f < effp->flows; ++f) in sox_delete_effect()
554 free(effp[f].priv); in sox_delete_effect()
555 free(effp->obuf); in sox_delete_effect()
556 free(effp); in sox_delete_effect()