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 )