📄 umc_h264_me_new.cpp
字号:
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 + -