0,0 → 1,394 |
#include <math.h> |
|
/* "fdct.c" */ |
void fdct32(float *, float *); |
void fdct32_dual(float *, float *); |
void fdct32_dual_mono(float *, float *); |
void fdct16(float *, float *); |
void fdct16_dual(float *, float *); |
void fdct16_dual_mono(float *, float *); |
void fdct8(float *, float *); |
void fdct8_dual(float *, float *); |
void fdct8_dual_mono(float *, float *); |
|
/* "window.c" */ |
void window(float *vbuf, int vb_ptr, short *pcm); |
void window_dual(float *vbuf, int vb_ptr, short *pcm); |
void window16(float *vbuf, int vb_ptr, short *pcm); |
void window16_dual(float *vbuf, int vb_ptr, short *pcm); |
void window8(float *vbuf, int vb_ptr, short *pcm); |
void window8_dual(float *vbuf, int vb_ptr, short *pcm); |
|
/* circular window buffers */ |
int vb_ptr; |
int vb2_ptr; |
float vbuf[512]; |
float vbuf2[512]; |
|
void sbt_init() |
{ |
int i; |
|
/* clear window vbuf */ |
for (i = 0; i < 512; i++) |
{ |
vbuf[i] = 0.0F; |
vbuf2[i] = 0.0F; |
} |
vb2_ptr = vb_ptr = 0; |
} |
|
void sbt_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct32(sample, vbuf + vb_ptr); |
window(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 32; |
} |
|
} |
|
void sbt_dual(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct32_dual(sample, vbuf + vb_ptr); |
fdct32_dual(sample + 1, vbuf2 + vb_ptr); |
window_dual(vbuf, vb_ptr, pcm); |
window_dual(vbuf2, vb_ptr, pcm + 1); |
sample += 64; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 64; |
} |
} |
|
void sbt_dual_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct32_dual_mono(sample, vbuf + vb_ptr); |
window(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 32; |
} |
|
} |
|
void sbt_dual_left(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct32_dual(sample, vbuf + vb_ptr); |
window(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 32; |
} |
} |
|
void sbt_dual_right(float *sample, short *pcm, int n) |
{ |
int i; |
|
sample++; /* point to right chan */ |
for (i = 0; i < n; i++) |
{ |
fdct32_dual(sample, vbuf + vb_ptr); |
window(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 32; |
} |
} |
|
void sbt16_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct16(sample, vbuf + vb_ptr); |
window16(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 16; |
} |
} |
|
void sbt16_dual(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct16_dual(sample, vbuf + vb_ptr); |
fdct16_dual(sample + 1, vbuf2 + vb_ptr); |
window16_dual(vbuf, vb_ptr, pcm); |
window16_dual(vbuf2, vb_ptr, pcm + 1); |
sample += 64; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 32; |
} |
} |
|
void sbt16_dual_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct16_dual_mono(sample, vbuf + vb_ptr); |
window16(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 16; |
} |
} |
|
void sbt16_dual_left(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct16_dual(sample, vbuf + vb_ptr); |
window16(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 16; |
} |
} |
|
void sbt16_dual_right(float *sample, short *pcm, int n) |
{ |
int i; |
|
sample++; |
for (i = 0; i < n; i++) |
{ |
fdct16_dual(sample, vbuf + vb_ptr); |
window16(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 16; |
} |
} |
|
void sbt8_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct8(sample, vbuf + vb_ptr); |
window8(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 8; |
} |
|
} |
|
void sbt8_dual(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct8_dual(sample, vbuf + vb_ptr); |
fdct8_dual(sample + 1, vbuf2 + vb_ptr); |
window8_dual(vbuf, vb_ptr, pcm); |
window8_dual(vbuf2, vb_ptr, pcm + 1); |
sample += 64; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 16; |
} |
} |
|
void sbt8_dual_mono(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct8_dual_mono(sample, vbuf + vb_ptr); |
window8(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 8; |
} |
} |
|
void sbt8_dual_left(float *sample, short *pcm, int n) |
{ |
int i; |
|
for (i = 0; i < n; i++) |
{ |
fdct8_dual(sample, vbuf + vb_ptr); |
window8(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 8; |
} |
} |
|
void sbt8_dual_right(float *sample, short *pcm, int n) |
{ |
int i; |
|
sample++; |
for (i = 0; i < n; i++) |
{ |
fdct8_dual(sample, vbuf + vb_ptr); |
window8(vbuf, vb_ptr, pcm); |
sample += 64; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 8; |
} |
} |
|
void sbt_mono_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
ch = 0; |
for (i = 0; i < 18; i++) |
{ |
fdct32(sample, vbuf + vb_ptr); |
window(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 32; |
} |
|
} |
|
void sbt_dual_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
if (ch == 0) |
for (i = 0; i < 18; i++) { |
fdct32(sample, vbuf + vb_ptr); |
window_dual(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 32) & 511; |
pcm += 64; |
} |
else |
for (i = 0; i < 18; i++) { |
fdct32(sample, vbuf2 + vb2_ptr); |
window_dual(vbuf2, vb2_ptr, pcm + 1); |
sample += 32; |
vb2_ptr = (vb2_ptr - 32) & 511; |
pcm += 64; |
} |
} |
|
void sbt16_mono_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
ch = 0; |
for (i = 0; i < 18; i++) |
{ |
fdct16(sample, vbuf + vb_ptr); |
window16(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 16; |
} |
|
|
} |
|
void sbt16_dual_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
|
if (ch == 0) |
{ |
for (i = 0; i < 18; i++) |
{ |
fdct16(sample, vbuf + vb_ptr); |
window16_dual(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 16) & 255; |
pcm += 32; |
} |
} |
else |
{ |
for (i = 0; i < 18; i++) |
{ |
fdct16(sample, vbuf2 + vb2_ptr); |
window16_dual(vbuf2, vb2_ptr, pcm + 1); |
sample += 32; |
vb2_ptr = (vb2_ptr - 16) & 255; |
pcm += 32; |
} |
} |
|
} |
|
void sbt8_mono_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
ch = 0; |
for (i = 0; i < 18; i++) |
{ |
fdct8(sample, vbuf + vb_ptr); |
window8(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 8; |
} |
|
} |
|
void sbt8_dual_L3(float *sample, short *pcm, int ch) |
{ |
int i; |
|
if (ch == 0) |
{ |
for (i = 0; i < 18; i++) |
{ |
fdct8(sample, vbuf + vb_ptr); |
window8_dual(vbuf, vb_ptr, pcm); |
sample += 32; |
vb_ptr = (vb_ptr - 8) & 127; |
pcm += 16; |
} |
} |
else |
{ |
for (i = 0; i < 18; i++) |
{ |
fdct8(sample, vbuf2 + vb2_ptr); |
window8_dual(vbuf2, vb2_ptr, pcm + 1); |
sample += 32; |
vb2_ptr = (vb2_ptr - 8) & 127; |
pcm += 16; |
} |
} |
|
|
|
} |
|