458 |
/* Do a diamond search around given starting point, return SAD of best */ |
/* Do a diamond search around given starting point, return SAD of best */ |
459 |
|
|
460 |
int32_t iDirection = 0; |
int32_t iDirection = 0; |
461 |
|
int32_t iDirectionBackup; |
462 |
int32_t iSAD; |
int32_t iSAD; |
463 |
VECTOR backupMV; |
VECTOR backupMV; |
464 |
|
|
472 |
CHECK_MV16_CANDIDATE_DIR(backupMV.x, backupMV.y - iDiamondSize, 3); |
CHECK_MV16_CANDIDATE_DIR(backupMV.x, backupMV.y - iDiamondSize, 3); |
473 |
CHECK_MV16_CANDIDATE_DIR(backupMV.x, backupMV.y + iDiamondSize, 4); |
CHECK_MV16_CANDIDATE_DIR(backupMV.x, backupMV.y + iDiamondSize, 4); |
474 |
|
|
475 |
if (iDirection) |
if (iDirection) { |
476 |
while (!iFound) { |
while (!iFound) { |
477 |
iFound = 1; |
iFound = 1; |
478 |
backupMV = *currMV; |
backupMV = *currMV; |
479 |
|
iDirectionBackup = iDirection; |
480 |
|
|
481 |
if (iDirection != 2) |
if (iDirectionBackup != 2) |
482 |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x - iDiamondSize, |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x - iDiamondSize, |
483 |
backupMV.y, 1); |
backupMV.y, 1); |
484 |
if (iDirection != 1) |
if (iDirectionBackup != 1) |
485 |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x + iDiamondSize, |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x + iDiamondSize, |
486 |
backupMV.y, 2); |
backupMV.y, 2); |
487 |
if (iDirection != 4) |
if (iDirectionBackup != 4) |
488 |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x, |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x, |
489 |
backupMV.y - iDiamondSize, 3); |
backupMV.y - iDiamondSize, 3); |
490 |
if (iDirection != 3) |
if (iDirectionBackup != 3) |
491 |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x, |
CHECK_MV16_CANDIDATE_FOUND(backupMV.x, |
492 |
backupMV.y + iDiamondSize, 4); |
backupMV.y + iDiamondSize, 4); |
493 |
|
} |
494 |
} else { |
} else { |
495 |
currMV->x = start_x; |
currMV->x = start_x; |
496 |
currMV->y = start_y; |
currMV->y = start_y; |
1616 |
/* Do a diamond search around given starting point, return SAD of best */ |
/* Do a diamond search around given starting point, return SAD of best */ |
1617 |
|
|
1618 |
int32_t iDirection = 0; |
int32_t iDirection = 0; |
1619 |
|
int32_t iDirectionBackup; |
1620 |
int32_t iSAD; |
int32_t iSAD; |
1621 |
VECTOR backupMV; |
VECTOR backupMV; |
1622 |
|
|
1630 |
CHECK_MV8_CANDIDATE_DIR(backupMV.x, backupMV.y - iDiamondSize, 3); |
CHECK_MV8_CANDIDATE_DIR(backupMV.x, backupMV.y - iDiamondSize, 3); |
1631 |
CHECK_MV8_CANDIDATE_DIR(backupMV.x, backupMV.y + iDiamondSize, 4); |
CHECK_MV8_CANDIDATE_DIR(backupMV.x, backupMV.y + iDiamondSize, 4); |
1632 |
|
|
1633 |
if (iDirection) |
if (iDirection) { |
1634 |
while (!iFound) { |
while (!iFound) { |
1635 |
iFound = 1; |
iFound = 1; |
1636 |
backupMV = *currMV; // since iDirection!=0, this is well defined! |
backupMV = *currMV; // since iDirection!=0, this is well defined! |
1637 |
|
iDirectionBackup = iDirection; |
1638 |
|
|
1639 |
if (iDirection != 2) |
if (iDirectionBackup != 2) |
1640 |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x - iDiamondSize, |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x - iDiamondSize, |
1641 |
backupMV.y, 1); |
backupMV.y, 1); |
1642 |
if (iDirection != 1) |
if (iDirectionBackup != 1) |
1643 |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x + iDiamondSize, |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x + iDiamondSize, |
1644 |
backupMV.y, 2); |
backupMV.y, 2); |
1645 |
if (iDirection != 4) |
if (iDirectionBackup != 4) |
1646 |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x, |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x, |
1647 |
backupMV.y - iDiamondSize, 3); |
backupMV.y - iDiamondSize, 3); |
1648 |
if (iDirection != 3) |
if (iDirectionBackup != 3) |
1649 |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x, |
CHECK_MV8_CANDIDATE_FOUND(backupMV.x, |
1650 |
backupMV.y + iDiamondSize, 4); |
backupMV.y + iDiamondSize, 4); |
1651 |
|
} |
1652 |
} else { |
} else { |
1653 |
currMV->x = start_x; |
currMV->x = start_x; |
1654 |
currMV->y = start_y; |
currMV->y = start_y; |