📄 cup.c
字号:
int i;
i = -1;
dispatch:switch (m->cup.sf_dispatch[++i])
{
case 0: /* 3 factors 012 */
mac_load_check(18);
m->cup.cs_factor[0][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
m->cup.cs_factor[1][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
m->cup.cs_factor[2][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
goto dispatch;
case 1: /* 2 factors 002 */
mac_load_check(12);
m->cup.cs_factor[1][i] = m->cup.cs_factor[0][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
m->cup.cs_factor[2][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
goto dispatch;
case 2: /* 1 factor 000 */
mac_load_check(6);
m->cup.cs_factor[2][i] = m->cup.cs_factor[1][i] = m->cup.cs_factor[0][i] =
m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
goto dispatch;
case 3: /* 2 factors 022 */
mac_load_check(12);
m->cup.cs_factor[0][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
m->cup.cs_factor[2][i] = m->cup.cs_factor[1][i] = m->cup.c_value[i] * m->cup.sf_table[mac_load(6)];
goto dispatch;
case 4: /* no allo */
/*-- m->cup.cs_factor[2][i] = m->cup.cs_factor[1][i] = m->cup.cs_factor[0][i] = 0.0; --*/
goto dispatch;
case 5: /* all done */
;
} /* end switch */
}
/*-------------------------------------------------------------------------*/
#define UNPACK_N(n) s[k] = m->cup.cs_factor[i][k]*(load(m,n)-((1 << (n-1)) -1)); \
s[k+64] = m->cup.cs_factor[i][k]*(load(m,n)-((1 << (n-1)) -1)); \
s[k+128] = m->cup.cs_factor[i][k]*(load(m,n)-((1 << (n-1)) -1)); \
goto dispatch;
#define UNPACK_N2(n) mac_load_check(3*n); \
s[k] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
s[k+64] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
s[k+128] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
goto dispatch;
#define UNPACK_N3(n) mac_load_check(2*n); \
s[k] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
s[k+64] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
mac_load_check(n); \
s[k+128] = m->cup.cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)); \
goto dispatch;
#define UNPACKJ_N(n) tmp = (load(m,n)-((1 << (n-1)) -1)); \
s[k] = m->cup.cs_factor[i][k]*tmp; \
s[k+1] = m->cup.cs_factor[i][k+1]*tmp; \
tmp = (load(m,n)-((1 << (n-1)) -1)); \
s[k+64] = m->cup.cs_factor[i][k]*tmp; \
s[k+64+1] = m->cup.cs_factor[i][k+1]*tmp; \
tmp = (load(m,n)-((1 << (n-1)) -1)); \
s[k+128] = m->cup.cs_factor[i][k]*tmp; \
s[k+128+1] = m->cup.cs_factor[i][k+1]*tmp; \
k++; /* skip right chan dispatch */ \
goto dispatch;
/*-------------------------------------------------------------------------*/
static void unpack_samp(MPEG *m) /* unpack samples */
{
int i, j, k;
float *s;
int n;
long tmp;
s = m->cup.sample;
for (i = 0; i < 3; i++)
{ /* 3 groups of scale factors */
for (j = 0; j < 4; j++)
{
k = -1;
dispatch:switch (m->cup.samp_dispatch[++k])
{
case 0:
s[k + 128] = s[k + 64] = s[k] = 0.0F;
goto dispatch;
case 1: /* 3 levels grouped 5 bits */
mac_load_check(5);
n = mac_load(5);
s[k] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][2];
goto dispatch;
case 2: /* 5 levels grouped 7 bits */
mac_load_check(7);
n = mac_load(7);
s[k] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][2];
goto dispatch;
case 3:
UNPACK_N2(3) /* 7 levels */
case 4: /* 9 levels grouped 10 bits */
mac_load_check(10);
n = mac_load(10);
s[k] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][2];
goto dispatch;
case 5:
UNPACK_N2(4) /* 15 levels */
case 6:
UNPACK_N2(5) /* 31 levels */
case 7:
UNPACK_N2(6) /* 63 levels */
case 8:
UNPACK_N2(7) /* 127 levels */
case 9:
UNPACK_N2(8) /* 255 levels */
case 10:
UNPACK_N3(9) /* 511 levels */
case 11:
UNPACK_N3(10) /* 1023 levels */
case 12:
UNPACK_N3(11) /* 2047 levels */
case 13:
UNPACK_N3(12) /* 4095 levels */
case 14:
UNPACK_N(13) /* 8191 levels */
case 15:
UNPACK_N(14) /* 16383 levels */
case 16:
UNPACK_N(15) /* 32767 levels */
case 17:
UNPACK_N(16) /* 65535 levels */
/* -- joint ---- */
case 18 + 0:
s[k + 128 + 1] = s[k + 128] = s[k + 64 + 1] = s[k + 64] = s[k + 1] = s[k] = 0.0F;
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 1: /* 3 levels grouped 5 bits */
n = load(m,5);
s[k] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][0];
s[k + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group3_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][1];
s[k + 64 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group3_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group3_table[n][2];
s[k + 128 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group3_table[n][2];
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 2: /* 5 levels grouped 7 bits */
n = load(m,7);
s[k] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][0];
s[k + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group5_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][1];
s[k + 64 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group5_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group5_table[n][2];
s[k + 128 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group5_table[n][2];
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 3:
UNPACKJ_N(3) /* 7 levels */
case 18 + 4: /* 9 levels grouped 10 bits */
n = load(m,10);
s[k] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][0];
s[k + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group9_table[n][0];
s[k + 64] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][1];
s[k + 64 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group9_table[n][1];
s[k + 128] = m->cup.cs_factor[i][k] * m->cup.group9_table[n][2];
s[k + 128 + 1] = m->cup.cs_factor[i][k + 1] * m->cup.group9_table[n][2];
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 5:
UNPACKJ_N(4) /* 15 levels */
case 18 + 6:
UNPACKJ_N(5) /* 31 levels */
case 18 + 7:
UNPACKJ_N(6) /* 63 levels */
case 18 + 8:
UNPACKJ_N(7) /* 127 levels */
case 18 + 9:
UNPACKJ_N(8) /* 255 levels */
case 18 + 10:
UNPACKJ_N(9) /* 511 levels */
case 18 + 11:
UNPACKJ_N(10) /* 1023 levels */
case 18 + 12:
UNPACKJ_N(11) /* 2047 levels */
case 18 + 13:
UNPACKJ_N(12) /* 4095 levels */
case 18 + 14:
UNPACKJ_N(13) /* 8191 levels */
case 18 + 15:
UNPACKJ_N(14) /* 16383 levels */
case 18 + 16:
UNPACKJ_N(15) /* 32767 levels */
case 18 + 17:
UNPACKJ_N(16) /* 65535 levels */
/* -- end of dispatch -- */
case 37:
skip(m, m->cup.bit_skip);
case 36:
s += 3 * 64;
} /* end switch */
} /* end j loop */
} /* end i loop */
}
/*-------------------------------------------------------------------------*/
IN_OUT audio_decode(MPEG *m, unsigned char *bs, signed short *pcm)
{
return m->cup.audio_decode_routine(m, bs, pcm);
}
/*-------------------------------------------------------------------------*/
IN_OUT L2audio_decode(void *mv, unsigned char *bs, signed short *pcm)
{
MPEG *m = mv;
int sync, prot;
IN_OUT in_out;
load_init(m, bs); /* initialize bit getter */
/* test sync */
in_out.in_bytes = 0; /* assume fail */
in_out.out_bytes = 0;
sync = load(m,12);
if (sync != 0xFFF)
return in_out; /* sync fail */
load(m,3); /* skip id and option (checked by init) */
prot = load(m,1); /* load prot bit */
load(m,6); /* skip to pad */
m->cup.pad = load(m,1);
load(m,1); /* skip to mode */
m->cup.stereo_sb = look_joint[load(m,4)];
if (prot)
load(m,4); /* skip to data */
else
load(m,20); /* skip crc */
unpack_ba(m); /* unpack bit allocation */
unpack_sfs(m); /* unpack scale factor selectors */
unpack_sf(m); /* unpack scale factor */
unpack_samp(m); /* unpack samples */
m->cup.sbt(m, m->cup.sample, pcm, 36);
/*-----------*/
in_out.in_bytes = m->cup.framebytes + m->cup.pad;
in_out.out_bytes = m->cup.outbytes;
return in_out;
}
/*-------------------------------------------------------------------------*/
#include "cupini.c" /* initialization */
#include "cupL1.c" /* Layer I */
/*-------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -