Alien-FreeImage

 view release on metacpan or  search on metacpan

src/Source/LibJXR/image/encode/strenc_x86.c  view on Meta::CPAN


        pxor xmm2, xmm2
        pxor xmm6, xmm6
        psubd xmm1, xmm7    // g -= offset
        psubd xmm5, xmm7
        psubd xmm2, xmm0    // r = -r
        psubd xmm6, xmm4

        movntdq [edi + 32], xmm1
        movntdq [edi + 48], xmm5
        movntdq [edi + ebx + 32], xmm2
        movntdq [edi + ebx + 48], xmm6

        //================
        add edi, 256                    // pbYCoCg += 256
        add ebp, 12                     // pbRGB += 12
        jnz Loop1

        //================
        add dword ptr [esp + 8], 64     // pbYCoCg += 64
        sub dword ptr [esp + 12], 1     // --cLoop0
        mov [esp + 4], esi              // pbRGB += cbRGB * 4
        jnz Loop0

        //================
        mov esp, [esp + 20]
        pop edi
        pop esi
        pop ebx
        pop ebp
        ret 20
    }
}

Int inputMBRow_RGB24_6(CWMImageStrCodec* pSC)
{
    const U8* const pbRGB = (U8*)pSC->WMIBI.pv;
    const size_t cbRGB = pSC->WMIBI.cbStride;

    U8* const pbY = (U8*)pSC->p1MBbuffer[0];
    U8* const pbU = (U8*)pSC->p1MBbuffer[1];
    // U8* const pbV = (U8*)pSC->p1MBbuffer[2];

    const size_t cmbColumn = (pSC->WMII.cWidth + 15) / 16;

    assert(BD_8 == pSC->WMII.bdBitDepth);
    assert(CF_RGB == pSC->WMII.cfColorFormat);
    assert(24 == pSC->WMII.cBitsPerUnit);
    assert(pSC->WMII.bRGB);
    assert(pSC->m_param.bScaledArith);
    assert(pbU - pbY == pbV - pbU);

    RGB24_6(pbRGB + cbRGB * 0, cbRGB, pbY, pbU - pbY, cmbColumn);
    return ICERR_OK;
}
#endif

//================================
#if defined(WMP_OPT_QT)
#if 0
Int quantizeMacroblock(CWMImageStrCodec* pSC)
{
    assert(BD_8 == pSC->WMII.bdBitDepth);
    assert(YUV_444 == pSC->m_param.cfColorFormat);
    assert(pSC->m_param.bScaledArith);
    assert(3 == pSC->m_param.cNumChannels);
    assert(SB_ALL == pSC->WMISCP.sbSubband);

    CWMITile* pTile = pSC->pTile + pSC->cTileColumn;
    CWMIMBInfo* pMBInfo = &pSC->MBInfo;
    int iChannel, i, j;

    __m128 owQT[2];

    

    for (iChannel = 0; iChannel < 3; iChannel ++) {
        CWMIQuantizer* pQPDC = pTile->pQuantizerDC[iChannel];
        CWMIQuantizer* pQPLP = pTile->pQuantizerLP[iChannel] + pMBInfo->iQIndexLP;
        CWMIQuantizer* pQPHP = pTile->pQuantizerHP[iChannel] + pMBInfo->iQIndexHP;

        __m128 owQT[4] = {
            {pQPDC->f1_QP, pQPHP->f1_QP, pQPHP->f1_QP, pQPHP->f1_QP,},
            {pQPLP->f1_QP, pQPHP->f1_QP, pQPHP->f1_QP, pQPHP->f1_QP,},
        };

        owQT[0].m128_f32[0] = pQPDC->f1_QP;
        owQT[0].m128_f32[1] = pQPHP->f1_QP;
        owQT[0].m128_f32[2] = pQPHP->f1_QP;
        owQT[0].m128_f32[3] = pQPHP->f1_QP;
        owQT[1].m128_f32[0] = pQPDC->f1_QP;
        owQT[1].m128_f32[1] = pQPHP->f1_QP;
        owQT[1].m128_f32[2] = pQPHP->f1_QP;
        owQT[1].m128_f32[3] = pQPHP->f1_QP;
        
        
        

        for(j = 0; j < 16; j ++){
            PixelI* pData = pSC->pPlane[iChannel] + blkOffset[j];

            if(j == 0) // DC
                pData[0] = (pQPDC->iMan == 0 ? QUANT_Mulless(pData[0], pQPDC->iOffset, pQPDC->iExp) : QUANT(pData[0], pQPDC->iOffset, pQPDC->iMan, pQPDC->iExp));
            else // LP
                pData[0] = (pQPLP->iMan == 0 ? QUANT_Mulless(pData[0], pQPLP->iOffset, pQPLP->iExp) : QUANT(pData[0], pQPLP->iOffset, pQPLP->iMan, pQPLP->iExp));

            // quantize HP
            for(i = 1; i < 16; i ++)
                pData[i] = (pQPHP->iMan == 0 ? QUANT_Mulless(pData[i], pQPHP->iOffset, pQPHP->iExp) : QUANT(pData[i], pQPHP->iOffset, pQPHP->iMan, pQPHP->iExp));
        }
    }
    
    for (iChannel = 0; iChannel < 3; iChannel ++) {
        I32* pDC = pSC->MBInfo.iBlockDC[iChannel];
        PixelI* pData = pSC->pPlane[iChannel];

        for(i = 0; i < 16; i ++){
            pDC[i] = pData[dctIndex[2][i]];
        }
    }



( run in 0.494 second using v1.01-cache-2.11-cpan-71847e10f99 )