Changeset 468 in 3DVCSoftware for branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComRdCost.cpp
- Timestamp:
- 16 Jun 2013, 05:33:39 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComRdCost.cpp
r446 r468 502 502 cDtParam.bitDepth = bitDepth; 503 503 504 #if H_3D_IC 505 cDtParam.bUseIC = false; 506 #endif 507 504 508 #if WEIGHTED_CHROMA_DISTORTION 505 509 if (eText == TEXT_CHROMA_U) … … 599 603 return xGetSADw( pcDtParam ); 600 604 } 605 606 #if H_3D_IC 607 if( pcDtParam->bUseIC ) 608 { 609 return xGetSADic( pcDtParam ); 610 } 611 #endif 612 601 613 Pel* piOrg = pcDtParam->pOrg; 602 614 Pel* piCur = pcDtParam->pCur; … … 627 639 return xGetSADw( pcDtParam ); 628 640 } 641 642 #if H_3D_IC 643 if( pcDtParam->bUseIC ) 644 { 645 return xGetSAD4ic( pcDtParam ); 646 } 647 #endif 648 629 649 Pel* piOrg = pcDtParam->pOrg; 630 650 Pel* piCur = pcDtParam->pCur; … … 658 678 return xGetSADw( pcDtParam ); 659 679 } 680 681 #if H_3D_IC 682 if( pcDtParam->bUseIC ) 683 { 684 return xGetSAD8ic( pcDtParam ); 685 } 686 #endif 687 660 688 Pel* piOrg = pcDtParam->pOrg; 661 689 Pel* piCur = pcDtParam->pCur; … … 693 721 return xGetSADw( pcDtParam ); 694 722 } 723 724 #if H_3D_IC 725 if( pcDtParam->bUseIC ) 726 { 727 return xGetSAD16ic( pcDtParam ); 728 } 729 #endif 730 695 731 Pel* piOrg = pcDtParam->pOrg; 696 732 Pel* piCur = pcDtParam->pCur; … … 737 773 return xGetSADw( pcDtParam ); 738 774 } 775 776 #if H_3D_IC 777 if( pcDtParam->bUseIC ) 778 { 779 return xGetSAD12ic( pcDtParam ); 780 } 781 #endif 782 739 783 Pel* piOrg = pcDtParam->pOrg; 740 784 Pel* piCur = pcDtParam->pCur; … … 773 817 UInt TComRdCost::xGetSAD16N( DistParam* pcDtParam ) 774 818 { 819 #if H_3D_IC 820 if( pcDtParam->bUseIC ) 821 { 822 return xGetSAD16Nic( pcDtParam ); 823 } 824 #endif 825 775 826 Pel* piOrg = pcDtParam->pOrg; 776 827 Pel* piCur = pcDtParam->pCur; … … 819 870 return xGetSADw( pcDtParam ); 820 871 } 872 873 #if H_3D_IC 874 if( pcDtParam->bUseIC ) 875 { 876 return xGetSAD32ic( pcDtParam ); 877 } 878 #endif 879 821 880 Pel* piOrg = pcDtParam->pOrg; 822 881 Pel* piCur = pcDtParam->pCur; … … 879 938 return xGetSADw( pcDtParam ); 880 939 } 940 941 #if H_3D_IC 942 if( pcDtParam->bUseIC ) 943 { 944 return xGetSAD24ic( pcDtParam ); 945 } 946 #endif 947 881 948 Pel* piOrg = pcDtParam->pOrg; 882 949 Pel* piCur = pcDtParam->pCur; … … 932 999 return xGetSADw( pcDtParam ); 933 1000 } 1001 1002 #if H_3D_IC 1003 if( pcDtParam->bUseIC ) 1004 { 1005 return xGetSAD64ic( pcDtParam ); 1006 } 1007 #endif 1008 934 1009 Pel* piOrg = pcDtParam->pOrg; 935 1010 Pel* piCur = pcDtParam->pCur; … … 1024 1099 return xGetSADw( pcDtParam ); 1025 1100 } 1101 1102 #if H_3D_IC 1103 if( pcDtParam->bUseIC ) 1104 { 1105 return xGetSAD48ic( pcDtParam ); 1106 } 1107 #endif 1108 1026 1109 Pel* piOrg = pcDtParam->pOrg; 1027 1110 Pel* piCur = pcDtParam->pCur; … … 1094 1177 #endif 1095 1178 1179 #if H_3D_IC 1180 UInt TComRdCost::xGetSADic( DistParam* pcDtParam ) 1181 { 1182 if ( pcDtParam->bApplyWeight ) 1183 { 1184 return xGetSADw( pcDtParam ); 1185 } 1186 Pel* piOrg = pcDtParam->pOrg; 1187 Pel* piCur = pcDtParam->pCur; 1188 Int iRows = pcDtParam->iRows; 1189 Int iCols = pcDtParam->iCols; 1190 Int iStrideCur = pcDtParam->iStrideCur; 1191 Int iStrideOrg = pcDtParam->iStrideOrg; 1192 1193 UInt uiSum = 0; 1194 1195 Int iOrigAvg = 0, iCurAvg = 0; 1196 Int iDeltaC; 1197 1198 for( ; iRows != 0; iRows-- ) 1199 { 1200 for (Int n = 0; n < iCols; n++ ) 1201 { 1202 iOrigAvg += piOrg[n]; 1203 iCurAvg += piCur[n]; 1204 } 1205 piOrg += iStrideOrg; 1206 piCur += iStrideCur; 1207 } 1208 1209 piOrg = pcDtParam->pOrg; 1210 piCur = pcDtParam->pCur; 1211 iRows = pcDtParam->iRows; 1212 1213 iDeltaC = (iOrigAvg - iCurAvg)/iCols/iRows; 1214 1215 for( ; iRows != 0; iRows-- ) 1216 { 1217 for (Int n = 0; n < iCols; n++ ) 1218 { 1219 uiSum += abs( piOrg[n] - piCur[n] - iDeltaC ); 1220 } 1221 piOrg += iStrideOrg; 1222 piCur += iStrideCur; 1223 } 1224 1225 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1226 } 1227 1228 UInt TComRdCost::xGetSAD4ic( DistParam* pcDtParam ) 1229 { 1230 if ( pcDtParam->bApplyWeight ) 1231 { 1232 return xGetSADw( pcDtParam ); 1233 } 1234 Pel* piOrg = pcDtParam->pOrg; 1235 Pel* piCur = pcDtParam->pCur; 1236 Int iRows = pcDtParam->iRows; 1237 Int iSubShift = pcDtParam->iSubShift; 1238 Int iSubStep = ( 1 << iSubShift ); 1239 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1240 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1241 1242 UInt uiSum = 0; 1243 1244 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1245 Int iDeltaC; 1246 1247 for( ; iRows != 0; iRows-=iSubStep ) 1248 { 1249 iOrigAvg += piOrg[0]; 1250 iOrigAvg += piOrg[1]; 1251 iOrigAvg += piOrg[2]; 1252 iOrigAvg += piOrg[3]; 1253 1254 iCurAvg += piCur[0]; 1255 iCurAvg += piCur[1]; 1256 iCurAvg += piCur[2]; 1257 iCurAvg += piCur[3]; 1258 1259 piOrg += iStrideOrg; 1260 piCur += iStrideCur; 1261 uiRowCnt++; 1262 } 1263 1264 piOrg = pcDtParam->pOrg; 1265 piCur = pcDtParam->pCur; 1266 iRows = pcDtParam->iRows; 1267 1268 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/4) : 0; 1269 1270 for( ; iRows != 0; iRows-=iSubStep ) 1271 { 1272 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1273 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1274 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1275 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1276 1277 piOrg += iStrideOrg; 1278 piCur += iStrideCur; 1279 } 1280 1281 uiSum <<= iSubShift; 1282 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1283 } 1284 1285 UInt TComRdCost::xGetSAD8ic( DistParam* pcDtParam ) 1286 { 1287 if ( pcDtParam->bApplyWeight ) 1288 { 1289 return xGetSADw( pcDtParam ); 1290 } 1291 Pel* piOrg = pcDtParam->pOrg; 1292 Pel* piCur = pcDtParam->pCur; 1293 Int iRows = pcDtParam->iRows; 1294 Int iSubShift = pcDtParam->iSubShift; 1295 Int iSubStep = ( 1 << iSubShift ); 1296 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1297 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1298 1299 UInt uiSum = 0; 1300 1301 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1302 Int iDeltaC; 1303 1304 for( ; iRows != 0; iRows-=iSubStep ) 1305 { 1306 iOrigAvg += piOrg[0]; 1307 iOrigAvg += piOrg[1]; 1308 iOrigAvg += piOrg[2]; 1309 iOrigAvg += piOrg[3]; 1310 iOrigAvg += piOrg[4]; 1311 iOrigAvg += piOrg[5]; 1312 iOrigAvg += piOrg[6]; 1313 iOrigAvg += piOrg[7]; 1314 1315 iCurAvg += piCur[0]; 1316 iCurAvg += piCur[1]; 1317 iCurAvg += piCur[2]; 1318 iCurAvg += piCur[3]; 1319 iCurAvg += piCur[4]; 1320 iCurAvg += piCur[5]; 1321 iCurAvg += piCur[6]; 1322 iCurAvg += piCur[7]; 1323 1324 piOrg += iStrideOrg; 1325 piCur += iStrideCur; 1326 uiRowCnt++; 1327 } 1328 1329 piOrg = pcDtParam->pOrg; 1330 piCur = pcDtParam->pCur; 1331 iRows = pcDtParam->iRows; 1332 1333 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/8) : 0; 1334 1335 for( ; iRows != 0; iRows-=iSubStep ) 1336 { 1337 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1338 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1339 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1340 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1341 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 1342 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 1343 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 1344 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 1345 1346 piOrg += iStrideOrg; 1347 piCur += iStrideCur; 1348 } 1349 1350 uiSum <<= iSubShift; 1351 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1352 } 1353 1354 UInt TComRdCost::xGetSAD16ic( DistParam* pcDtParam ) 1355 { 1356 if ( pcDtParam->bApplyWeight ) 1357 { 1358 return xGetSADw( pcDtParam ); 1359 } 1360 Pel* piOrg = pcDtParam->pOrg; 1361 Pel* piCur = pcDtParam->pCur; 1362 Int iRows = pcDtParam->iRows; 1363 Int iSubShift = pcDtParam->iSubShift; 1364 Int iSubStep = ( 1 << iSubShift ); 1365 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1366 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1367 1368 UInt uiSum = 0; 1369 1370 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1371 Int iDeltaC; 1372 1373 for( ; iRows != 0; iRows-=iSubStep ) 1374 { 1375 iOrigAvg += piOrg[0]; 1376 iOrigAvg += piOrg[1]; 1377 iOrigAvg += piOrg[2]; 1378 iOrigAvg += piOrg[3]; 1379 iOrigAvg += piOrg[4]; 1380 iOrigAvg += piOrg[5]; 1381 iOrigAvg += piOrg[6]; 1382 iOrigAvg += piOrg[7]; 1383 iOrigAvg += piOrg[8]; 1384 iOrigAvg += piOrg[9]; 1385 iOrigAvg += piOrg[10]; 1386 iOrigAvg += piOrg[11]; 1387 iOrigAvg += piOrg[12]; 1388 iOrigAvg += piOrg[13]; 1389 iOrigAvg += piOrg[14]; 1390 iOrigAvg += piOrg[15]; 1391 1392 iCurAvg += piCur[0]; 1393 iCurAvg += piCur[1]; 1394 iCurAvg += piCur[2]; 1395 iCurAvg += piCur[3]; 1396 iCurAvg += piCur[4]; 1397 iCurAvg += piCur[5]; 1398 iCurAvg += piCur[6]; 1399 iCurAvg += piCur[7]; 1400 iCurAvg += piCur[8]; 1401 iCurAvg += piCur[9]; 1402 iCurAvg += piCur[10]; 1403 iCurAvg += piCur[11]; 1404 iCurAvg += piCur[12]; 1405 iCurAvg += piCur[13]; 1406 iCurAvg += piCur[14]; 1407 iCurAvg += piCur[15]; 1408 1409 piOrg += iStrideOrg; 1410 piCur += iStrideCur; 1411 uiRowCnt++; 1412 } 1413 1414 piOrg = pcDtParam->pOrg; 1415 piCur = pcDtParam->pCur; 1416 iRows = pcDtParam->iRows; 1417 1418 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/16) : 0; 1419 1420 for( ; iRows != 0; iRows-=iSubStep ) 1421 { 1422 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1423 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1424 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1425 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1426 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 1427 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 1428 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 1429 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 1430 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 1431 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 1432 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 1433 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 1434 uiSum += abs( piOrg[12] - piCur[12] - iDeltaC ); 1435 uiSum += abs( piOrg[13] - piCur[13] - iDeltaC ); 1436 uiSum += abs( piOrg[14] - piCur[14] - iDeltaC ); 1437 uiSum += abs( piOrg[15] - piCur[15] - iDeltaC ); 1438 1439 piOrg += iStrideOrg; 1440 piCur += iStrideCur; 1441 } 1442 1443 uiSum <<= iSubShift; 1444 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1445 } 1446 1447 #if AMP_SAD 1448 UInt TComRdCost::xGetSAD12ic( DistParam* pcDtParam ) 1449 { 1450 if ( pcDtParam->bApplyWeight ) 1451 { 1452 return xGetSADw( pcDtParam ); 1453 } 1454 Pel* piOrg = pcDtParam->pOrg; 1455 Pel* piCur = pcDtParam->pCur; 1456 Int iRows = pcDtParam->iRows; 1457 Int iSubShift = pcDtParam->iSubShift; 1458 Int iSubStep = ( 1 << iSubShift ); 1459 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1460 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1461 1462 UInt uiSum = 0; 1463 1464 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1465 Int iDeltaC; 1466 1467 for( ; iRows != 0; iRows-=iSubStep ) 1468 { 1469 iOrigAvg += piOrg[0]; 1470 iOrigAvg += piOrg[1]; 1471 iOrigAvg += piOrg[2]; 1472 iOrigAvg += piOrg[3]; 1473 iOrigAvg += piOrg[4]; 1474 iOrigAvg += piOrg[5]; 1475 iOrigAvg += piOrg[6]; 1476 iOrigAvg += piOrg[7]; 1477 iOrigAvg += piOrg[8]; 1478 iOrigAvg += piOrg[9]; 1479 iOrigAvg += piOrg[10]; 1480 iOrigAvg += piOrg[11]; 1481 1482 iCurAvg += piCur[0]; 1483 iCurAvg += piCur[1]; 1484 iCurAvg += piCur[2]; 1485 iCurAvg += piCur[3]; 1486 iCurAvg += piCur[4]; 1487 iCurAvg += piCur[5]; 1488 iCurAvg += piCur[6]; 1489 iCurAvg += piCur[7]; 1490 iCurAvg += piCur[8]; 1491 iCurAvg += piCur[9]; 1492 iCurAvg += piCur[10]; 1493 iCurAvg += piCur[11]; 1494 1495 piOrg += iStrideOrg; 1496 piCur += iStrideCur; 1497 uiRowCnt++; 1498 } 1499 1500 piOrg = pcDtParam->pOrg; 1501 piCur = pcDtParam->pCur; 1502 iRows = pcDtParam->iRows; 1503 1504 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/12) : 0; 1505 1506 for( ; iRows != 0; iRows-=iSubStep ) 1507 { 1508 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1509 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1510 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1511 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1512 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 1513 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 1514 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 1515 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 1516 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 1517 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 1518 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 1519 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 1520 1521 piOrg += iStrideOrg; 1522 piCur += iStrideCur; 1523 } 1524 1525 uiSum <<= iSubShift; 1526 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1527 } 1528 #endif 1529 1530 UInt TComRdCost::xGetSAD16Nic( DistParam* pcDtParam ) 1531 { 1532 Pel* piOrg = pcDtParam->pOrg; 1533 Pel* piCur = pcDtParam->pCur; 1534 Int iRows = pcDtParam->iRows; 1535 Int iCols = pcDtParam->iCols; 1536 Int iSubShift = pcDtParam->iSubShift; 1537 Int iSubStep = ( 1 << iSubShift ); 1538 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1539 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1540 1541 UInt uiSum = 0; 1542 1543 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0, uiColCnt = (iCols-1)/16 + 1; 1544 Int iDeltaC; 1545 1546 for( ; iRows != 0; iRows-=iSubStep ) 1547 { 1548 for (Int n = 0; n < iCols; n+=16 ) 1549 { 1550 iOrigAvg += piOrg[n + 0]; 1551 iOrigAvg += piOrg[n + 1]; 1552 iOrigAvg += piOrg[n + 2]; 1553 iOrigAvg += piOrg[n + 3]; 1554 iOrigAvg += piOrg[n + 4]; 1555 iOrigAvg += piOrg[n + 5]; 1556 iOrigAvg += piOrg[n + 6]; 1557 iOrigAvg += piOrg[n + 7]; 1558 iOrigAvg += piOrg[n + 8]; 1559 iOrigAvg += piOrg[n + 9]; 1560 iOrigAvg += piOrg[n + 10]; 1561 iOrigAvg += piOrg[n + 11]; 1562 iOrigAvg += piOrg[n + 12]; 1563 iOrigAvg += piOrg[n + 13]; 1564 iOrigAvg += piOrg[n + 14]; 1565 iOrigAvg += piOrg[n + 15]; 1566 1567 iCurAvg += piCur[n + 0]; 1568 iCurAvg += piCur[n + 1]; 1569 iCurAvg += piCur[n + 2]; 1570 iCurAvg += piCur[n + 3]; 1571 iCurAvg += piCur[n + 4]; 1572 iCurAvg += piCur[n + 5]; 1573 iCurAvg += piCur[n + 6]; 1574 iCurAvg += piCur[n + 7]; 1575 iCurAvg += piCur[n + 8]; 1576 iCurAvg += piCur[n + 9]; 1577 iCurAvg += piCur[n + 10]; 1578 iCurAvg += piCur[n + 11]; 1579 iCurAvg += piCur[n + 12]; 1580 iCurAvg += piCur[n + 13]; 1581 iCurAvg += piCur[n + 14]; 1582 iCurAvg += piCur[n + 15]; 1583 } 1584 piOrg += iStrideOrg; 1585 piCur += iStrideCur; 1586 uiRowCnt++; 1587 } 1588 piOrg = pcDtParam->pOrg; 1589 piCur = pcDtParam->pCur; 1590 iRows = pcDtParam->iRows; 1591 1592 iDeltaC = (uiRowCnt && uiColCnt) ? ((iOrigAvg - iCurAvg)/uiRowCnt/uiColCnt/16) : 0; 1593 1594 for( ; iRows != 0; iRows-=iSubStep ) 1595 { 1596 for (Int n = 0; n < iCols; n+=16 ) 1597 { 1598 uiSum += abs( piOrg[n+ 0] - piCur[n+ 0] - iDeltaC ); 1599 uiSum += abs( piOrg[n+ 1] - piCur[n+ 1] - iDeltaC ); 1600 uiSum += abs( piOrg[n+ 2] - piCur[n+ 2] - iDeltaC ); 1601 uiSum += abs( piOrg[n+ 3] - piCur[n+ 3] - iDeltaC ); 1602 uiSum += abs( piOrg[n+ 4] - piCur[n+ 4] - iDeltaC ); 1603 uiSum += abs( piOrg[n+ 5] - piCur[n+ 5] - iDeltaC ); 1604 uiSum += abs( piOrg[n+ 6] - piCur[n+ 6] - iDeltaC ); 1605 uiSum += abs( piOrg[n+ 7] - piCur[n+ 7] - iDeltaC ); 1606 uiSum += abs( piOrg[n+ 8] - piCur[n+ 8] - iDeltaC ); 1607 uiSum += abs( piOrg[n+ 9] - piCur[n+ 9] - iDeltaC ); 1608 uiSum += abs( piOrg[n+10] - piCur[n+10] - iDeltaC ); 1609 uiSum += abs( piOrg[n+11] - piCur[n+11] - iDeltaC ); 1610 uiSum += abs( piOrg[n+12] - piCur[n+12] - iDeltaC ); 1611 uiSum += abs( piOrg[n+13] - piCur[n+13] - iDeltaC ); 1612 uiSum += abs( piOrg[n+14] - piCur[n+14] - iDeltaC ); 1613 uiSum += abs( piOrg[n+15] - piCur[n+15] - iDeltaC ); 1614 } 1615 piOrg += iStrideOrg; 1616 piCur += iStrideCur; 1617 } 1618 1619 uiSum <<= iSubShift; 1620 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1621 } 1622 1623 UInt TComRdCost::xGetSAD32ic( DistParam* pcDtParam ) 1624 { 1625 if ( pcDtParam->bApplyWeight ) 1626 { 1627 return xGetSADw( pcDtParam ); 1628 } 1629 Pel* piOrg = pcDtParam->pOrg; 1630 Pel* piCur = pcDtParam->pCur; 1631 Int iRows = pcDtParam->iRows; 1632 Int iSubShift = pcDtParam->iSubShift; 1633 Int iSubStep = ( 1 << iSubShift ); 1634 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1635 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1636 1637 UInt uiSum = 0; 1638 1639 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1640 Int iDeltaC; 1641 1642 for( ; iRows != 0; iRows-=iSubStep ) 1643 { 1644 iOrigAvg += piOrg[0]; 1645 iOrigAvg += piOrg[1]; 1646 iOrigAvg += piOrg[2]; 1647 iOrigAvg += piOrg[3]; 1648 iOrigAvg += piOrg[4]; 1649 iOrigAvg += piOrg[5]; 1650 iOrigAvg += piOrg[6]; 1651 iOrigAvg += piOrg[7]; 1652 iOrigAvg += piOrg[8]; 1653 iOrigAvg += piOrg[9]; 1654 iOrigAvg += piOrg[10]; 1655 iOrigAvg += piOrg[11]; 1656 iOrigAvg += piOrg[12]; 1657 iOrigAvg += piOrg[13]; 1658 iOrigAvg += piOrg[14]; 1659 iOrigAvg += piOrg[15]; 1660 iOrigAvg += piOrg[16]; 1661 iOrigAvg += piOrg[17]; 1662 iOrigAvg += piOrg[18]; 1663 iOrigAvg += piOrg[19]; 1664 iOrigAvg += piOrg[20]; 1665 iOrigAvg += piOrg[21]; 1666 iOrigAvg += piOrg[22]; 1667 iOrigAvg += piOrg[23]; 1668 iOrigAvg += piOrg[24]; 1669 iOrigAvg += piOrg[25]; 1670 iOrigAvg += piOrg[26]; 1671 iOrigAvg += piOrg[27]; 1672 iOrigAvg += piOrg[28]; 1673 iOrigAvg += piOrg[29]; 1674 iOrigAvg += piOrg[30]; 1675 iOrigAvg += piOrg[31]; 1676 1677 iCurAvg += piCur[0]; 1678 iCurAvg += piCur[1]; 1679 iCurAvg += piCur[2]; 1680 iCurAvg += piCur[3]; 1681 iCurAvg += piCur[4]; 1682 iCurAvg += piCur[5]; 1683 iCurAvg += piCur[6]; 1684 iCurAvg += piCur[7]; 1685 iCurAvg += piCur[8]; 1686 iCurAvg += piCur[9]; 1687 iCurAvg += piCur[10]; 1688 iCurAvg += piCur[11]; 1689 iCurAvg += piCur[12]; 1690 iCurAvg += piCur[13]; 1691 iCurAvg += piCur[14]; 1692 iCurAvg += piCur[15]; 1693 iCurAvg += piCur[16]; 1694 iCurAvg += piCur[17]; 1695 iCurAvg += piCur[18]; 1696 iCurAvg += piCur[19]; 1697 iCurAvg += piCur[20]; 1698 iCurAvg += piCur[21]; 1699 iCurAvg += piCur[22]; 1700 iCurAvg += piCur[23]; 1701 iCurAvg += piCur[24]; 1702 iCurAvg += piCur[25]; 1703 iCurAvg += piCur[26]; 1704 iCurAvg += piCur[27]; 1705 iCurAvg += piCur[28]; 1706 iCurAvg += piCur[29]; 1707 iCurAvg += piCur[30]; 1708 iCurAvg += piCur[31]; 1709 1710 piOrg += iStrideOrg; 1711 piCur += iStrideCur; 1712 uiRowCnt++; 1713 } 1714 1715 piOrg = pcDtParam->pOrg; 1716 piCur = pcDtParam->pCur; 1717 iRows = pcDtParam->iRows; 1718 1719 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/32) : 0; 1720 1721 for( ; iRows != 0; iRows-=iSubStep ) 1722 { 1723 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1724 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1725 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1726 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1727 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 1728 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 1729 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 1730 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 1731 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 1732 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 1733 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 1734 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 1735 uiSum += abs( piOrg[12] - piCur[12] - iDeltaC ); 1736 uiSum += abs( piOrg[13] - piCur[13] - iDeltaC ); 1737 uiSum += abs( piOrg[14] - piCur[14] - iDeltaC ); 1738 uiSum += abs( piOrg[15] - piCur[15] - iDeltaC ); 1739 uiSum += abs( piOrg[16] - piCur[16] - iDeltaC ); 1740 uiSum += abs( piOrg[17] - piCur[17] - iDeltaC ); 1741 uiSum += abs( piOrg[18] - piCur[18] - iDeltaC ); 1742 uiSum += abs( piOrg[19] - piCur[19] - iDeltaC ); 1743 uiSum += abs( piOrg[20] - piCur[20] - iDeltaC ); 1744 uiSum += abs( piOrg[21] - piCur[21] - iDeltaC ); 1745 uiSum += abs( piOrg[22] - piCur[22] - iDeltaC ); 1746 uiSum += abs( piOrg[23] - piCur[23] - iDeltaC ); 1747 uiSum += abs( piOrg[24] - piCur[24] - iDeltaC ); 1748 uiSum += abs( piOrg[25] - piCur[25] - iDeltaC ); 1749 uiSum += abs( piOrg[26] - piCur[26] - iDeltaC ); 1750 uiSum += abs( piOrg[27] - piCur[27] - iDeltaC ); 1751 uiSum += abs( piOrg[28] - piCur[28] - iDeltaC ); 1752 uiSum += abs( piOrg[29] - piCur[29] - iDeltaC ); 1753 uiSum += abs( piOrg[30] - piCur[30] - iDeltaC ); 1754 uiSum += abs( piOrg[31] - piCur[31] - iDeltaC ); 1755 1756 piOrg += iStrideOrg; 1757 piCur += iStrideCur; 1758 } 1759 1760 uiSum <<= iSubShift; 1761 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1762 } 1763 1764 #if AMP_SAD 1765 UInt TComRdCost::xGetSAD24ic( DistParam* pcDtParam ) 1766 { 1767 if ( pcDtParam->bApplyWeight ) 1768 { 1769 return xGetSADw( pcDtParam ); 1770 } 1771 Pel* piOrg = pcDtParam->pOrg; 1772 Pel* piCur = pcDtParam->pCur; 1773 Int iRows = pcDtParam->iRows; 1774 Int iSubShift = pcDtParam->iSubShift; 1775 Int iSubStep = ( 1 << iSubShift ); 1776 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1777 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1778 1779 UInt uiSum = 0; 1780 1781 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1782 Int iDeltaC; 1783 1784 for( ; iRows != 0; iRows-=iSubStep ) 1785 { 1786 iOrigAvg += piOrg[0]; 1787 iOrigAvg += piOrg[1]; 1788 iOrigAvg += piOrg[2]; 1789 iOrigAvg += piOrg[3]; 1790 iOrigAvg += piOrg[4]; 1791 iOrigAvg += piOrg[5]; 1792 iOrigAvg += piOrg[6]; 1793 iOrigAvg += piOrg[7]; 1794 iOrigAvg += piOrg[8]; 1795 iOrigAvg += piOrg[9]; 1796 iOrigAvg += piOrg[10]; 1797 iOrigAvg += piOrg[11]; 1798 iOrigAvg += piOrg[12]; 1799 iOrigAvg += piOrg[13]; 1800 iOrigAvg += piOrg[14]; 1801 iOrigAvg += piOrg[15]; 1802 iOrigAvg += piOrg[16]; 1803 iOrigAvg += piOrg[17]; 1804 iOrigAvg += piOrg[18]; 1805 iOrigAvg += piOrg[19]; 1806 iOrigAvg += piOrg[20]; 1807 iOrigAvg += piOrg[21]; 1808 iOrigAvg += piOrg[22]; 1809 iOrigAvg += piOrg[23]; 1810 1811 iCurAvg += piCur[0]; 1812 iCurAvg += piCur[1]; 1813 iCurAvg += piCur[2]; 1814 iCurAvg += piCur[3]; 1815 iCurAvg += piCur[4]; 1816 iCurAvg += piCur[5]; 1817 iCurAvg += piCur[6]; 1818 iCurAvg += piCur[7]; 1819 iCurAvg += piCur[8]; 1820 iCurAvg += piCur[9]; 1821 iCurAvg += piCur[10]; 1822 iCurAvg += piCur[11]; 1823 iCurAvg += piCur[12]; 1824 iCurAvg += piCur[13]; 1825 iCurAvg += piCur[14]; 1826 iCurAvg += piCur[15]; 1827 iCurAvg += piCur[16]; 1828 iCurAvg += piCur[17]; 1829 iCurAvg += piCur[18]; 1830 iCurAvg += piCur[19]; 1831 iCurAvg += piCur[20]; 1832 iCurAvg += piCur[21]; 1833 iCurAvg += piCur[22]; 1834 iCurAvg += piCur[23]; 1835 1836 piOrg += iStrideOrg; 1837 piCur += iStrideCur; 1838 uiRowCnt++; 1839 } 1840 1841 piOrg = pcDtParam->pOrg; 1842 piCur = pcDtParam->pCur; 1843 iRows = pcDtParam->iRows; 1844 1845 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/24) : 0; 1846 1847 for( ; iRows != 0; iRows-=iSubStep ) 1848 { 1849 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 1850 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 1851 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 1852 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 1853 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 1854 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 1855 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 1856 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 1857 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 1858 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 1859 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 1860 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 1861 uiSum += abs( piOrg[12] - piCur[12] - iDeltaC ); 1862 uiSum += abs( piOrg[13] - piCur[13] - iDeltaC ); 1863 uiSum += abs( piOrg[14] - piCur[14] - iDeltaC ); 1864 uiSum += abs( piOrg[15] - piCur[15] - iDeltaC ); 1865 uiSum += abs( piOrg[16] - piCur[16] - iDeltaC ); 1866 uiSum += abs( piOrg[17] - piCur[17] - iDeltaC ); 1867 uiSum += abs( piOrg[18] - piCur[18] - iDeltaC ); 1868 uiSum += abs( piOrg[19] - piCur[19] - iDeltaC ); 1869 uiSum += abs( piOrg[20] - piCur[20] - iDeltaC ); 1870 uiSum += abs( piOrg[21] - piCur[21] - iDeltaC ); 1871 uiSum += abs( piOrg[22] - piCur[22] - iDeltaC ); 1872 uiSum += abs( piOrg[23] - piCur[23] - iDeltaC ); 1873 1874 piOrg += iStrideOrg; 1875 piCur += iStrideCur; 1876 } 1877 1878 uiSum <<= iSubShift; 1879 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 1880 } 1881 #endif 1882 1883 UInt TComRdCost::xGetSAD64ic( DistParam* pcDtParam ) 1884 { 1885 if ( pcDtParam->bApplyWeight ) 1886 { 1887 return xGetSADw( pcDtParam ); 1888 } 1889 Pel* piOrg = pcDtParam->pOrg; 1890 Pel* piCur = pcDtParam->pCur; 1891 Int iRows = pcDtParam->iRows; 1892 Int iSubShift = pcDtParam->iSubShift; 1893 Int iSubStep = ( 1 << iSubShift ); 1894 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 1895 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 1896 1897 UInt uiSum = 0; 1898 1899 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 1900 Int iDeltaC; 1901 1902 for( ; iRows != 0; iRows-=iSubStep ) 1903 { 1904 iOrigAvg += piOrg[0] ; 1905 iOrigAvg += piOrg[1] ; 1906 iOrigAvg += piOrg[2] ; 1907 iOrigAvg += piOrg[3] ; 1908 iOrigAvg += piOrg[4] ; 1909 iOrigAvg += piOrg[5] ; 1910 iOrigAvg += piOrg[6] ; 1911 iOrigAvg += piOrg[7] ; 1912 iOrigAvg += piOrg[8] ; 1913 iOrigAvg += piOrg[9] ; 1914 iOrigAvg += piOrg[10] ; 1915 iOrigAvg += piOrg[11] ; 1916 iOrigAvg += piOrg[12] ; 1917 iOrigAvg += piOrg[13] ; 1918 iOrigAvg += piOrg[14] ; 1919 iOrigAvg += piOrg[15] ; 1920 iOrigAvg += piOrg[16] ; 1921 iOrigAvg += piOrg[17] ; 1922 iOrigAvg += piOrg[18] ; 1923 iOrigAvg += piOrg[19] ; 1924 iOrigAvg += piOrg[20] ; 1925 iOrigAvg += piOrg[21] ; 1926 iOrigAvg += piOrg[22] ; 1927 iOrigAvg += piOrg[23] ; 1928 iOrigAvg += piOrg[24] ; 1929 iOrigAvg += piOrg[25] ; 1930 iOrigAvg += piOrg[26] ; 1931 iOrigAvg += piOrg[27] ; 1932 iOrigAvg += piOrg[28] ; 1933 iOrigAvg += piOrg[29] ; 1934 iOrigAvg += piOrg[30] ; 1935 iOrigAvg += piOrg[31] ; 1936 iOrigAvg += piOrg[32] ; 1937 iOrigAvg += piOrg[33] ; 1938 iOrigAvg += piOrg[34] ; 1939 iOrigAvg += piOrg[35] ; 1940 iOrigAvg += piOrg[36] ; 1941 iOrigAvg += piOrg[37] ; 1942 iOrigAvg += piOrg[38] ; 1943 iOrigAvg += piOrg[39] ; 1944 iOrigAvg += piOrg[40] ; 1945 iOrigAvg += piOrg[41] ; 1946 iOrigAvg += piOrg[42] ; 1947 iOrigAvg += piOrg[43] ; 1948 iOrigAvg += piOrg[44] ; 1949 iOrigAvg += piOrg[45] ; 1950 iOrigAvg += piOrg[46] ; 1951 iOrigAvg += piOrg[47] ; 1952 iOrigAvg += piOrg[48] ; 1953 iOrigAvg += piOrg[49] ; 1954 iOrigAvg += piOrg[50] ; 1955 iOrigAvg += piOrg[51] ; 1956 iOrigAvg += piOrg[52] ; 1957 iOrigAvg += piOrg[53] ; 1958 iOrigAvg += piOrg[54] ; 1959 iOrigAvg += piOrg[55] ; 1960 iOrigAvg += piOrg[56] ; 1961 iOrigAvg += piOrg[57] ; 1962 iOrigAvg += piOrg[58] ; 1963 iOrigAvg += piOrg[59] ; 1964 iOrigAvg += piOrg[60] ; 1965 iOrigAvg += piOrg[61] ; 1966 iOrigAvg += piOrg[62] ; 1967 iOrigAvg += piOrg[63] ; 1968 1969 iCurAvg += piCur[0] ; 1970 iCurAvg += piCur[1] ; 1971 iCurAvg += piCur[2] ; 1972 iCurAvg += piCur[3] ; 1973 iCurAvg += piCur[4] ; 1974 iCurAvg += piCur[5] ; 1975 iCurAvg += piCur[6] ; 1976 iCurAvg += piCur[7] ; 1977 iCurAvg += piCur[8] ; 1978 iCurAvg += piCur[9] ; 1979 iCurAvg += piCur[10] ; 1980 iCurAvg += piCur[11] ; 1981 iCurAvg += piCur[12] ; 1982 iCurAvg += piCur[13] ; 1983 iCurAvg += piCur[14] ; 1984 iCurAvg += piCur[15] ; 1985 iCurAvg += piCur[16] ; 1986 iCurAvg += piCur[17] ; 1987 iCurAvg += piCur[18] ; 1988 iCurAvg += piCur[19] ; 1989 iCurAvg += piCur[20] ; 1990 iCurAvg += piCur[21] ; 1991 iCurAvg += piCur[22] ; 1992 iCurAvg += piCur[23] ; 1993 iCurAvg += piCur[24] ; 1994 iCurAvg += piCur[25] ; 1995 iCurAvg += piCur[26] ; 1996 iCurAvg += piCur[27] ; 1997 iCurAvg += piCur[28] ; 1998 iCurAvg += piCur[29] ; 1999 iCurAvg += piCur[30] ; 2000 iCurAvg += piCur[31] ; 2001 iCurAvg += piCur[32] ; 2002 iCurAvg += piCur[33] ; 2003 iCurAvg += piCur[34] ; 2004 iCurAvg += piCur[35] ; 2005 iCurAvg += piCur[36] ; 2006 iCurAvg += piCur[37] ; 2007 iCurAvg += piCur[38] ; 2008 iCurAvg += piCur[39] ; 2009 iCurAvg += piCur[40] ; 2010 iCurAvg += piCur[41] ; 2011 iCurAvg += piCur[42] ; 2012 iCurAvg += piCur[43] ; 2013 iCurAvg += piCur[44] ; 2014 iCurAvg += piCur[45] ; 2015 iCurAvg += piCur[46] ; 2016 iCurAvg += piCur[47] ; 2017 iCurAvg += piCur[48] ; 2018 iCurAvg += piCur[49] ; 2019 iCurAvg += piCur[50] ; 2020 iCurAvg += piCur[51] ; 2021 iCurAvg += piCur[52] ; 2022 iCurAvg += piCur[53] ; 2023 iCurAvg += piCur[54] ; 2024 iCurAvg += piCur[55] ; 2025 iCurAvg += piCur[56] ; 2026 iCurAvg += piCur[57] ; 2027 iCurAvg += piCur[58] ; 2028 iCurAvg += piCur[59] ; 2029 iCurAvg += piCur[60] ; 2030 iCurAvg += piCur[61] ; 2031 iCurAvg += piCur[62] ; 2032 iCurAvg += piCur[63] ; 2033 2034 piOrg += iStrideOrg; 2035 piCur += iStrideCur; 2036 uiRowCnt++; 2037 } 2038 2039 piOrg = pcDtParam->pOrg; 2040 piCur = pcDtParam->pCur; 2041 iRows = pcDtParam->iRows; 2042 2043 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/64) : 0; 2044 2045 for( ; iRows != 0; iRows-=iSubStep ) 2046 { 2047 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 2048 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 2049 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 2050 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 2051 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 2052 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 2053 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 2054 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 2055 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 2056 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 2057 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 2058 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 2059 uiSum += abs( piOrg[12] - piCur[12] - iDeltaC ); 2060 uiSum += abs( piOrg[13] - piCur[13] - iDeltaC ); 2061 uiSum += abs( piOrg[14] - piCur[14] - iDeltaC ); 2062 uiSum += abs( piOrg[15] - piCur[15] - iDeltaC ); 2063 uiSum += abs( piOrg[16] - piCur[16] - iDeltaC ); 2064 uiSum += abs( piOrg[17] - piCur[17] - iDeltaC ); 2065 uiSum += abs( piOrg[18] - piCur[18] - iDeltaC ); 2066 uiSum += abs( piOrg[19] - piCur[19] - iDeltaC ); 2067 uiSum += abs( piOrg[20] - piCur[20] - iDeltaC ); 2068 uiSum += abs( piOrg[21] - piCur[21] - iDeltaC ); 2069 uiSum += abs( piOrg[22] - piCur[22] - iDeltaC ); 2070 uiSum += abs( piOrg[23] - piCur[23] - iDeltaC ); 2071 uiSum += abs( piOrg[24] - piCur[24] - iDeltaC ); 2072 uiSum += abs( piOrg[25] - piCur[25] - iDeltaC ); 2073 uiSum += abs( piOrg[26] - piCur[26] - iDeltaC ); 2074 uiSum += abs( piOrg[27] - piCur[27] - iDeltaC ); 2075 uiSum += abs( piOrg[28] - piCur[28] - iDeltaC ); 2076 uiSum += abs( piOrg[29] - piCur[29] - iDeltaC ); 2077 uiSum += abs( piOrg[30] - piCur[30] - iDeltaC ); 2078 uiSum += abs( piOrg[31] - piCur[31] - iDeltaC ); 2079 uiSum += abs( piOrg[32] - piCur[32] - iDeltaC ); 2080 uiSum += abs( piOrg[33] - piCur[33] - iDeltaC ); 2081 uiSum += abs( piOrg[34] - piCur[34] - iDeltaC ); 2082 uiSum += abs( piOrg[35] - piCur[35] - iDeltaC ); 2083 uiSum += abs( piOrg[36] - piCur[36] - iDeltaC ); 2084 uiSum += abs( piOrg[37] - piCur[37] - iDeltaC ); 2085 uiSum += abs( piOrg[38] - piCur[38] - iDeltaC ); 2086 uiSum += abs( piOrg[39] - piCur[39] - iDeltaC ); 2087 uiSum += abs( piOrg[40] - piCur[40] - iDeltaC ); 2088 uiSum += abs( piOrg[41] - piCur[41] - iDeltaC ); 2089 uiSum += abs( piOrg[42] - piCur[42] - iDeltaC ); 2090 uiSum += abs( piOrg[43] - piCur[43] - iDeltaC ); 2091 uiSum += abs( piOrg[44] - piCur[44] - iDeltaC ); 2092 uiSum += abs( piOrg[45] - piCur[45] - iDeltaC ); 2093 uiSum += abs( piOrg[46] - piCur[46] - iDeltaC ); 2094 uiSum += abs( piOrg[47] - piCur[47] - iDeltaC ); 2095 uiSum += abs( piOrg[48] - piCur[48] - iDeltaC ); 2096 uiSum += abs( piOrg[49] - piCur[49] - iDeltaC ); 2097 uiSum += abs( piOrg[50] - piCur[50] - iDeltaC ); 2098 uiSum += abs( piOrg[51] - piCur[51] - iDeltaC ); 2099 uiSum += abs( piOrg[52] - piCur[52] - iDeltaC ); 2100 uiSum += abs( piOrg[53] - piCur[53] - iDeltaC ); 2101 uiSum += abs( piOrg[54] - piCur[54] - iDeltaC ); 2102 uiSum += abs( piOrg[55] - piCur[55] - iDeltaC ); 2103 uiSum += abs( piOrg[56] - piCur[56] - iDeltaC ); 2104 uiSum += abs( piOrg[57] - piCur[57] - iDeltaC ); 2105 uiSum += abs( piOrg[58] - piCur[58] - iDeltaC ); 2106 uiSum += abs( piOrg[59] - piCur[59] - iDeltaC ); 2107 uiSum += abs( piOrg[60] - piCur[60] - iDeltaC ); 2108 uiSum += abs( piOrg[61] - piCur[61] - iDeltaC ); 2109 uiSum += abs( piOrg[62] - piCur[62] - iDeltaC ); 2110 uiSum += abs( piOrg[63] - piCur[63] - iDeltaC ); 2111 2112 piOrg += iStrideOrg; 2113 piCur += iStrideCur; 2114 } 2115 2116 uiSum <<= iSubShift; 2117 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 2118 } 2119 2120 #if AMP_SAD 2121 UInt TComRdCost::xGetSAD48ic( DistParam* pcDtParam ) 2122 { 2123 if ( pcDtParam->bApplyWeight ) 2124 { 2125 return xGetSADw( pcDtParam ); 2126 } 2127 2128 Pel* piOrg = pcDtParam->pOrg; 2129 Pel* piCur = pcDtParam->pCur; 2130 Int iRows = pcDtParam->iRows; 2131 Int iSubShift = pcDtParam->iSubShift; 2132 Int iSubStep = ( 1 << iSubShift ); 2133 Int iStrideCur = pcDtParam->iStrideCur*iSubStep; 2134 Int iStrideOrg = pcDtParam->iStrideOrg*iSubStep; 2135 2136 UInt uiSum = 0; 2137 2138 Int iOrigAvg = 0, iCurAvg = 0, uiRowCnt = 0; 2139 Int iDeltaC; 2140 2141 for( ; iRows != 0; iRows-=iSubStep ) 2142 { 2143 iOrigAvg += piOrg[0] ; 2144 iOrigAvg += piOrg[1] ; 2145 iOrigAvg += piOrg[2] ; 2146 iOrigAvg += piOrg[3] ; 2147 iOrigAvg += piOrg[4] ; 2148 iOrigAvg += piOrg[5] ; 2149 iOrigAvg += piOrg[6] ; 2150 iOrigAvg += piOrg[7] ; 2151 iOrigAvg += piOrg[8] ; 2152 iOrigAvg += piOrg[9] ; 2153 iOrigAvg += piOrg[10] ; 2154 iOrigAvg += piOrg[11] ; 2155 iOrigAvg += piOrg[12] ; 2156 iOrigAvg += piOrg[13] ; 2157 iOrigAvg += piOrg[14] ; 2158 iOrigAvg += piOrg[15] ; 2159 iOrigAvg += piOrg[16] ; 2160 iOrigAvg += piOrg[17] ; 2161 iOrigAvg += piOrg[18] ; 2162 iOrigAvg += piOrg[19] ; 2163 iOrigAvg += piOrg[20] ; 2164 iOrigAvg += piOrg[21] ; 2165 iOrigAvg += piOrg[22] ; 2166 iOrigAvg += piOrg[23] ; 2167 iOrigAvg += piOrg[24] ; 2168 iOrigAvg += piOrg[25] ; 2169 iOrigAvg += piOrg[26] ; 2170 iOrigAvg += piOrg[27] ; 2171 iOrigAvg += piOrg[28] ; 2172 iOrigAvg += piOrg[29] ; 2173 iOrigAvg += piOrg[30] ; 2174 iOrigAvg += piOrg[31] ; 2175 iOrigAvg += piOrg[32] ; 2176 iOrigAvg += piOrg[33] ; 2177 iOrigAvg += piOrg[34] ; 2178 iOrigAvg += piOrg[35] ; 2179 iOrigAvg += piOrg[36] ; 2180 iOrigAvg += piOrg[37] ; 2181 iOrigAvg += piOrg[38] ; 2182 iOrigAvg += piOrg[39] ; 2183 iOrigAvg += piOrg[40] ; 2184 iOrigAvg += piOrg[41] ; 2185 iOrigAvg += piOrg[42] ; 2186 iOrigAvg += piOrg[43] ; 2187 iOrigAvg += piOrg[44] ; 2188 iOrigAvg += piOrg[45] ; 2189 iOrigAvg += piOrg[46] ; 2190 iOrigAvg += piOrg[47] ; 2191 2192 iCurAvg += piCur[0] ; 2193 iCurAvg += piCur[1] ; 2194 iCurAvg += piCur[2] ; 2195 iCurAvg += piCur[3] ; 2196 iCurAvg += piCur[4] ; 2197 iCurAvg += piCur[5] ; 2198 iCurAvg += piCur[6] ; 2199 iCurAvg += piCur[7] ; 2200 iCurAvg += piCur[8] ; 2201 iCurAvg += piCur[9] ; 2202 iCurAvg += piCur[10] ; 2203 iCurAvg += piCur[11] ; 2204 iCurAvg += piCur[12] ; 2205 iCurAvg += piCur[13] ; 2206 iCurAvg += piCur[14] ; 2207 iCurAvg += piCur[15] ; 2208 iCurAvg += piCur[16] ; 2209 iCurAvg += piCur[17] ; 2210 iCurAvg += piCur[18] ; 2211 iCurAvg += piCur[19] ; 2212 iCurAvg += piCur[20] ; 2213 iCurAvg += piCur[21] ; 2214 iCurAvg += piCur[22] ; 2215 iCurAvg += piCur[23] ; 2216 iCurAvg += piCur[24] ; 2217 iCurAvg += piCur[25] ; 2218 iCurAvg += piCur[26] ; 2219 iCurAvg += piCur[27] ; 2220 iCurAvg += piCur[28] ; 2221 iCurAvg += piCur[29] ; 2222 iCurAvg += piCur[30] ; 2223 iCurAvg += piCur[31] ; 2224 iCurAvg += piCur[32] ; 2225 iCurAvg += piCur[33] ; 2226 iCurAvg += piCur[34] ; 2227 iCurAvg += piCur[35] ; 2228 iCurAvg += piCur[36] ; 2229 iCurAvg += piCur[37] ; 2230 iCurAvg += piCur[38] ; 2231 iCurAvg += piCur[39] ; 2232 iCurAvg += piCur[40] ; 2233 iCurAvg += piCur[41] ; 2234 iCurAvg += piCur[42] ; 2235 iCurAvg += piCur[43] ; 2236 iCurAvg += piCur[44] ; 2237 iCurAvg += piCur[45] ; 2238 iCurAvg += piCur[46] ; 2239 iCurAvg += piCur[47] ; 2240 2241 piOrg += iStrideOrg; 2242 piCur += iStrideCur; 2243 uiRowCnt++; 2244 } 2245 2246 piOrg = pcDtParam->pOrg; 2247 piCur = pcDtParam->pCur; 2248 iRows = pcDtParam->iRows; 2249 2250 iDeltaC = uiRowCnt ? ((iOrigAvg - iCurAvg)/uiRowCnt/48) : 0; 2251 2252 for( ; iRows != 0; iRows-=iSubStep ) 2253 { 2254 uiSum += abs( piOrg[0] - piCur[0] - iDeltaC ); 2255 uiSum += abs( piOrg[1] - piCur[1] - iDeltaC ); 2256 uiSum += abs( piOrg[2] - piCur[2] - iDeltaC ); 2257 uiSum += abs( piOrg[3] - piCur[3] - iDeltaC ); 2258 uiSum += abs( piOrg[4] - piCur[4] - iDeltaC ); 2259 uiSum += abs( piOrg[5] - piCur[5] - iDeltaC ); 2260 uiSum += abs( piOrg[6] - piCur[6] - iDeltaC ); 2261 uiSum += abs( piOrg[7] - piCur[7] - iDeltaC ); 2262 uiSum += abs( piOrg[8] - piCur[8] - iDeltaC ); 2263 uiSum += abs( piOrg[9] - piCur[9] - iDeltaC ); 2264 uiSum += abs( piOrg[10] - piCur[10] - iDeltaC ); 2265 uiSum += abs( piOrg[11] - piCur[11] - iDeltaC ); 2266 uiSum += abs( piOrg[12] - piCur[12] - iDeltaC ); 2267 uiSum += abs( piOrg[13] - piCur[13] - iDeltaC ); 2268 uiSum += abs( piOrg[14] - piCur[14] - iDeltaC ); 2269 uiSum += abs( piOrg[15] - piCur[15] - iDeltaC ); 2270 uiSum += abs( piOrg[16] - piCur[16] - iDeltaC ); 2271 uiSum += abs( piOrg[17] - piCur[17] - iDeltaC ); 2272 uiSum += abs( piOrg[18] - piCur[18] - iDeltaC ); 2273 uiSum += abs( piOrg[19] - piCur[19] - iDeltaC ); 2274 uiSum += abs( piOrg[20] - piCur[20] - iDeltaC ); 2275 uiSum += abs( piOrg[21] - piCur[21] - iDeltaC ); 2276 uiSum += abs( piOrg[22] - piCur[22] - iDeltaC ); 2277 uiSum += abs( piOrg[23] - piCur[23] - iDeltaC ); 2278 uiSum += abs( piOrg[24] - piCur[24] - iDeltaC ); 2279 uiSum += abs( piOrg[25] - piCur[25] - iDeltaC ); 2280 uiSum += abs( piOrg[26] - piCur[26] - iDeltaC ); 2281 uiSum += abs( piOrg[27] - piCur[27] - iDeltaC ); 2282 uiSum += abs( piOrg[28] - piCur[28] - iDeltaC ); 2283 uiSum += abs( piOrg[29] - piCur[29] - iDeltaC ); 2284 uiSum += abs( piOrg[30] - piCur[30] - iDeltaC ); 2285 uiSum += abs( piOrg[31] - piCur[31] - iDeltaC ); 2286 uiSum += abs( piOrg[32] - piCur[32] - iDeltaC ); 2287 uiSum += abs( piOrg[33] - piCur[33] - iDeltaC ); 2288 uiSum += abs( piOrg[34] - piCur[34] - iDeltaC ); 2289 uiSum += abs( piOrg[35] - piCur[35] - iDeltaC ); 2290 uiSum += abs( piOrg[36] - piCur[36] - iDeltaC ); 2291 uiSum += abs( piOrg[37] - piCur[37] - iDeltaC ); 2292 uiSum += abs( piOrg[38] - piCur[38] - iDeltaC ); 2293 uiSum += abs( piOrg[39] - piCur[39] - iDeltaC ); 2294 uiSum += abs( piOrg[40] - piCur[40] - iDeltaC ); 2295 uiSum += abs( piOrg[41] - piCur[41] - iDeltaC ); 2296 uiSum += abs( piOrg[42] - piCur[42] - iDeltaC ); 2297 uiSum += abs( piOrg[43] - piCur[43] - iDeltaC ); 2298 uiSum += abs( piOrg[44] - piCur[44] - iDeltaC ); 2299 uiSum += abs( piOrg[45] - piCur[45] - iDeltaC ); 2300 uiSum += abs( piOrg[46] - piCur[46] - iDeltaC ); 2301 uiSum += abs( piOrg[47] - piCur[47] - iDeltaC ); 2302 2303 piOrg += iStrideOrg; 2304 piCur += iStrideCur; 2305 } 2306 2307 uiSum <<= iSubShift; 2308 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 2309 } 2310 #endif 2311 2312 #endif 1096 2313 // -------------------------------------------------------------------------------------------------------------------- 1097 2314 // SSE … … 2206 3423 return xGetHADsw( pcDtParam ); 2207 3424 } 3425 3426 #if H_3D_IC 3427 if( pcDtParam->bUseIC ) 3428 { 3429 return xGetHADsic( pcDtParam ); 3430 } 3431 #endif 3432 2208 3433 Pel* piOrg = pcDtParam->pOrg; 2209 3434 Pel* piCur = pcDtParam->pCur; … … 2302 3527 return uiSum >> DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth-8); 2303 3528 } 3529 3530 #if H_3D_IC 3531 UInt TComRdCost::xGetHADsic( DistParam* pcDtParam ) 3532 { 3533 if ( pcDtParam->bApplyWeight ) 3534 { 3535 return xGetHADsw( pcDtParam ); 3536 } 3537 Pel* piOrg = pcDtParam->pOrg; 3538 Pel* piCur = pcDtParam->pCur; 3539 Int iRows = pcDtParam->iRows; 3540 Int iCols = pcDtParam->iCols; 3541 Int iStrideCur = pcDtParam->iStrideCur; 3542 Int iStrideOrg = pcDtParam->iStrideOrg; 3543 Int iStep = pcDtParam->iStep; 3544 3545 Int x, y; 3546 3547 UInt uiSum = 0; 3548 3549 Int iOrigAvg = 0, iCurAvg = 0; 3550 Int iDeltaC; 3551 3552 for ( y=0; y<iRows; y++ ) 3553 { 3554 for ( x=0; x<iCols; x++ ) 3555 { 3556 iOrigAvg += piOrg[x]; 3557 iCurAvg += piCur[x]; 3558 } 3559 piOrg += iStrideOrg; 3560 piCur += iStrideCur; 3561 } 3562 3563 piOrg = pcDtParam->pOrg; 3564 piCur = pcDtParam->pCur; 3565 3566 iDeltaC = (iOrigAvg - iCurAvg)/iRows/iCols; 3567 3568 for ( y=0; y<iRows; y++ ) 3569 { 3570 for ( x=0; x<iCols; x++ ) 3571 { 3572 piOrg[x] -= iDeltaC; 3573 } 3574 piOrg += iStrideOrg; 3575 } 3576 3577 piOrg = pcDtParam->pOrg; 3578 3579 #if NS_HAD 3580 if( ( ( iRows % 8 == 0) && (iCols % 8 == 0) && ( iRows == iCols ) ) || ( ( iRows % 8 == 0 ) && (iCols % 8 == 0) && !pcDtParam->bUseNSHAD ) ) 3581 #else 3582 if( ( iRows % 8 == 0) && (iCols % 8 == 0) ) 3583 #endif 3584 { 3585 Int iOffsetOrg = iStrideOrg<<3; 3586 Int iOffsetCur = iStrideCur<<3; 3587 for ( y=0; y<iRows; y+= 8 ) 3588 { 3589 for ( x=0; x<iCols; x+= 8 ) 3590 { 3591 uiSum += xCalcHADs8x8( &piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3592 } 3593 piOrg += iOffsetOrg; 3594 piCur += iOffsetCur; 3595 } 3596 } 3597 #if NS_HAD 3598 else if ( ( iCols > 8 ) && ( iCols > iRows ) && pcDtParam->bUseNSHAD ) 3599 { 3600 Int iOffsetOrg = iStrideOrg<<2; 3601 Int iOffsetCur = iStrideCur<<2; 3602 for ( y=0; y<iRows; y+= 4 ) 3603 { 3604 for ( x=0; x<iCols; x+= 16 ) 3605 { 3606 uiSum += xCalcHADs16x4( &piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3607 } 3608 piOrg += iOffsetOrg; 3609 piCur += iOffsetCur; 3610 } 3611 } 3612 else if ( ( iRows > 8 ) && ( iCols < iRows ) && pcDtParam->bUseNSHAD ) 3613 { 3614 Int iOffsetOrg = iStrideOrg<<4; 3615 Int iOffsetCur = iStrideCur<<4; 3616 for ( y=0; y<iRows; y+= 16 ) 3617 { 3618 for ( x=0; x<iCols; x+= 4 ) 3619 { 3620 uiSum += xCalcHADs4x16( &piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3621 } 3622 piOrg += iOffsetOrg; 3623 piCur += iOffsetCur; 3624 } 3625 } 3626 #endif 3627 else if( ( iRows % 4 == 0) && (iCols % 4 == 0) ) 3628 { 3629 Int iOffsetOrg = iStrideOrg<<2; 3630 Int iOffsetCur = iStrideCur<<2; 3631 3632 for ( y=0; y<iRows; y+= 4 ) 3633 { 3634 for ( x=0; x<iCols; x+= 4 ) 3635 { 3636 uiSum += xCalcHADs4x4( &piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3637 } 3638 piOrg += iOffsetOrg; 3639 piCur += iOffsetCur; 3640 } 3641 } 3642 else if( ( iRows % 2 == 0) && (iCols % 2 == 0) ) 3643 { 3644 Int iOffsetOrg = iStrideOrg<<1; 3645 Int iOffsetCur = iStrideCur<<1; 3646 for ( y=0; y<iRows; y+=2 ) 3647 { 3648 for ( x=0; x<iCols; x+=2 ) 3649 { 3650 uiSum += xCalcHADs2x2( &piOrg[x], &piCur[x*iStep], iStrideOrg, iStrideCur, iStep ); 3651 } 3652 piOrg += iOffsetOrg; 3653 piCur += iOffsetCur; 3654 } 3655 } 3656 else 3657 { 3658 assert(false); 3659 } 3660 3661 piOrg = pcDtParam->pOrg; 3662 3663 for ( y=0; y<iRows; y++ ) 3664 { 3665 for ( x=0; x<iCols; x++ ) 3666 { 3667 piOrg[x] += iDeltaC; 3668 } 3669 piOrg += iStrideOrg; 3670 } 3671 3672 return ( uiSum >> DISTORTION_PRECISION_ADJUSTMENT( pcDtParam->bitDepth - 8 ) ); 3673 } 3674 #endif 3675 2304 3676 #if H_3D_VSO 2305 3677 Void TComRdCost::setLambdaVSO( Double dLambdaVSO )
Note: See TracChangeset for help on using the changeset viewer.