47static const char SFLenTab[16][2] = {
88 slen1 = (int)SFLenTab[sis->sfCompress][1];
90 if (sis->blockType == 2) {
92 if (sis->mixedBlock) {
94 for (sfb = 0; sfb < 8; sfb++)
95 sfis->l[sfb] = (
char)
GetBits(bsi, slen0);
102 for ( ; sfb < 6; sfb++) {
103 sfis->s[sfb][0] = (char)
GetBits(bsi, slen0);
104 sfis->s[sfb][1] = (char)
GetBits(bsi, slen0);
105 sfis->s[sfb][2] = (char)
GetBits(bsi, slen0);
108 for ( ; sfb < 12; sfb++) {
109 sfis->s[sfb][0] = (char)
GetBits(bsi, slen1);
110 sfis->s[sfb][1] = (char)
GetBits(bsi, slen1);
111 sfis->s[sfb][2] = (char)
GetBits(bsi, slen1);
115 sfis->s[12][0] = sfis->s[12][1] = sfis->s[12][2] = 0;
120 for (sfb = 0; sfb < 11; sfb++)
121 sfis->l[sfb] = (
char)
GetBits(bsi, slen0);
122 for (sfb = 11; sfb < 21; sfb++)
123 sfis->l[sfb] = (
char)
GetBits(bsi, slen1);
131 if(scfsi[0])
for( ; sfb < 6 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
132 else for( ; sfb < 6 ; sfb++) sfis->l[sfb] = (
char)
GetBits(bsi, slen0);
133 if(scfsi[1])
for( ; sfb <11 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
134 else for( ; sfb <11 ; sfb++) sfis->l[sfb] = (
char)
GetBits(bsi, slen0);
135 if(scfsi[2])
for( ; sfb <16 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
136 else for( ; sfb <16 ; sfb++) sfis->l[sfb] = (
char)
GetBits(bsi, slen1);
137 if(scfsi[3])
for( ; sfb <21 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
138 else for( ; sfb <21 ; sfb++) sfis->l[sfb] = (
char)
GetBits(bsi, slen1);
156static const char NRTab[6][3][4] = {
211 int i, sfb, sfcIdx, btIdx, nrIdx;
213 int sfCompress, preFlag, intensityScale;
220 if (! ((modeExt & 0x01) && (ch == 1)) ) {
222 if (sfCompress < 400) {
224 slen[0] = (sfCompress >> 4) / 5;
225 slen[1]= (sfCompress >> 4) % 5;
226 slen[2]= (sfCompress & 0x0f) >> 2;
227 slen[3]= (sfCompress & 0x03);
229 }
else if (sfCompress < 500) {
232 slen[0] = (sfCompress >> 2) / 5;
233 slen[1]= (sfCompress >> 2) % 5;
234 slen[2]= (sfCompress & 0x03);
240 slen[0] = sfCompress / 3;
241 slen[1] = sfCompress % 3;
242 slen[2] = slen[3] = 0;
253 intensityScale = sfCompress & 0x01;
255 if (sfCompress < 180) {
257 slen[0] = (sfCompress / 36);
258 slen[1] = (sfCompress % 36) / 6;
259 slen[2] = (sfCompress % 36) % 6;
262 }
else if (sfCompress < 244) {
265 slen[0] = (sfCompress & 0x3f) >> 4;
266 slen[1] = (sfCompress & 0x0f) >> 2;
267 slen[2] = (sfCompress & 0x03);
273 slen[0] = (sfCompress / 3);
274 slen[1] = (sfCompress % 3);
275 slen[2] = slen[3] = 0;
284 for (i = 0; i < 4; i++)
285 nr[i] = (
int)NRTab[sfcIdx][btIdx][i];
288 if( (modeExt & 0x01) && (ch == 1) ) {
289 for (i = 0; i < 4; i++) {
290 sfjs->
slen[i] = slen[i];
301 for (sfb=0; sfb < 6; sfb++) {
302 sfis->
l[sfb] = (char)
GetBits(bsi, slen[0]);
313 for ( ; nrIdx <= 3; nrIdx++) {
314 for (i=0; i < nr[nrIdx]; i++, sfb++) {
315 sfis->
s[sfb][0] = (char)
GetBits(bsi, slen[nrIdx]);
316 sfis->
s[sfb][1] = (char)
GetBits(bsi, slen[nrIdx]);
317 sfis->
s[sfb][2] = (char)
GetBits(bsi, slen[nrIdx]);
321 sfis->
s[12][0] = sfis->
s[12][1] = sfis->
s[12][2] = 0;
325 for (nrIdx = 0; nrIdx <= 3; nrIdx++) {
326 for(i=0; i < nr[nrIdx]; i++, sfb++) {
327 sfis->
l[sfb] = (char)
GetBits(bsi, slen[nrIdx]);
331 sfis->
l[21] = sfis->
l[22] = 0;
355 unsigned char *startBuf;
370 bsi = &bitStreamInfo;
376 UnpackSFMPEG1(bsi, &si->
sis[gr][ch], &sfi->
sfis[gr][ch], si->
scfsi[ch], gr, &sfi->
sfis[0][ch]);
378 UnpackSFMPEG2(bsi, &si->
sis[gr][ch], &sfi->
sfis[gr][ch], gr, ch, fh->
modeExt, &sfi->
sfjs);
383 buf += (bitsUsed + *bitOffset) >> 3;
384 *bitOffset = (bitsUsed + *bitOffset) & 0x07;
386 return (
int)(buf - startBuf);
#define SetBitstreamPointer
#define UnpackScaleFactors
int part23Length[MAX_NGRAN][MAX_NCHAN]
ScaleFactorInfoSub sfis[MAX_NGRAN][MAX_NCHAN]
int scfsi[MAX_NCHAN][MAX_SCFBD]
SideInfoSub sis[MAX_NGRAN][MAX_NCHAN]