Alien-FreeImage
view release on metacpan or search on metacpan
src/Source/LibJXR/image/decode/strdec.c view on Meta::CPAN
return ICERR_ERROR;
}
if (pSC->m_bSecondary) {
pSC->pIOHeader = pSC->m_pNextSC->pIOHeader;
pSC->m_ppBitIO = pSC->m_pNextSC->m_ppBitIO;
pSC->cNumBitIO = pSC->m_pNextSC->cNumBitIO;
pSC->cSB = pSC->m_pNextSC->cSB;
}
setBitIOPointers(pSC);
return ICERR_OK;
}
Int StrDecTerm(CWMImageStrCodec* pSC)
{
size_t j, jend = (pSC->m_pNextSC != NULL);
for (j = 0; j <= jend; j++) {
if(pSC->m_bUVResolutionChange){
if(pSC->pResU != NULL)
free(pSC->pResU);
if(pSC->pResV != NULL)
free(pSC->pResV);
}
freePredInfo(pSC);
freeTileInfo(pSC);
FreeCodingContextDec(pSC);
if (j == 0) {
StrIODecTerm(pSC);
// free lookup tables for rotation and flipping
if(pSC->m_Dparam->pOffsetX != NULL)
free(pSC->m_Dparam->pOffsetX);
if(pSC->m_Dparam->pOffsetY != NULL)
free(pSC->m_Dparam->pOffsetY);
}
pSC = pSC->m_pNextSC;
}
return 0;
}
/*************************************************************************
Read header of image plane
*************************************************************************/
Int ReadImagePlaneHeader(CWMImageInfo* pII, CWMIStrCodecParam *pSCP,
CCoreParameters *pSC, SimpleBitIO* pSB)
{
ERR err = WMP_errSuccess;
pSC->cfColorFormat = getBit32_SB(pSB, 3); // internal color format
FailIf((pSC->cfColorFormat < Y_ONLY || pSC->cfColorFormat > NCOMPONENT), WMP_errUnsupportedFormat);
pSCP->cfColorFormat = pSC->cfColorFormat; // this should be removed later
pSC->bScaledArith = getBit32_SB(pSB, 1); // lossless mode
// subbands
pSCP->sbSubband = getBit32_SB(pSB, 4);
// color parameters
switch (pSC->cfColorFormat) {
case Y_ONLY:
pSC->cNumChannels = 1;
break;
case YUV_420:
pSC->cNumChannels = 3;
getBit32_SB(pSB, 1);
pII->cChromaCenteringX = (U8) getBit32_SB(pSB, 3);
getBit32_SB(pSB, 1);
pII->cChromaCenteringY = (U8) getBit32_SB(pSB, 3);
break;
case YUV_422:
pSC->cNumChannels = 3;
getBit32_SB(pSB, 1);
pII->cChromaCenteringX = (U8) getBit32_SB(pSB, 3);
getBit32_SB(pSB, 4);
break;
case YUV_444:
pSC->cNumChannels = 3;
getBit32_SB(pSB, 4);
getBit32_SB(pSB, 4);
break;
case NCOMPONENT:
pSC->cNumChannels = (Int) getBit32_SB(pSB, 4) + 1;
getBit32_SB(pSB, 4);
break;
case CMYK:
pSC->cNumChannels = 4;
break;
default:
break;
}
// float and 32s additional parameters
switch (pII->bdBitDepth) {
case BD_16:
case BD_16S:
case BD_32:
case BD_32S:
pSCP->nLenMantissaOrShift = (U8) getBit32_SB(pSB, 8);
break;
case BD_32F:
pSCP->nLenMantissaOrShift = (U8) getBit32_SB(pSB, 8);//float conversion parameters
pSCP->nExpBias = (I8) getBit32_SB(pSB, 8);
break;
default:
break;
}
// quantization
pSC->uQPMode = 0;
if(getBit32_SB(pSB, 1) == 1) // DC uniform
pSC->uQPMode += (readQuantizerSB(pSC->uiQPIndexDC, pSB, pSC->cNumChannels) << 3);
else
pSC->uQPMode ++;
( run in 0.569 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )