[PATCH] allow non 2^n blocksizes
IOhannes m zmoelnig
zmoelnig at iem.at
Wed Oct 24 10:18:38 CEST 2012
---
src/d_ugen.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/d_ugen.c b/src/d_ugen.c
index 1ed3960..a282ec4 100644
--- a/src/d_ugen.c
+++ b/src/d_ugen.c
@@ -427,7 +427,7 @@ void signal_makereusable(t_signal *sig)
signal whose buffer and size will be obtained later via
signal_setborrowed(). */
-t_signal *signal_new(int n, t_float sr)
+t_signal *signal_new(int n, int calcsize, t_float sr)
{
int logn, n2, vecsize = 0;
t_signal *ret, **whichlist;
@@ -464,7 +464,7 @@ t_signal *signal_new(int n, t_float sr)
ret->s_nextused = signal_usedlist;
signal_usedlist = ret;
}
- ret->s_n = n;
+ ret->s_n = calcsize;
ret->s_vecsize = vecsize;
ret->s_sr = sr;
ret->s_refcount = 0;
@@ -475,7 +475,7 @@ t_signal *signal_new(int n, t_float sr)
static t_signal *signal_newlike(const t_signal *sig)
{
- return (signal_new(sig->s_n, sig->s_sr));
+ return (signal_new(sig->s_vecsize, sig->s_n, sig->s_sr));
}
void signal_setborrowed(t_signal *sig, t_signal *sig2)
@@ -739,7 +739,7 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u)
if (!uin->i_nconnect)
{
t_float *scalar;
- s3 = signal_new(dc->dc_vecsize, dc->dc_srate);
+ s3 = signal_new(dc->dc_vecsize, dc->dc_calcsize, dc->dc_srate);
/* post("%s: unconnected signal inlet set to zero",
class_getname(u->u_obj->ob_pd)); */
if (scalar = obj_findsignalscalar(u->u_obj, i))
@@ -779,10 +779,10 @@ static void ugen_doit(t_dspcontext *dc, t_ugenbox *u)
if (nonewsigs)
{
*sig = uout->o_signal =
- signal_new(0, dc->dc_srate);
+ signal_new(0, 0, dc->dc_srate);
}
else
- *sig = uout->o_signal = signal_new(dc->dc_vecsize, dc->dc_srate);
+ *sig = uout->o_signal = signal_new(dc->dc_vecsize, dc->dc_calcsize, dc->dc_srate);
(*sig)->s_refcount = uout->o_nconnect;
}
/* now call the DSP scheduling routine for the ugen. This
@@ -874,7 +874,7 @@ void ugen_done_graph(t_dspcontext *dc)
t_block *blk;
t_dspcontext *parent_context = dc->dc_parentcontext;
t_float parent_srate;
- int parent_vecsize;
+ int parent_vecsize, parent_calcsize;
int period, frequency, phase, vecsize, calcsize;
t_float srate;
int chainblockbegin; /* DSP chain onset before block prolog code */
@@ -917,11 +917,13 @@ void ugen_done_graph(t_dspcontext *dc)
{
parent_srate = parent_context->dc_srate;
parent_vecsize = parent_context->dc_vecsize;
+ parent_calcsize = parent_context->dc_calcsize;
}
else
{
parent_srate = sys_getsr();
parent_vecsize = sys_getblksize();
+ parent_calcsize = parent_vecsize;
}
if (blk)
{
@@ -987,7 +989,7 @@ void ugen_done_graph(t_dspcontext *dc)
if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom)
{
signal_setborrowed(*sigp,
- signal_new(parent_vecsize, parent_srate));
+ signal_new(parent_vecsize, parent_calcsize, parent_srate));
(*sigp)->s_refcount++;
if (ugen_loud) post("set %lx->%lx", *sigp,
@@ -1068,7 +1070,7 @@ void ugen_done_graph(t_dspcontext *dc)
{
if ((*sigp)->s_isborrowed && !(*sigp)->s_borrowedfrom)
{
- t_signal *s3 = signal_new(parent_vecsize, parent_srate);
+ t_signal *s3 = signal_new(parent_vecsize, parent_calcsize, parent_srate);
signal_setborrowed(*sigp, s3);
(*sigp)->s_refcount++;
dsp_add_zero(s3->s_vec, s3->s_n);
--
1.7.10.4
--------------080901050800050202020003--
More information about the Pd-dev
mailing list