📄 iup.c
字号:
n = c_shift[i];
cs_factor[0][i] = ((INT32)tmp * sf_table[mac_load(6)]) >> n;
cs_factor[1][i] = ((INT32)tmp * sf_table[mac_load(6)]) >> n;
cs_factor[2][i] = ((INT32)tmp * sf_table[mac_load(6)]) >> n;
goto dispatch;
case 1: /* 2 factors 002 */
mac_load_check(12);
tmp = c_value[i];
n = c_shift[i];
cs_factor[1][i] = cs_factor[0][i] =
((INT32)tmp * sf_table[mac_load(6)]) >> n;
cs_factor[2][i] = ((INT32)tmp * sf_table[mac_load(6)]) >> n;
goto dispatch;
case 2: /* 1 factor 000 */
mac_load_check(6);
tmp = c_value[i];
n = c_shift[i];
cs_factor[2][i] = cs_factor[1][i] = cs_factor[0][i] =
((INT32)tmp * sf_table[mac_load(6)]) >> n;
goto dispatch;
case 3: /* 2 factors 022 */
mac_load_check(12);
tmp = c_value[i];
n = c_shift[i];
cs_factor[0][i] = ((INT32)tmp * sf_table[mac_load(6)]) >> n;
cs_factor[2][i] = cs_factor[1][i] =
((INT32)tmp * sf_table[mac_load(6)]) >> n;
goto dispatch;
case 4: /* no allo */
goto dispatch;
case 5: /* all done */
;
} /* end switch */
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*--- unpack multiply note ------------------------------------------------*/
/*--- 16bit x 16bit mult --> 32bit or better required---------------------*/
#define UNPACK_N(n) \
s[k] = ((cs_factor[i][k]*(load(n)-((1 << (n-1)) -1)))>>(n-1)); \
s[k+64] = ((cs_factor[i][k]*(load(n)-((1 << (n-1)) -1)))>>(n-1)); \
s[k+128] = ((cs_factor[i][k]*(load(n)-((1 << (n-1)) -1)))>>(n-1)); \
goto dispatch;
#define UNPACK_N2(n) \
mac_load_check(3*n); \
s[k] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
s[k+64] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
s[k+128] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
goto dispatch;
#define UNPACK_N3(n) \
mac_load_check(2*n); \
s[k] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
s[k+64] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
mac_load_check(n); \
s[k+128] = (cs_factor[i][k]*(mac_load(n)-((1 << (n-1)) -1)))>>(n-1); \
goto dispatch;
#define UNPACKJ_N(n) \
tmp = (load(n)-((1 << (n-1)) -1)); \
s[k] = (cs_factor[i][k]*tmp)>>(n-1); \
s[k+1] = (cs_factor[i][k+1]*tmp)>>(n-1); \
tmp = (load(n)-((1 << (n-1)) -1)); \
s[k+64] = (cs_factor[i][k]*tmp)>>(n-1); \
s[k+64+1] = (cs_factor[i][k+1]*tmp)>>(n-1); \
tmp = (load(n)-((1 << (n-1)) -1)); \
s[k+128] = (cs_factor[i][k]*tmp)>>(n-1); \
s[k+128+1] = (cs_factor[i][k+1]*tmp)>>(n-1); \
k++; /* skip right chan dispatch */ \
goto dispatch;
/*-------------------------------------------------------------------------*/
static void unpack_samp() /* unpack samples */
{
int i, j, k;
SAMPLEINT *s;
int n;
INT32 tmp;
s = sample;
for (i = 0; i < 3; i++)
{ /* 3 groups of scale factors */
for (j = 0; j < 4; j++)
{
k = -1;
dispatch:switch (samp_dispatch[++k])
{
case 0:
s[k + 128] = s[k + 64] = s[k] = 0;
goto dispatch;
case 1: /* 3 levels grouped 5 bits */
mac_load_check(5);
n = mac_load(5);
s[k] = ((INT32) cs_factor[i][k] * group3_table[n][0]) >> 1;
s[k + 64] = ((INT32) cs_factor[i][k] * group3_table[n][1]) >> 1;
s[k + 128] = ((INT32) cs_factor[i][k] * group3_table[n][2]) >> 1;
goto dispatch;
case 2: /* 5 levels grouped 7 bits */
mac_load_check(7);
n = mac_load(7);
s[k] = ((INT32) cs_factor[i][k] * group5_table[n][0]) >> 2;
s[k + 64] = ((INT32) cs_factor[i][k] * group5_table[n][1]) >> 2;
s[k + 128] = ((INT32) cs_factor[i][k] * group5_table[n][2]) >> 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] = ((INT32) cs_factor[i][k] * group9_table[n][0]) >> 3;
s[k + 64] = ((INT32) cs_factor[i][k] * group9_table[n][1]) >> 3;
s[k + 128] = ((INT32) cs_factor[i][k] * group9_table[n][2]) >> 3;
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;
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 1: /* 3 levels grouped 5 bits */
n = load(5);
s[k] = ((INT32) cs_factor[i][k] * group3_table[n][0]) >> 1;
s[k + 1] = ((INT32) cs_factor[i][k + 1] * group3_table[n][0]) >> 1;
s[k + 64] = ((INT32) cs_factor[i][k] * group3_table[n][1]) >> 1;
s[k + 64 + 1] = ((INT32) cs_factor[i][k + 1] * group3_table[n][1]) >> 1;
s[k + 128] = ((INT32) cs_factor[i][k] * group3_table[n][2]) >> 1;
s[k + 128 + 1] = ((INT32) cs_factor[i][k + 1] * group3_table[n][2]) >> 1;
k++; /* skip right chan dispatch */
goto dispatch;
case 18 + 2: /* 5 levels grouped 7 bits */
n = load(7);
s[k] = ((INT32) cs_factor[i][k] * group5_table[n][0]) >> 2;
s[k + 1] = ((INT32) cs_factor[i][k + 1] * group5_table[n][0]) >> 2;
s[k + 64] = ((INT32) cs_factor[i][k] * group5_table[n][1]) >> 2;
s[k + 64 + 1] = ((INT32) cs_factor[i][k + 1] * group5_table[n][1]) >> 2;
s[k + 128] = ((INT32) cs_factor[i][k] * group5_table[n][2]) >> 2;
s[k + 128 + 1] = ((INT32) cs_factor[i][k + 1] * group5_table[n][2]) >> 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(10);
s[k] = ((INT32) cs_factor[i][k] * group9_table[n][0]) >> 3;
s[k + 1] = ((INT32) cs_factor[i][k + 1] * group9_table[n][0]) >> 3;
s[k + 64] = ((INT32) cs_factor[i][k] * group9_table[n][1]) >> 3;
s[k + 64 + 1] = ((INT32) cs_factor[i][k + 1] * group9_table[n][1]) >> 3;
s[k + 128] = ((INT32) cs_factor[i][k] * group9_table[n][2]) >> 3;
s[k + 128 + 1] = ((INT32) cs_factor[i][k + 1] * group9_table[n][2]) >> 3;
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(bit_skip);
case 36:
s += 3 * 64;
} /* end switch */
} /* end j loop */
} /* end i loop */
}
/*-------------------------------------------------------------------------*/
static void unpack()
{
int prot;
/* at entry bit getter points at id, sync skipped by caller */
load(3); /* skip id and option (checked by init) */
prot = load(1); /* load prot bit */
load(6); /* skip to pad */
pad = load(1);
load(1); /* skip to mode */
stereo_sb = look_joint[load(4)];
if (prot)
load(4); /* skip to data */
else
load(20); /* skip crc */
unpack_ba(); /* unpack bit allocation */
unpack_sfs(); /* unpack scale factor selectors */
unpack_sf(); /* unpack scale factor */
unpack_samp(); /* unpack samples */
}
/*-------------------------------------------------------------------------*/
IN_OUT i_audio_decode(unsigned char *bs, signed short *pcm)
{
int sync;
IN_OUT in_out;
load_init(bs); /* initialize bit getter */
/* test sync */
in_out.in_bytes = 0; /* assume fail */
in_out.out_bytes = 0;
sync = load(12);
if (sync != 0xFFF)
return in_out; /* sync fail */
/*-----------*/
unpack_routine();
sbt(sample, pcm, nsbt);
/*-----------*/
in_out.in_bytes = framebytes + pad;
in_out.out_bytes = outbytes;
return in_out;
}
/*-------------------------------------------------------------------------*/
#include "iupini.ch" /* initialization */
#include "iupL1.ch" /* Layer 1 */
/*-------------------------------------------------------------------------*/
/* ***********************************************************
* THIS PROGRAM IS PROVIDED "AS IS". TI MAKES NO WARRANTIES OR
* REPRESENTATIONS, EITHER EXPRESS, IMPLIED OR STATUTORY,
* INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR
* COMPLETENESS OF RESPONSES, RESULTS AND LACK OF NEGLIGENCE.
* TI DISCLAIMS ANY WARRANTY OF TITLE, QUIET ENJOYMENT, QUIET
* POSSESSION, AND NON-INFRINGEMENT OF ANY THIRD PARTY
* INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE PROGRAM OR
* YOUR USE OF THE PROGRAM.
*
* IN NO EVENT SHALL TI BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
* CONSEQUENTIAL OR INDIRECT DAMAGES, HOWEVER CAUSED, ON ANY
* THEORY OF LIABILITY AND WHETHER OR NOT TI HAS BEEN ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGES, ARISING IN ANY WAY OUT
* OF THIS AGREEMENT, THE PROGRAM, OR YOUR USE OF THE PROGRAM.
* EXCLUDED DAMAGES INCLUDE, BUT ARE NOT LIMITED TO, COST OF
* REMOVAL OR REINSTALLATION, COMPUTER TIME, LABOR COSTS, LOSS
* OF GOODWILL, LOSS OF PROFITS, LOSS OF SAVINGS, OR LOSS OF
* USE OR INTERRUPTION OF BUSINESS. IN NO EVENT WILL TI'S
* AGGREGATE LIABILITY UNDER THIS AGREEMENT OR ARISING OUT OF
* YOUR USE OF THE PROGRAM EXCEED FIVE HUNDRED DOLLARS
* (U.S.$500).
*
* Unless otherwise stated, the Program written and copyrighted
* by Texas Instruments is distributed as "freeware". You may,
* only under TI's copyright in the Program, use and modify the
* Program without any charge or restriction. You may
* distribute to third parties, provided that you transfer a
* copy of this license to the third party and the third party
* agrees to these terms by its first use of the Program. You
* must reproduce the copyright notice and any other legend of
* ownership on each copy or partial copy, of the Program.
*
* You acknowledge and agree that the Program contains
* copyrighted material, trade secrets and other TI proprietary
* information and is protected by copyright laws,
* international copyright treaties, and trade secret laws, as
* well as other intellectual property laws. To protect TI's
* rights in the Program, you agree not to decompile, reverse
* engineer, disassemble or otherwise translate any object code
* versions of the Program to a human-readable form. You agree
* that in no event will you alter, remove or destroy any
* copyright notice included in the Program. TI reserves all
* rights not specifically granted under this license. Except
* as specifically provided herein, nothing in this agreement
* shall be construed as conferring by implication, estoppel,
* or otherwise, upon you, any license or other right under any
* TI patents, copyrights or trade secrets.
*
* You may not use the Program in non-TI devices.
* ********************************************************* */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -