58static const char preTab[22] = { 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,2,3,3,3,2,0 };
67{ 0x00000000, 0x10000000, 0x285145f3, (
int32_t)0x453a5cdb,
68 0x0cb2ff53, 0x111989d6, 0x15ce31c8, 0x1ac7f203,
69 0x20000000, 0x257106b9, 0x2b16b4a3, (
int32_t)0x30ed74b4,
72{ 0x00000000, 0x0d744fcd, 0x21e71f26, (
int32_t)0x3a36abd9,
73 0x0aadc084, 0x0e610e6e, 0x12560c1d, 0x168523cf,
74 0x1ae89f99, 0x1f7c03a4, 0x243bae49, 0x29249c67,
77{ 0x00000000, 0x0b504f33, 0x1c823e07, (
int32_t)0x30f39a55,
78 0x08facd62, 0x0c176319, 0x0f6b3522, 0x12efe2ad,
79 0x16a09e66, 0x1a79a317, 0x1e77e301, 0x2298d5b4,
80 0x26da56fc, 0x2b3a902a, 0x2fb7e7e7, (
int32_t)0x3450f650, },
82{ 0x00000000, 0x09837f05, 0x17f910d7, 0x2929c7a9,
83 0x078d0dfa, 0x0a2ae661, 0x0cf73154, 0x0fec91cb,
84 0x1306fe0a, 0x16434a6c, 0x199ee595, 0x1d17ae3d,
85 0x20abd76a, 0x2459d551, 0x28204fbb, 0x2bfe1808, },
90 0x1428a2fa, 0x15db1bd6, 0x1796302c, 0x19598d85,
91 0x1b24e8bb, 0x1cf7fcfa, 0x1ed28af2, 0x20b4582a,
92 0x229d2e6e, 0x248cdb55, 0x26832fda, 0x28800000,
93 0x2a832287, 0x2c8c70a8, 0x2e9bc5d8, (
int32_t)0x30b0ff99,
119int pow2exp[8] = { 14, 13, 11, 10, 9, 7, 6, 5 };
256 int32_t cbEndL, cbStartS, cbEndS;
257 int32_t nSamps, nonZero, sfactMultiplier, gbMask;
263 if (sis->blockType == 2) {
264 if (sis->mixedBlock) {
265 cbEndL = (fh->ver ==
MPEG1 ? 8 : 6);
278 cbMax[2] = cbMax[1] = cbMax[0] = 0;
286 sfactMultiplier = 2 * (sis->sfactScale + 1);
292 globalGain = sis->globalGain;
293 if (fh->modeExt >> 1)
298 for (cb = 0; cb < cbEndL; cb++) {
301 nSamps = fh->sfBand->l[cb + 1] - fh->sfBand->l[cb];
302 gainI = 210 - globalGain + sfactMultiplier * (sfis->l[cb] + (sis->preFlag ? (int)
preTab[cb] : 0));
304 nonZero |=
DequantBlock(sampleBuf + i, sampleBuf + i, nSamps, gainI);
312 if (i >= *nonZeroBound)
318 cbi->cbEndL = cbMax[0];
319 cbi->cbEndS[0] = cbi->cbEndS[1] = cbi->cbEndS[2] = 0;
324 return CLZ(gbMask) - 1;
327 cbMax[2] = cbMax[1] = cbMax[0] = cbStartS;
328 for (cb = cbStartS; cb < cbEndS; cb++) {
330 nSamps = fh->sfBand->s[cb + 1] - fh->sfBand->s[cb];
331 for (w = 0; w < 3; w++) {
333 gainI = 210 - globalGain + 8*sis->subBlockGain[w] + sfactMultiplier*(sfis->s[cb][w]);
335 nonZero |=
DequantBlock(sampleBuf + i + nSamps*w, workBuf + nSamps*w, nSamps, gainI);
344 buf = (
ARRAY3 *)(sampleBuf + i);
346 for (j = 0; j < nSamps; j++) {
347 buf[j][0] = workBuf[0*nSamps + j];
348 buf[j][1] = workBuf[1*nSamps + j];
349 buf[j][2] = workBuf[2*nSamps + j];
354 if (i >= *nonZeroBound)
369 cbi->cbType = (sis->mixedBlock ? 2 : 1);
371 cbi->cbEndS[0] = cbMax[0];
372 cbi->cbEndS[1] = cbMax[1];
373 cbi->cbEndS[2] = cbMax[2];
375 cbi->cbEndSMax = cbMax[0];
376 cbi->cbEndSMax =
MAX(cbi->cbEndSMax, cbMax[1]);
377 cbi->cbEndSMax =
MAX(cbi->cbEndSMax, cbMax[2]);
379 return CLZ(gbMask) - 1;
fl::UISlider scale("Scale", 4,.1, 4,.1)
int32_t DequantChannel(int32_t *sampleBuf, int32_t *workBuf, int32_t *nonZeroBound, FrameHeader *fh, SideInfoSub *sis, ScaleFactorInfoSub *sfis, CriticalBandInfo *cbi) FL_NOEXCEPT