Ignore:
Timestamp:
13 Jul 2013, 15:51:26 (11 years ago)
Author:
tech
Message:

Update to HM 11.0.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-0.3-dev2/source/Lib/TLibEncoder/TEncCu.cpp

    r531 r537  
    103103 
    104104  m_bEncodeDQP = false;
    105 #if RATE_CONTROL_LAMBDA_DOMAIN
     105#if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT
    106106  m_LCUPredictionSAD = 0;
    107107  m_addSADDepth      = 0;
     
    256256  m_ppcTempCU[0]->initCU( rpcCU->getPic(), rpcCU->getAddr() );
    257257
    258 #if RATE_CONTROL_LAMBDA_DOMAIN
     258#if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT
    259259  m_addSADDepth      = 0;
    260260  m_LCUPredictionSAD = 0;
     
    592592    }
    593593
    594 #if RATE_CONTROL_LAMBDA_DOMAIN
     594#if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT
    595595    if ( uiDepth <= m_addSADDepth )
    596596    {
     
    862862  {
    863863    bBoundary = true;
    864 #if RATE_CONTROL_LAMBDA_DOMAIN
     864#if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT
    865865    m_addSADDepth++;
    866866#endif
     
    13481348}
    13491349
     1350#if RATE_CONTROL_INTRA
     1351Int 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
     1445Int  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
    13501467/** check RD costs for a CU block encoded with merge
    13511468 * \param rpcBestCU
     
    13601477  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];
    13611478#else
    1362   TComMvField  cMvFieldNeighbours[MRG_MAX_NUM_CANDS << 1]; // double length for mv of both lists
     1479  TComMvField  cMvFieldNeighbours[2 * MRG_MAX_NUM_CANDS]; // double length for mv of both lists
    13631480  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS];
    13641481#endif
     
    14001517  Int mergeCandBuffer[MRG_MAX_NUM_CANDS];
    14011518#endif
    1402   for( UInt ui = 0; ui < rpcTempCU->getSlice()->getMaxNumMergeCand(); ++ui )
     1519for( UInt ui = 0; ui < numValidMergeCand; ++ui )
    14031520  {
    14041521    mergeCandBuffer[ui] = 0;
     
    14301547  {
    14311548    for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand )
    1432     {
    1433       {
     1549    {     
    14341550#if H_3D_IC
    14351551        if( rpcTempCU->getSlice()->getApplyIC() && rpcTempCU->getSlice()->getIcSkipParseFlag() )
     
    14431559        if(!(uiNoResidual==1 && mergeCandBuffer[uiMergeCand]==1))
    14441560        {
    1445 
    14461561        if( !(bestIsSkip && uiNoResidual == 0) )
    14471562        {
     
    14871602       m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] );
    14881603       // estimate residual and encode everything
    1489 
    14901604#if H_3D_VSO //M2
    14911605       if( m_pcRdCost->getUseRenModel() )
     
    14981612       }
    14991613#endif
    1500 
    15011614       m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU,
    15021615         m_ppcOrigYuv    [uhDepth],
     
    15081621
    15091622
    1510        if(uiNoResidual==0)
    1511        {
    1512          if(rpcTempCU->getQtRootCbf(0) == 0)
     1623          if ( uiNoResidual == 0 && rpcTempCU->getQtRootCbf(0) == 0 )
    15131624         {
     1625            // If no residual when allowing for one, then set mark to not try case where residual is forced to 0
    15141626           mergeCandBuffer[uiMergeCand] = 1;
    15151627         }
    1516        }
    1517 
    1518        rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth );
     1628
     1629          rpcTempCU->setSkipFlagSubParts( rpcTempCU->getQtRootCbf(0) == 0, 0, uhDepth );
    15191630          Int orgQP = rpcTempCU->getQP( 0 );
    15201631          xCheckDQP( rpcTempCU );
     
    15221633          rpcTempCU->initEstData( uhDepth, orgQP );
    15231634
    1524 
    15251635      if( m_pcEncCfg->getUseFastDecisionForMerge() && !bestIsSkip )
    15261636      {
    15271637        bestIsSkip = rpcBestCU->getQtRootCbf(0) == 0;
    15281638      }
    1529 
    1530     }
    15311639    }
    15321640   }
     
    16891797#endif
    16901798
    1691 #if RATE_CONTROL_LAMBDA_DOMAIN
     1799#if RATE_CONTROL_LAMBDA_DOMAIN && !M0036_RC_IMPROVEMENT
    16921800  if ( m_pcEncCfg->getUseRateCtrl() && m_pcEncCfg->getLCULevelRC() && ePartSize == SIZE_2Nx2N && uhDepth <= m_addSADDepth )
    16931801  {
Note: See TracChangeset for help on using the changeset viewer.