Ignore:
Timestamp:
16 Jun 2013, 05:33:39 (11 years ago)
Author:
lg
Message:

1.IC and full pel depth coding are integrated and is guarded by Macro H_3D_IC.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-0.3-dev2a/source/Lib/TLibCommon/TComRdCost.cpp

    r446 r468  
    502502  cDtParam.bitDepth = bitDepth;
    503503
     504#if H_3D_IC
     505  cDtParam.bUseIC       = false;
     506#endif
     507
    504508#if WEIGHTED_CHROMA_DISTORTION
    505509  if (eText == TEXT_CHROMA_U)
     
    599603    return xGetSADw( pcDtParam );
    600604  }
     605
     606#if H_3D_IC
     607  if( pcDtParam->bUseIC )
     608  {
     609    return xGetSADic( pcDtParam );
     610  }
     611#endif
     612
    601613  Pel* piOrg   = pcDtParam->pOrg;
    602614  Pel* piCur   = pcDtParam->pCur;
     
    627639    return xGetSADw( pcDtParam );
    628640  }
     641
     642#if H_3D_IC
     643  if( pcDtParam->bUseIC )
     644  {
     645    return xGetSAD4ic( pcDtParam );
     646  }
     647#endif
     648
    629649  Pel* piOrg   = pcDtParam->pOrg;
    630650  Pel* piCur   = pcDtParam->pCur;
     
    658678    return xGetSADw( pcDtParam );
    659679  }
     680
     681#if H_3D_IC
     682  if( pcDtParam->bUseIC )
     683  {
     684    return xGetSAD8ic( pcDtParam );
     685  }
     686#endif
     687
    660688  Pel* piOrg      = pcDtParam->pOrg;
    661689  Pel* piCur      = pcDtParam->pCur;
     
    693721    return xGetSADw( pcDtParam );
    694722  }
     723
     724#if H_3D_IC
     725  if( pcDtParam->bUseIC )
     726  {
     727    return xGetSAD16ic( pcDtParam );
     728  }
     729#endif
     730
    695731  Pel* piOrg   = pcDtParam->pOrg;
    696732  Pel* piCur   = pcDtParam->pCur;
     
    737773    return xGetSADw( pcDtParam );
    738774  }
     775
     776#if H_3D_IC
     777  if( pcDtParam->bUseIC )
     778  {
     779    return xGetSAD12ic( pcDtParam );
     780  }
     781#endif
     782
    739783  Pel* piOrg   = pcDtParam->pOrg;
    740784  Pel* piCur   = pcDtParam->pCur;
     
    773817UInt TComRdCost::xGetSAD16N( DistParam* pcDtParam )
    774818{
     819#if H_3D_IC
     820  if( pcDtParam->bUseIC )
     821  {
     822    return xGetSAD16Nic( pcDtParam );
     823  }
     824#endif
     825
    775826  Pel* piOrg   = pcDtParam->pOrg;
    776827  Pel* piCur   = pcDtParam->pCur;
     
    819870    return xGetSADw( pcDtParam );
    820871  }
     872
     873#if H_3D_IC
     874  if( pcDtParam->bUseIC )
     875  {
     876    return xGetSAD32ic( pcDtParam );
     877  }
     878#endif
     879
    821880  Pel* piOrg   = pcDtParam->pOrg;
    822881  Pel* piCur   = pcDtParam->pCur;
     
    879938    return xGetSADw( pcDtParam );
    880939  }
     940
     941#if H_3D_IC
     942  if( pcDtParam->bUseIC )
     943  {
     944    return xGetSAD24ic( pcDtParam );
     945  }
     946#endif
     947
    881948  Pel* piOrg   = pcDtParam->pOrg;
    882949  Pel* piCur   = pcDtParam->pCur;
     
    932999    return xGetSADw( pcDtParam );
    9331000  }
     1001
     1002#if H_3D_IC
     1003  if( pcDtParam->bUseIC )
     1004  {
     1005    return xGetSAD64ic( pcDtParam );
     1006  }
     1007#endif
     1008
    9341009  Pel* piOrg   = pcDtParam->pOrg;
    9351010  Pel* piCur   = pcDtParam->pCur;
     
    10241099    return xGetSADw( pcDtParam );
    10251100  }
     1101
     1102#if H_3D_IC
     1103  if( pcDtParam->bUseIC )
     1104  {
     1105    return xGetSAD48ic( pcDtParam );
     1106  }
     1107#endif
     1108
    10261109  Pel* piOrg   = pcDtParam->pOrg;
    10271110  Pel* piCur   = pcDtParam->pCur;
     
    10941177#endif
    10951178
     1179#if H_3D_IC
     1180UInt 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
     1228UInt 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
     1285UInt 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
     1354UInt 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
     1448UInt 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
     1530UInt 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
     1623UInt 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
     1765UInt 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
     1883UInt 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
     2121UInt 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
    10962313// --------------------------------------------------------------------------------------------------------------------
    10972314// SSE
     
    22063423    return xGetHADsw( pcDtParam );
    22073424  }
     3425
     3426#if H_3D_IC
     3427  if( pcDtParam->bUseIC )
     3428  {
     3429    return xGetHADsic( pcDtParam );
     3430  }
     3431#endif
     3432
    22083433  Pel* piOrg   = pcDtParam->pOrg;
    22093434  Pel* piCur   = pcDtParam->pCur;
     
    23023527  return uiSum >> DISTORTION_PRECISION_ADJUSTMENT(pcDtParam->bitDepth-8);
    23033528}
     3529
     3530#if H_3D_IC
     3531UInt 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
    23043676#if H_3D_VSO
    23053677Void TComRdCost::setLambdaVSO( Double dLambdaVSO )
Note: See TracChangeset for help on using the changeset viewer.