/* ofun -- piecewise-linear output-table mappings; inverse of xfun, yfun, zfun */ static fut_otbldat_t ofun (fut_gtbldat_t q, fut_calcData_p dataP) { double p, delta, neutralgrid; neutralgrid = ((fData_p) dataP)->neutralgrid; p = DEQUANT (q, FUT_GRD_MAXVAL); switch (((fData_p) dataP)->std.chan) { case 0: /* L* */ break; case 1: /* a */ case 2: /* b */ delta = p - neutralgrid; if (delta < 0.0) p = ((fData_p) dataP)->neutralInput * (p / neutralgrid); else p = 1.0 - (1.0 - ((fData_p) dataP)->neutralInput) * ((1.0 - p) / (1.0 - neutralgrid)); break; } return QUANT (p, FUT_MAX_PEL12); }
Void dequantizeBlock4x4(PixelI * pRec, Int * pOrg, const Int * pIndex, Int iQPLP) { Int i; for(i = 1; i < 16; i ++) pRec[pIndex[i]] = DEQUANT(pOrg[i], iQPLP); }
Void dequantizeBlock4x2(PixelI * pRec, Int * pOrg, Int iQPLP) { pRec[ 64] = DEQUANT(pOrg[1], iQPLP); pRec[ 16] = DEQUANT(pOrg[2], iQPLP); pRec[ 80] = DEQUANT(pOrg[3], iQPLP); pRec[ 32] = DEQUANT(pOrg[4], iQPLP); pRec[ 96] = DEQUANT(pOrg[5], iQPLP); pRec[ 48] = DEQUANT(pOrg[6], iQPLP); pRec[112] = DEQUANT(pOrg[7], iQPLP); }
Int dequantizeMacroblock(CWMImageStrCodec * pSC) { const COLORFORMAT cf = pSC->m_param.cfColorFormat; CWMIMBInfo *pMBInfo = &pSC->MBInfo; CWMITile * pTile = pSC->pTile + pSC->cTileColumn; const size_t iChannels = pSC->m_param.cNumChannels; size_t i; for(i = 0; i < iChannels; i ++){ //dequantize DC pSC->p1MBbuffer[i][0] = DEQUANT(pMBInfo->iBlockDC[i][0], pTile->pQuantizerDC[i]->iQP); // dequantize LP if(pSC->WMISCP.sbSubband != SB_DC_ONLY) if(i == 0 || (cf != YUV_422 && cf != YUV_420)) dequantizeBlock4x4(pSC->p1MBbuffer[i] , pMBInfo->iBlockDC[i], dctIndex[2], pTile->pQuantizerLP[i][pMBInfo->iQIndexLP].iQP); else if(cf == YUV_422) dequantizeBlock4x2(pSC->p1MBbuffer[i], pMBInfo->iBlockDC[i], pTile->pQuantizerLP[i][pMBInfo->iQIndexLP].iQP); else // 420 dequantizeBlock2x2(pSC->p1MBbuffer[i], pMBInfo->iBlockDC[i], pTile->pQuantizerLP[i][pMBInfo->iQIndexLP].iQP); } return ICERR_OK; }
Void dequantizeBlock2x2(PixelI * pRec, Int * pOrg, Int iQPLP) { pRec[32] = DEQUANT(pOrg[1], iQPLP); pRec[16] = DEQUANT(pOrg[2], iQPLP); pRec[48] = DEQUANT(pOrg[3], iQPLP); }