Changeset 537 in 3DVCSoftware for branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCu.cpp
- Timestamp:
- 13 Jul 2013, 15:51:26 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCu.cpp
r531 r537 103 103 104 104 m_bEncodeDQP = false; 105 #if RATE_CONTROL_LAMBDA_DOMAIN 105 #if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT 106 106 m_LCUPredictionSAD = 0; 107 107 m_addSADDepth = 0; … … 256 256 m_ppcTempCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() ); 257 257 258 #if RATE_CONTROL_LAMBDA_DOMAIN 258 #if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT 259 259 m_addSADDepth = 0; 260 260 m_LCUPredictionSAD = 0; … … 592 592 } 593 593 594 #if RATE_CONTROL_LAMBDA_DOMAIN 594 #if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT 595 595 if ( uiDepth <= m_addSADDepth ) 596 596 { … … 862 862 { 863 863 bBoundary = true; 864 #if RATE_CONTROL_LAMBDA_DOMAIN 864 #if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT 865 865 m_addSADDepth++; 866 866 #endif … … 1348 1348 } 1349 1349 1350 #if RATE_CONTROL_INTRA 1351 Int xCalcHADs8x8_ISlice(Pel *piOrg, Int iStrideOrg) 1352 { 1353 Int k, i, j, jj; 1354 Int diff[64], m1[8][8], m2[8][8], m3[8][8], iSumHad = 0; 1355 1356 for( k = 0; k < 64; k += 8 ) 1357 { 1358 diff[k+0] = piOrg[0] ; 1359 diff[k+1] = piOrg[1] ; 1360 diff[k+2] = piOrg[2] ; 1361 diff[k+3] = piOrg[3] ; 1362 diff[k+4] = piOrg[4] ; 1363 diff[k+5] = piOrg[5] ; 1364 diff[k+6] = piOrg[6] ; 1365 diff[k+7] = piOrg[7] ; 1366 1367 piOrg += iStrideOrg; 1368 } 1369 1370 //horizontal 1371 for (j=0; j < 8; j++) 1372 { 1373 jj = j << 3; 1374 m2[j][0] = diff[jj ] + diff[jj+4]; 1375 m2[j][1] = diff[jj+1] + diff[jj+5]; 1376 m2[j][2] = diff[jj+2] + diff[jj+6]; 1377 m2[j][3] = diff[jj+3] + diff[jj+7]; 1378 m2[j][4] = diff[jj ] - diff[jj+4]; 1379 m2[j][5] = diff[jj+1] - diff[jj+5]; 1380 m2[j][6] = diff[jj+2] - diff[jj+6]; 1381 m2[j][7] = diff[jj+3] - diff[jj+7]; 1382 1383 m1[j][0] = m2[j][0] + m2[j][2]; 1384 m1[j][1] = m2[j][1] + m2[j][3]; 1385 m1[j][2] = m2[j][0] - m2[j][2]; 1386 m1[j][3] = m2[j][1] - m2[j][3]; 1387 m1[j][4] = m2[j][4] + m2[j][6]; 1388 m1[j][5] = m2[j][5] + m2[j][7]; 1389 m1[j][6] = m2[j][4] - m2[j][6]; 1390 m1[j][7] = m2[j][5] - m2[j][7]; 1391 1392 m2[j][0] = m1[j][0] + m1[j][1]; 1393 m2[j][1] = m1[j][0] - m1[j][1]; 1394 m2[j][2] = m1[j][2] + m1[j][3]; 1395 m2[j][3] = m1[j][2] - m1[j][3]; 1396 m2[j][4] = m1[j][4] + m1[j][5]; 1397 m2[j][5] = m1[j][4] - m1[j][5]; 1398 m2[j][6] = m1[j][6] + m1[j][7]; 1399 m2[j][7] = m1[j][6] - m1[j][7]; 1400 } 1401 1402 //vertical 1403 for (i=0; i < 8; i++) 1404 { 1405 m3[0][i] = m2[0][i] + m2[4][i]; 1406 m3[1][i] = m2[1][i] + m2[5][i]; 1407 m3[2][i] = m2[2][i] + m2[6][i]; 1408 m3[3][i] = m2[3][i] + m2[7][i]; 1409 m3[4][i] = m2[0][i] - m2[4][i]; 1410 m3[5][i] = m2[1][i] - m2[5][i]; 1411 m3[6][i] = m2[2][i] - m2[6][i]; 1412 m3[7][i] = m2[3][i] - m2[7][i]; 1413 1414 m1[0][i] = m3[0][i] + m3[2][i]; 1415 m1[1][i] = m3[1][i] + m3[3][i]; 1416 m1[2][i] = m3[0][i] - m3[2][i]; 1417 m1[3][i] = m3[1][i] - m3[3][i]; 1418 m1[4][i] = m3[4][i] + m3[6][i]; 1419 m1[5][i] = m3[5][i] + m3[7][i]; 1420 m1[6][i] = m3[4][i] - m3[6][i]; 1421 m1[7][i] = m3[5][i] - m3[7][i]; 1422 1423 m2[0][i] = m1[0][i] + m1[1][i]; 1424 m2[1][i] = m1[0][i] - m1[1][i]; 1425 m2[2][i] = m1[2][i] + m1[3][i]; 1426 m2[3][i] = m1[2][i] - m1[3][i]; 1427 m2[4][i] = m1[4][i] + m1[5][i]; 1428 m2[5][i] = m1[4][i] - m1[5][i]; 1429 m2[6][i] = m1[6][i] + m1[7][i]; 1430 m2[7][i] = m1[6][i] - m1[7][i]; 1431 } 1432 1433 for (i = 0; i < 8; i++) 1434 { 1435 for (j = 0; j < 8; j++) 1436 { 1437 iSumHad += abs(m2[i][j]); 1438 } 1439 } 1440 iSumHad -= abs(m2[0][0]); 1441 iSumHad =(iSumHad+2)>>2; 1442 return(iSumHad); 1443 } 1444 1445 Int TEncCu::updateLCUDataISlice(TComDataCU* pcCU, Int LCUIdx, Int width, Int height) 1446 { 1447 Int xBl, yBl; 1448 const Int iBlkSize = 8; 1449 1450 Pel* pOrgInit = pcCU->getPic()->getPicYuvOrg()->getLumaAddr(pcCU->getAddr(), 0); 1451 Int iStrideOrig = pcCU->getPic()->getPicYuvOrg()->getStride(); 1452 Pel *pOrg; 1453 1454 Int iSumHad = 0; 1455 for ( yBl=0; (yBl+iBlkSize)<=height; yBl+= iBlkSize) 1456 { 1457 for ( xBl=0; (xBl+iBlkSize)<=width; xBl+= iBlkSize) 1458 { 1459 pOrg = pOrgInit + iStrideOrig*yBl + xBl; 1460 iSumHad += xCalcHADs8x8_ISlice(pOrg, iStrideOrig); 1461 } 1462 } 1463 return(iSumHad); 1464 } 1465 #endif 1466 1350 1467 /** check RD costs for a CU block encoded with merge 1351 1468 * \param rpcBestCU … … 1360 1477 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM]; 1361 1478 #else 1362 TComMvField cMvFieldNeighbours[ MRG_MAX_NUM_CANDS << 1]; // double length for mv of both lists1479 TComMvField cMvFieldNeighbours[2 * MRG_MAX_NUM_CANDS]; // double length for mv of both lists 1363 1480 UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS]; 1364 1481 #endif … … 1400 1517 Int mergeCandBuffer[MRG_MAX_NUM_CANDS]; 1401 1518 #endif 1402 for( UInt ui = 0; ui < rpcTempCU->getSlice()->getMaxNumMergeCand(); ++ui )1519 for( UInt ui = 0; ui < numValidMergeCand; ++ui ) 1403 1520 { 1404 1521 mergeCandBuffer[ui] = 0; … … 1430 1547 { 1431 1548 for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand ) 1432 { 1433 { 1549 { 1434 1550 #if H_3D_IC 1435 1551 if( rpcTempCU->getSlice()->getApplyIC() && rpcTempCU->getSlice()->getIcSkipParseFlag() ) … … 1443 1559 if(!(uiNoResidual==1 && mergeCandBuffer[uiMergeCand]==1)) 1444 1560 { 1445 1446 1561 if( !(bestIsSkip && uiNoResidual == 0) ) 1447 1562 { … … 1487 1602 m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] ); 1488 1603 // estimate residual and encode everything 1489 1490 1604 #if H_3D_VSO //M2 1491 1605 if( m_pcRdCost->getUseRenModel() ) … … 1498 1612 } 1499 1613 #endif 1500 1501 1614 m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, 1502 1615 m_ppcOrigYuv [uhDepth], … … 1508 1621 1509 1622 1510 if(uiNoResidual==0) 1511 { 1512 if(rpcTempCU->getQtRootCbf(0) == 0) 1623 if ( uiNoResidual == 0 && rpcTempCU->getQtRootCbf(0) == 0 ) 1513 1624 { 1625 // If no residual when allowing for one, then set mark to not try case where residual is forced to 0 1514 1626 mergeCandBuffer[uiMergeCand] = 1; 1515 1627 } 1516 } 1517 1518 rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth ); 1628 1629 rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth ); 1519 1630 Int orgQP = rpcTempCU->getQP( 0 ); 1520 1631 xCheckDQP( rpcTempCU ); … … 1522 1633 rpcTempCU->initEstData( uhDepth, orgQP ); 1523 1634 1524 1525 1635 if( m_pcEncCfg->getUseFastDecisionForMerge() && !bestIsSkip ) 1526 1636 { 1527 1637 bestIsSkip = rpcBestCU->getQtRootCbf(0) == 0; 1528 1638 } 1529 1530 }1531 1639 } 1532 1640 } … … 1689 1797 #endif 1690 1798 1691 #if RATE_CONTROL_LAMBDA_DOMAIN 1799 #if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT 1692 1800 if ( m_pcEncCfg->getUseRateCtrl() && m_pcEncCfg->getLCULevelRC() && ePartSize == SIZE_2Nx2N && uhDepth <= m_addSADDepth ) 1693 1801 {
Note: See TracChangeset for help on using the changeset viewer.