14#define EEL_DCT_MINBITLEN 5
15#define EEL_DCT_MAXBITLEN 12
18#define PI 3.1415926535897932384626433832795
32 EEL_F pioverlen =
PI * 0.5 / (EEL_F)len;
33 for (
k = 0;
k < len / 2;
k ++)
37 for (
i = 0;
i < len;
i ++)
39 d +=
in[
i] * cos(pioverlen * (2.0 *
i + 1.0 + len * 0.5) * (2.0 *
k + 1.0));
48 EEL_F fourovern = 4.0 / (EEL_F)len;
49 EEL_F pioverlen =
PI * 0.5 / (EEL_F)len;
50 for (
k = 0;
k < len;
k ++)
54 for (
i = 0;
i < len / 2;
i ++)
56 d +=
in[
i] * cos(pioverlen * (2.0 *
k + 1.0 + len * 0.5) * (2 *
i + 1.0));
58 out[
k] = (EEL_F)(
d * fourovern);
66#define cPI3_8 .38268343236508977175
67#define cPI2_8 .70710678118654752441
68#define cPI1_8 .92387953251128675613
70#define FLOAT_CONV(x) ((EEL_F) ( x ))
71#define MULT_NORM(x) (x)
72#define HALVE(x) ((x)*.5f)
78 EEL_F r0 =
x[6] +
x[2];
79 EEL_F r1 =
x[6] -
x[2];
80 EEL_F
r2 =
x[4] +
x[0];
81 EEL_F r3 =
x[4] -
x[0];
102 EEL_F r0 =
x[1] -
x[9];
103 EEL_F r1 =
x[0] -
x[8];
137 EEL_F r0 =
x[30] -
x[14];
138 EEL_F r1 =
x[31] -
x[15];
204 EEL_F *x1 =
x + points - 8;
205 EEL_F *x2 =
x + (points >> 1) - 8;
215 x2[6] =
MULT_NORM(r1 * T[1] + r0 * T[0]);
216 x2[7] =
MULT_NORM(r1 * T[0] - r0 * T[1]);
222 x2[4] =
MULT_NORM(r1 * T[5] + r0 * T[4]);
223 x2[5] =
MULT_NORM(r1 * T[4] - r0 * T[5]);
229 x2[2] =
MULT_NORM(r1 * T[9] + r0 * T[8]);
230 x2[3] =
MULT_NORM(r1 * T[8] - r0 * T[9]);
236 x2[0] =
MULT_NORM(r1 * T[13] + r0 * T[12]);
237 x2[1] =
MULT_NORM(r1 * T[12] - r0 * T[13]);
252 EEL_F *x1 =
x + points - 8;
253 EEL_F *x2 =
x + (points >> 1) - 8;
263 x2[6] =
MULT_NORM(r1 * T[1] + r0 * T[0]);
264 x2[7] =
MULT_NORM(r1 * T[0] - r0 * T[1]);
272 x2[4] =
MULT_NORM(r1 * T[1] + r0 * T[0]);
273 x2[5] =
MULT_NORM(r1 * T[0] - r0 * T[1]);
281 x2[2] =
MULT_NORM(r1 * T[1] + r0 * T[0]);
282 x2[3] =
MULT_NORM(r1 * T[0] - r0 * T[1]);
290 x2[0] =
MULT_NORM(r1 * T[1] + r0 * T[0]);
291 x2[1] =
MULT_NORM(r1 * T[0] - r0 * T[1]);
304 EEL_F *T =
init->trig;
305 int stages =
init->log2n - 5;
312 for(
i = 1; --stages > 0;
i++) {
313 for(
j = 0;
j < (1 <<
i);
j++)
317 for(
j = 0;
j < points;
j += 32)
325 int *bit =
init->bitrev;
327 EEL_F *w1 =
x = w0 + (
n >> 1);
328 EEL_F *T =
init->trig +
n;
331 EEL_F *x0 =
x + bit[0];
332 EEL_F *x1 =
x + bit[1];
334 EEL_F r0 = x0[1] - x1[1];
335 EEL_F r1 = x0[0] + x1[0];
337 EEL_F r3 =
MULT_NORM(r1 * T[1] - r0 * T[0]);
341 r0 =
HALVE(x0[1] + x1[1]);
342 r1 =
HALVE(x0[0] - x1[0]);
357 r0 =
HALVE(x0[1] + x1[1]);
358 r1 =
HALVE(x0[0] - x1[0]);
383 while (cnt--) *outbuf++ = *inbuf++ * *
w++;
385 while (cnt--) *outbuf++ = *inbuf++ * *--
w;
393 EEL_F
c = (
PI / (EEL_F)
n);
397 if (!lookup)
return 0;
400 lookup->
window = (EEL_F *)calloc(
sizeof(EEL_F),
n / 2);
401 if (!lookup->
window)
return lookup;
403 for (
i = 0;
i <
n / 2;
i ++)
408 if (
n <= 32)
return lookup;
409 bitrev = (
int*)calloc(
sizeof(
int), (
n / 4));
411 if (!bitrev)
return lookup;
413 T = (EEL_F*)calloc(
sizeof(EEL_F), (
n +
n / 4));
415 if (!T)
return lookup;
418 log2n = lookup->
log2n = (
int)(log((
double)
n) / log(2.0) + 0.5);
422 for(
i = 0;
i <
n / 4;
i++) {
428 for(
i = 0;
i <
n / 8;
i++) {
436 int mask = (1 << (log2n - 1)) - 1,
j;
437 int msb = 1 << (log2n - 2);
438 for(
i = 0;
i <
n / 8;
i++) {
440 for(
j = 0; msb >>
j;
j++)
441 if((msb >>
j)&
i)acc |= 1 <<
j;
442 bitrev[
i * 2] = ((~acc)&
mask) - 1;
443 bitrev[
i * 2 + 1] = acc;
469 T = lookup->
trig + n4;
473 oX[0] =
MULT_NORM(-iX[2] * T[3] - iX[0] * T[2]);
474 oX[1] =
MULT_NORM (iX[0] * T[3] - iX[2] * T[2]);
475 oX[2] =
MULT_NORM(-iX[6] * T[1] - iX[4] * T[0]);
476 oX[3] =
MULT_NORM (iX[4] * T[1] - iX[6] * T[0]);
483 T = lookup->
trig + n4;
487 oX[0] =
MULT_NORM (iX[4] * T[3] + iX[6] * T[2]);
488 oX[1] =
MULT_NORM (iX[4] * T[2] - iX[6] * T[3]);
489 oX[2] =
MULT_NORM (iX[0] * T[1] + iX[2] * T[0]);
490 oX[3] =
MULT_NORM (iX[0] * T[0] - iX[2] * T[1]);
501 EEL_F *oX1 =
out + n2 + n4;
502 EEL_F *oX2 =
out + n2 + n4;
504 T = lookup->
trig + n2;
509 oX1[3] =
MULT_NORM (iX[0] * T[1] - iX[1] * T[0]);
510 oX2[0] = -
MULT_NORM (iX[0] * T[0] + iX[1] * T[1]);
512 oX1[2] =
MULT_NORM (iX[2] * T[3] - iX[3] * T[2]);
513 oX2[1] = -
MULT_NORM (iX[2] * T[2] + iX[3] * T[3]);
515 oX1[1] =
MULT_NORM (iX[4] * T[5] - iX[5] * T[4]);
516 oX2[2] = -
MULT_NORM (iX[4] * T[4] + iX[5] * T[5]);
518 oX1[0] =
MULT_NORM (iX[6] * T[7] - iX[7] * T[6]);
519 oX2[3] = -
MULT_NORM (iX[6] * T[6] + iX[7] * T[7]);
534 oX2[0] = -(oX1[3] = iX[3]);
535 oX2[1] = -(oX1[2] = iX[2]);
536 oX2[2] = -(oX1[1] = iX[1]);
537 oX2[3] = -(oX1[0] = iX[0]);
583 EEL_F *x0 =
in + n2 + n4;
585 EEL_F *T = lookup->
trig + n2;
589 for(
i = 0;
i < n8;
i += 2) {
601 for(;
i < n2 - n8;
i += 2) {
613 for(;
i < n2;
i += 2) {
629 T = lookup->
trig + n2;
632 for(
i = 0;
i < n4;
i++) {
644static void dct(EEL_F *
in, EEL_F *
out,
int len)
647 EEL_F wk = sqrt(2.0 / len);
648 EEL_F overtwolen = 0.5 / (EEL_F)len;
649 for (
k = 0;
k < len;
k ++)
653 for (
n = 0;
n < len;
n ++)
656 d +=
in[
n] * cos(
PI * (2.0 *
n + 1.0) * (EEL_F)
k * overtwolen);
658 if (!
k)
d /= sqrt(len);
665static void idct(EEL_F *
in, EEL_F *
out,
int len)
668 EEL_F dd0 = 1.0 / sqrt(len);
669 EEL_F dd1 = sqrt(2.0 / len);
670 EEL_F overtwolen = 0.5 / len;
671 for (
n = 0;
n < len;
n ++)
675 for (
k = 0;
k < len;
k ++)
678 if (!
k) dd = dd0 *
in[
k];
679 else dd = dd1 *
in[
k];
680 d += dd * cos(
PI * (2.0 *
n + 1.0) *
k * overtwolen);
730 if (!mdct_ctxs[bidx])
733 if (!mdct_ctxs[bidx])
774#ifdef EEL_WANT_DOCUMENTATION
775static const char *eel_mdct_function_reference =
776"mdct\tbuffer,length\tPerforms a windowed modified DCT, taking length inputs and producing length/2 outputs. buffer must not cross a 65,536 item boundary, and length must be 64, 128, 256, 512, 2048 or 4096.\0"
777"imdct\tbuffer,length\tPerforms a windowed inverse modified DCT, taking length/2 inputs and producing length outputs. buffer must not cross a 65,536 item boundary, and length must be 64, 128, 256, 512, 2048 or 4096.\0"
static const unsigned long mask[]
Definition bitwise.c:31
UINT_D64 w
Definition inflate.c:942
int * l
Definition inflate.c:1579
register unsigned k
Definition inflate.c:946
register unsigned j
Definition inflate.c:1576
unsigned d
Definition inflate.c:940
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
#define NSEEL_addfunc_retptr(name, np, pproc, fptr)
Definition eel_import.h:55
void *(* NSEEL_PProc_RAM)(void *data, int data_size, struct _compileContext *ctx)
Definition eel_import.h:39
static EEL_F *NSEEL_CGEN_CALL megabuf_imdct(EEL_F **blocks, EEL_F *start, EEL_F *length)
Definition eel_mdct.h:763
static void megabuf_mdct_apply_window(void *init, EEL_F *inbuf, EEL_F *outbuf)
Definition eel_mdct.h:372
static void mdct_bitreverse(mdct_lookup *init, EEL_F *x)
Definition eel_mdct.h:322
static void mdct_butterfly_first(EEL_F *T, EEL_F *x, int points)
Definition eel_mdct.h:200
static void mdct_butterfly_32(EEL_F *x)
Definition eel_mdct.h:136
static void mdct_butterfly_generic(EEL_F *T, EEL_F *x, int points, int trigint)
Definition eel_mdct.h:247
#define PI
Definition eel_mdct.h:18
#define EEL_DCT_MAXBITLEN
Definition eel_mdct.h:15
static void megabuf_mdct_backward(void *init, EEL_F *in, EEL_F *out)
Definition eel_mdct.h:451
static void megabuf_mdct_forward(void *init, EEL_F *in, EEL_F *out)
Definition eel_mdct.h:557
#define HALVE(x)
Definition eel_mdct.h:72
static EEL_F *NSEEL_CGEN_CALL megabuf_mdct(EEL_F **blocks, EEL_F *start, EEL_F *length)
Definition eel_mdct.h:758
static void imdct(EEL_F *in, EEL_F *out, int len)
Definition eel_mdct.h:45
static EEL_F *NSEEL_CGEN_CALL mdct_func(int dir, EEL_F **blocks, EEL_F *start, EEL_F *length)
Definition eel_mdct.h:692
static void mdct_butterfly_16(EEL_F *x)
Definition eel_mdct.h:101
#define EEL_DCT_MINBITLEN
Definition eel_mdct.h:14
static void mdct(EEL_F *in, EEL_F *out, int len)
Definition eel_mdct.h:29
static void mdct_butterflies(mdct_lookup *init, EEL_F *x, int points)
Definition eel_mdct.h:300
static void * megabuf_mdct_init(int n)
Definition eel_mdct.h:390
static void mdct_butterfly_8(EEL_F *x)
Definition eel_mdct.h:77
#define FLOAT_CONV(x)
Definition eel_mdct.h:70
void EEL_mdct_register()
Definition eel_mdct.h:768
#define MULT_NORM(x)
Definition eel_mdct.h:71
static void r2(register WDL_FFT_REAL *a)
Definition fft.c:1089
virtual ASIOError start()=0
float in
Definition lilv_test.c:1460
float out
Definition lilv_test.c:1461
#define cPI1_8
Definition mdct.h:46
#define cPI3_8
Definition mdct.h:44
#define cPI2_8
Definition mdct.h:45
EEL_F *NSEEL_CGEN_CALL __NSEEL_RAMAlloc(EEL_F **blocks, unsigned int w)
Definition nseel-ram.c:139
EEL_F nseel_ramalloc_onfail
Definition nseel-ram.c:92
#define NSEEL_CGEN_CALL
Definition ns-eel.h:44
#define NSEEL_RAM_ITEMSPERBLOCK
Definition ns-eel.h:235
png_uint_32 length
Definition png.c:2247
int log2n
Definition mdct.h:57
int n
Definition mdct.h:56
DATA_TYPE scale
Definition mdct.h:62
int * bitrev
Definition mdct.h:60
EEL_F * window
Definition eel_mdct.h:26
DATA_TYPE * trig
Definition mdct.h:59
int n
Definition crypt.c:458
uch * p
Definition crypt.c:594
return c
Definition crypt.c:175
typedef int(UZ_EXP MsgFn)()
void NSEEL_HOSTSTUB_LeaveMutex()
Definition ysfx_api_eel.cpp:142
void NSEEL_HOSTSTUB_EnterMutex()
Definition ysfx_api_eel.cpp:138