Math-DCT
view release on metacpan or search on metacpan
for (x = 0; x < size*size; x+=size) {
fast_dct_1d_precalc((char *)&input[x], size, coef);
}
for (x = 0; x < size; x++) {
k = x * size;
for (y = 0; y < size; y++) {
temp[y*size+x]=input[k++];
}
}
for (y = 0; y < size*size; y+=size) {
fast_dct_1d_precalc((char *)&temp[y], size, coef);
}
for (x = 0; x < size; x++) {
k = x * size;
for (y = 0; y < size; y++) {
input[y*size+x]=temp[k++];
}
}
}
void transform_recursive(double input[], double temp[], int size, double coef[]) {
if (size == 1)
return;
int i,j;
int half = size / 2;
for (i = 0; i < half; i++) {
double x = input[i];
double y = input[size-1-i];
temp[i] = x+y;
temp[i+half] = (x-y)/coef[half+i];
}
transform_recursive(temp, input, half, coef);
transform_recursive(&temp[half], input, half, coef);
j = 0;
for (i = 0; i < half-1; i++) {
input[j++] = temp[i];
input[j++] = temp[i+half] + temp[i+half+1];
}
input[size-2] = temp[half-1];
input[size-1] = temp[size-1];
}
MODULE = Math::DCT PACKAGE = Math::DCT
PROTOTYPES: DISABLE
void
fct8_1d (inbuf)
char * inbuf
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
fct8_1d(inbuf);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
fct8_2d (inbuf)
char * inbuf
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
fct8_2d(inbuf);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
dct_1d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
dct_1d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
idct_1d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
idct_1d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
dct_2d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
dct_2d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
idct_2d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
idct_2d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
fast_dct_1d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
fast_dct_1d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
void
fast_dct_2d (inbuf, size)
char * inbuf
int size
PREINIT:
I32* temp;
PPCODE:
temp = PL_markstack_ptr++;
fast_dct_2d(inbuf, size);
if (PL_markstack_ptr != temp) {
/* truly void, because dXSARGS not invoked */
PL_markstack_ptr = temp;
XSRETURN_EMPTY; /* return empty stack */
}
/* must have used dXSARGS; list context implied */
return; /* assume stack size is correct */
( run in 1.252 second using v1.01-cache-2.11-cpan-5511b514fd6 )