⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_me_new.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:

            for(;;)
            {
                l = 0;
                for (k = 0; k < 5; k++)
                {
                    j = xPos + bdJS[k];
                    i = yPos + bdIS[k];
                    if (j >= xL && j <= xR && i >= yT && i <= yB)
                    {
                        cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                        cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                        if (cSAD < bSAD) {
                            bSAD = cSAD;
                            l = k;
                            bMVX = j;
                            bMVY = i;
                            if (bSAD <= meInfo->threshold)
                            {
                                goto end;
                            }
                        }
                    }
                }
                if (l == 0) break;
                else
                {
                    xPos += bdJS[l];
                    yPos += bdIS[l];
                }
            }

            delete Used;
        }
        break;
    case MV_SEARCH_TYPE_FULL:
        {
            Ipp32s y, x;
            for (y = yT; y <= yB; y ++) {
                for (x = xL; x <= xR; x ++) {
                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, x, y), pitchPixels, blockSize);
                    cSAD += MVConstraint((x << SUB_PEL_SHIFT) - predictedMV.mvx, (y << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                    if (cSAD < bSAD) {
                        bSAD = cSAD;
                        bMVX = x;
                        bMVY = y;
                        if (bSAD <= meInfo->threshold)
                            goto end;
                    }
                }
            }
        }
        break;
    case MV_SEARCH_TYPE_CLASSIC_LOG:
        {
            Ipp32s xPos, yPos, k, j, i, l;
            Ipp32s n = 0;
            Ipp32s sr = MAX(rX,rY);
            static const Ipp32s bdJ[5] = {0, 0, -1, 0, 1}, bdI[5] = {0, -1, 0, 1, 0};
            while (sr = (sr >> 1))
            {
                n++;
            }
            n = MAX(pow((double)2,(double)n-1),2);

            xPos = bMVX;
            yPos = bMVY;

            for (;;)
            {
                l = 0;
                for (k = 0; k < 5; k++)
                {
                    j = xPos + bdJ[k]*n;
                    i = yPos + bdI[k]*n;
                    if (j >= xL && j <= xR && i >= yT && i <= yB)
                    {
                        cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                        cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                        if (cSAD < bSAD)
                        {
                            l = k;
                            bSAD = cSAD;
                            bMVX = j;
                            bMVY = i;
                            if (bSAD <= meInfo->threshold)
                                goto end;
                        }
                    }
                }
                if (l == 0)
                {
                    n = (n >> 1);
                    if (n == 1)
                    {
                        Ipp32s x, y;
                        for (y = yPos - 1; y <= yPos + 1; y ++)
                        {
                            for (x = xPos - 1; x <= xPos + 1; x ++)
                            {
                                if (x >= xL && x <= xR && y >= yT && y <= yB)
                                {
                                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, x, y), pitchPixels, blockSize);
                                    cSAD += MVConstraint((x << SUB_PEL_SHIFT) - predictedMV.mvx, (y << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                                    if (cSAD < bSAD)
                                    {
                                        bSAD = cSAD;
                                        bMVX = x;
                                        bMVY = y;
                                        if (bSAD <= meInfo->threshold)
                                            goto end;
                                    }
                                }
                            }
                        }
                        break;
                    }
                }
                else
                {
                    xPos += bdJ[l]*n;
                    yPos += bdI[l]*n;
                }
            }
        }
        break;
    case MV_SEARCH_TYPE_LOG:
        {
            Ipp32s i, j, k, l, m, n, xPos, yPos;
            //static const Ipp32s bdJ[5] = {0, -1, 0, 1, 0}, bdI[5] = {0, 0, -1, 0, 1};
            //static const Ipp32s bdN[5] = {4, 3, 3, 3, 3}, bdA[5][4] = {{1, 2, 3, 4}, {1, 2, 4, 0}, {1, 2, 3, 0}, {2, 3, 4, 0}, {3, 4, 1, 0}};
            static const Ipp32s bdJ[9] = {0, -1, 0, 1, 1, 1, 0, -1, -1}, bdI[9] = {0, -1, -1, -1, 0, 1, 1, 1, 0};
            static const Ipp32s bdN[9] = {8, 5, 3, 5, 3, 5, 3, 5, 3}, bdA[9][8] = {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 2, 3, 7, 8, 0, 0, 0}, {1, 2, 3, 0, 0, 0, 0, 0}, {1, 2, 3, 4, 5, 0, 0, 0}, {3, 4, 5, 0, 0, 0, 0, 0}, {3, 4, 5, 6, 7, 0, 0, 0}, {5, 6, 7, 0, 0, 0, 0, 0}, {5, 6, 7, 8, 1, 0, 0, 0}, {7, 8, 1, 0, 0, 0, 0, 0}};
            xPos = bMVX;
            yPos = bMVY;
            l = 0;
            for (;;) {
                n = l;
                l = 0;
                for (m = 0; m < bdN[n]; m ++) {
                    k = bdA[n][m];
                    j = xPos + bdJ[k] * rX;
                    i = yPos + bdI[k] * rY;
                    if (j >= xL && j <= xR && i >= yT && i <= yB) {
                        cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                        cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                        if (cSAD < bSAD) {
                            l = k;
                            bSAD = cSAD;
                            bMVX = j;
                            bMVY = i;
                            if (bSAD <= meInfo->threshold)
                                goto end;
                        }
                    }
                }
                if (l == 0) {
                    rX >>= 1;
                    rY >>= 1;
                    if (rX == 0 || rY == 0)
                        break;
                } else {
                    xPos += bdJ[l] * rX;
                    yPos += bdI[l] * rY;
                }
            }
        }
        break;
    case MV_SEARCH_TYPE_EPZS:
        {
            Ipp32s xPos, yPos, k, j, i, l;
            Ipp32s r;
            static const Ipp32s bdJL[9] = {0, -1, 0, 1, 2, 1, 0, -1, -2}, bdIL[9] = {0, -1, -2, -1, 0, 1, 2, 1, 0};
            static const Ipp32s bdJS[5] = {0, 0, 1, 0, -1}, bdIS[5] = {0, -1, 0, 1, 0};
            r = (yB - yT + xR - xL)/4;
            xPos = bMVX;
            yPos = bMVY;

            for (;;)
            {
                l = 0;
                for (k = 0; k < 9; k++)
                {
                    j = xPos + bdJL[k]*r;
                    i = yPos + bdIL[k]*r;
                    if (j >= xL && j <= xR && i >= yT && i <= yB)
                    {
                        cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                        cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                        if (cSAD < bSAD)
                        {
                            l = k;
                            bSAD = cSAD;
                            bMVX = j;
                            bMVY = i;
                            if (bSAD <= meInfo->threshold)
                                goto end;
                        }
                    }
                }
                if (l == 0)
                {
                    r = (r >> 1);
                    if (r == 0) break;
                }
                else
                {
                    xPos += bdJL[l]*r;
                    yPos += bdIL[l]*r;
                }
            }

            xPos = bMVX;
            yPos = bMVY;

            for (k = 0; k < 5; k++)
            {
                j = xPos + bdJS[k];
                i = yPos + bdIS[k];
                if (j >= xL && j <= xR && i >= yT && i <= yB)
                {
                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                    cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                    if (cSAD < bSAD) {
                        bSAD = cSAD;
                        bMVX = j;
                        bMVY = i;
                        if (bSAD <= meInfo->threshold)
                            goto end;
                    }
                }
            }
        }
        break;
    case MV_SEARCH_TYPE_FULL_ORTHOGONAL:
        {
            Ipp32s j, i, xPos, yPos;
            xPos = bMVX;
            yPos = bMVY;
            i = 0;
            for (j = xPos - rX; j < xPos + rX; j += 2)
            {
                if (j >= xL && j <= xR && i >= yT && i <= yB)  {
                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                    cSAD += MVConstraint((j << SUB_PEL_SHIFT) - predictedMV.mvx, (0 << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                    if (cSAD < bSAD) {
                                bSAD = cSAD;
                                bMVX = j;
                                bMVY = i;
                                if (bSAD <= meInfo->threshold)
                                    goto end;
                    }
                }
            }
            j = bMVX;
            for (i = yPos - rY; i < yPos + rY; i += 2)
            {
                if (j >= xL && j <= xR && i >= yT && i <= yB)  {
                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, j, i), pitchPixels, blockSize);
                    cSAD += MVConstraint((0 << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                    if (cSAD < bSAD) {
                                bSAD = cSAD;
                                bMVX = j;
                                bMVY = i;
                                if (bSAD <= meInfo->threshold)
                                       goto end;
                        }
                }
            }
        }
        break;
    case MV_SEARCH_TYPE_LOG_ORTHOGONAL:
        {
            Ipp32s jL, jR, iT, iB,j, i, xPos, yPos,r;
            r = rX;
            i = 0;
            for (;;)
            {
                xPos = bMVX;
                jL = xPos - r;
                jR = xPos + r;
                if (jL >= xL)  {
                    cSAD = SAD(pCur, pitchPixels, MVADJUST(pRef, pitchPixels, jL, i), pitchPixels, blockSize);
                    cSAD += MVConstraint((jL << SUB_PEL_SHIFT) - predictedMV.mvx, (i << SUB_PEL_SHIFT) - predictedMV.mvy, pRDQM);
                    if (cSAD < bSAD) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -