Ignore:
Timestamp:
7 Sep 2015, 18:40:35 (10 years ago)
Author:
tech
Message:

Removed 3D-HEVC.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-15.1-MV-draft-4/source/Lib/TLibEncoder/TEncCu.cpp

    r1321 r1325  
    6868  m_ppcTempCU      = new TComDataCU*[m_uhTotalDepth-1];
    6969
    70 #if NH_3D_ARP
    71   m_ppcWeightedTempCU = new TComDataCU*[m_uhTotalDepth-1];
    72 #endif
    7370
    7471  m_ppcPredYuvBest = new TComYuv*[m_uhTotalDepth-1];
     
    7976  m_ppcRecoYuvTemp = new TComYuv*[m_uhTotalDepth-1];
    8077  m_ppcOrigYuv     = new TComYuv*[m_uhTotalDepth-1];
    81 #if NH_3D_DBBP
    82   m_ppcOrigYuvDBBP = new TComYuv*[m_uhTotalDepth-1];
    83 #endif
    8478
    8579  UInt uiNumPartitions;
     
    9286    m_ppcBestCU[i] = new TComDataCU; m_ppcBestCU[i]->create( chromaFormat, uiNumPartitions, uiWidth, uiHeight, false, uiMaxWidth >> (m_uhTotalDepth - 1) );
    9387    m_ppcTempCU[i] = new TComDataCU; m_ppcTempCU[i]->create( chromaFormat, uiNumPartitions, uiWidth, uiHeight, false, uiMaxWidth >> (m_uhTotalDepth - 1) );
    94 #if NH_3D_ARP
    95     m_ppcWeightedTempCU[i] = new TComDataCU; m_ppcWeightedTempCU[i]->create( chromaFormat, uiNumPartitions, uiWidth, uiHeight, false, uiMaxWidth >> (m_uhTotalDepth - 1) );
    96 #endif 
    9788
    9889    m_ppcPredYuvBest[i] = new TComYuv; m_ppcPredYuvBest[i]->create(uiWidth, uiHeight, chromaFormat);
     
    10596
    10697    m_ppcOrigYuv    [i] = new TComYuv; m_ppcOrigYuv    [i]->create(uiWidth, uiHeight, chromaFormat);
    107 #if NH_3D_DBBP
    108     m_ppcOrigYuvDBBP[i] = new TComYuv; m_ppcOrigYuvDBBP[i]->create(uiWidth, uiHeight, chromaFormat);
    109 #endif
    11098
    11199  }
     
    113101  m_bEncodeDQP          = false;
    114102
    115 #if KWU_RC_MADPRED_E0227
    116   m_LCUPredictionSAD = 0;
    117   m_addSADDepth      = 0;
    118   m_temporalSAD      = 0;
    119   m_spatialSAD       = 0;
    120 #endif
    121103
    122104  m_stillToCodeChromaQpOffsetFlag  = false;
     
    147129      m_ppcTempCU[i]->destroy();      delete m_ppcTempCU[i];      m_ppcTempCU[i] = NULL;
    148130    }
    149 #if NH_3D_ARP
    150     if(m_ppcWeightedTempCU[i])
    151     {
    152       m_ppcWeightedTempCU[i]->destroy(); delete m_ppcWeightedTempCU[i]; m_ppcWeightedTempCU[i] = NULL;
    153     }
    154 #endif
    155131    if(m_ppcPredYuvBest[i])
    156132    {
     
    181157      m_ppcOrigYuv[i]->destroy();     delete m_ppcOrigYuv[i];     m_ppcOrigYuv[i] = NULL;
    182158    }
    183 #if NH_3D_DBBP
    184     if(m_ppcOrigYuvDBBP[i])
    185     {
    186       m_ppcOrigYuvDBBP[i]->destroy(); delete m_ppcOrigYuvDBBP[i]; m_ppcOrigYuvDBBP[i] = NULL;
    187     }
    188 #endif
    189159  }
    190160  if(m_ppcBestCU)
     
    199169  }
    200170
    201 #if NH_3D_ARP
    202   if(m_ppcWeightedTempCU)
    203   {
    204     delete [] m_ppcWeightedTempCU;
    205     m_ppcWeightedTempCU = NULL;
    206   }
    207 #endif
    208171  if(m_ppcPredYuvBest)
    209172  {
     
    241204    m_ppcOrigYuv = NULL;
    242205  }
    243 #if NH_3D_DBBP
    244   if(m_ppcOrigYuvDBBP)
    245   {
    246     delete [] m_ppcOrigYuvDBBP;
    247     m_ppcOrigYuvDBBP = NULL;
    248   }
    249 #endif
    250206}
    251207
     
    281237  m_ppcTempCU[0]->initCtu( pCtu->getPic(), pCtu->getCtuRsAddr() );
    282238
    283 #if NH_3D_ARP
    284   m_ppcWeightedTempCU[0]->initCtu( pCtu->getPic(), pCtu->getCtuRsAddr() );
    285 #endif
    286 
    287 #if KWU_RC_MADPRED_E0227
    288   m_LCUPredictionSAD = 0;
    289   m_addSADDepth      = 0;
    290   m_temporalSAD      = 0;
    291   m_spatialSAD       = 0;
    292 #endif
     239
    293240
    294241  // analysis of CU
     
    421368
    422369
    423 #if NH_3D_QTLPC
    424   Bool  bLimQtPredFalg    = pcPic->getSlice(0)->getQtPredFlag();
    425   TComPic *pcTexture      = rpcBestCU->getSlice()->getTexturePic();
    426 
    427   Bool  depthMapDetect    = (pcTexture != NULL);
    428   Bool  bIntraSliceDetect = (rpcBestCU->getSlice()->getSliceType() == I_SLICE);
    429 
    430   Bool rapPic             = (rpcBestCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_W_RADL || rpcBestCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_IDR_N_LP || rpcBestCU->getSlice()->getNalUnitType() == NAL_UNIT_CODED_SLICE_CRA);
    431 
    432   Bool bTry2NxN           = true;
    433   Bool bTryNx2N           = true;
    434 #endif
    435370
    436371  // get Original YUV data from picture
    437372  m_ppcOrigYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvOrg(), rpcBestCU->getCtuRsAddr(), rpcBestCU->getZorderIdxInCtu() );
    438373
    439 #if NH_3D_QTLPC 
    440   Bool    bTrySplit     = true;
    441   Bool    bTrySplitDQP  = true;
    442 #endif
    443374  // variable for Cbf fast mode PU decision
    444375  Bool    doNotBlockPu = true;
    445376  Bool    earlyDetectionSkipMode = false;
    446377
    447 #if NH_3D_NBDV
    448   DisInfo DvInfo;
    449   DvInfo.m_acNBDV.setZero();
    450   DvInfo.m_aVIdxCan = 0;
    451 #if NH_3D_NBDV_REF
    452   DvInfo.m_acDoNBDV.setZero();
    453 #endif
    454 #endif
    455378  const UInt uiLPelX   = rpcBestCU->getCUPelX();
    456379  const UInt uiRPelX   = uiLPelX + rpcBestCU->getWidth(0)  - 1;
     
    509432  }
    510433
    511 #if NH_3D_IC
    512   Bool bICEnabled = rpcTempCU->getSlice()->getViewIndex() && ( rpcTempCU->getSlice()->getSliceType() == P_SLICE || rpcTempCU->getSlice()->getSliceType() == B_SLICE ) && !rpcTempCU->getSlice()->getIsDepth();
    513   bICEnabled = bICEnabled && rpcTempCU->getSlice()->getApplyIC();
    514 #endif
    515434
    516435  TComSlice * pcSlice = rpcTempCU->getPic()->getSlice(rpcTempCU->getPic()->getCurrSliceIdx());
    517436
    518437  const Bool bBoundary = !( uiRPelX < sps.getPicWidthInLumaSamples() && uiBPelY < sps.getPicHeightInLumaSamples() );
    519 #if  NH_3D_FAST_TEXTURE_ENCODING
    520     Bool bIVFMerge = false;
    521     Int  iIVFMaxD = 0;
    522     Bool bFMD = false;
    523     Bool bSubBranch = true;
    524 #endif
    525438  if ( !bBoundary )
    526439  {
     
    534447      }
    535448
    536 #if NH_3D_QTLPC
    537       bTrySplit    = true;
    538 #endif
    539449
    540450      m_cuChromaQpOffsetIdxPlus1 = 0;
     
    552462
    553463      rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    554 #if NH_3D_QTLPC
    555       //logic for setting bTrySplit using the partition information that is stored of the texture colocated CU
    556 #if H_3D_FCO
    557       if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ) && pcTexture->getReconMark())
    558 #else
    559       if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ))
    560 #endif
    561       {
    562         TComDataCU* pcTextureCU = pcTexture->getCtu( rpcBestCU->getCtuRsAddr() ); //Corresponding texture LCU
    563         UInt uiCUIdx            = rpcBestCU->getZorderIdxInCtu();
    564         assert(pcTextureCU->getDepth(uiCUIdx) >= uiDepth); //Depth cannot be more partitioned than the texture.
    565         if (pcTextureCU->getDepth(uiCUIdx) > uiDepth || pcTextureCU->getPartitionSize(uiCUIdx) == SIZE_NxN) //Texture was split.
    566         {
    567           bTrySplit = true;
    568           bTryNx2N  = true;
    569           bTry2NxN  = true;
    570         }
    571         else
    572         {
    573           bTrySplit = false;
    574           bTryNx2N  = false;
    575           bTry2NxN  = false;
    576           if( pcTextureCU->getDepth(uiCUIdx) == uiDepth && pcTextureCU->getPartitionSize(uiCUIdx) != SIZE_2Nx2N)
    577           {
    578             if(pcTextureCU->getPartitionSize(uiCUIdx)==SIZE_2NxN || pcTextureCU->getPartitionSize(uiCUIdx)==SIZE_2NxnU|| pcTextureCU->getPartitionSize(uiCUIdx)==SIZE_2NxnD)
    579             {
    580               bTry2NxN  = true;
    581             }
    582             else
    583             {
    584               bTryNx2N  = true;
    585             }
    586           }
    587         }
    588       }
    589 #endif
    590 
    591 #if NH_3D_NBDV
    592       if( rpcTempCU->getSlice()->getSliceType() != I_SLICE )
    593       {
    594 #if NH_3D_ARP && NH_3D_IV_MERGE && NH_3D_VSP
    595         if( rpcTempCU->getSlice()->getIvResPredFlag() || rpcTempCU->getSlice()->getIvMvPredFlag() || rpcTempCU->getSlice()->getViewSynthesisPredFlag() )
    596 #else
    597 #if NH_3D_IV_MERGE && NH_3D_VSP
    598         if( rpcTempCU->getSlice()->getIvMvPredFlag() || rpcTempCU->getSlice()->getViewSynthesisPredFlag() )
    599 #else
    600 #if NH_3D_ARP && NH_3D_VSP
    601         if( rpcTempCU->getSlice()->getIvResPredFlag() || rpcTempCU->getSlice()->getViewSynthesisPredFlag() )
    602 #else
    603 #if NH_3D_VSP
    604         if( rpcTempCU->getSlice()->getViewSynthesisPredFlag() )
    605 #else
    606 #if NH_3D_ARP
    607         if( rpcTempCU->getSlice()->getIvResPredFlag() )
    608 #else
    609 #if H_3D_IV_MERGE
    610         if( rpcTempCU->getSlice()->getVPS()->getIvMvPredFlag(rpcTempCU->getSlice()->getLayerId()) )
    611 #else
    612 #if NH_3D_DBBP
    613         if( rpcTempCU->getSlice()->getDepthBasedBlkPartFlag() )
    614 #else
    615         if (0)
    616 #endif
    617 #endif
    618 #endif
    619 #endif
    620 #endif
    621 #endif
    622 #endif
    623         {
    624           PartSize ePartTemp = rpcTempCU->getPartitionSize(0);
    625           rpcTempCU->setPartSizeSubParts(SIZE_2Nx2N, 0, uiDepth);
    626 #if NH_3D_IV_MERGE
    627           if (rpcTempCU->getSlice()->getIsDepth() )
    628           {
    629             rpcTempCU->getDispforDepth(0, 0, &DvInfo);
    630           }
    631           else
    632           {
    633 #endif
    634 #if NH_3D_NBDV_REF
    635             if( rpcTempCU->getSlice()->getDepthRefinementFlag() )
    636             {
    637               rpcTempCU->getDisMvpCandNBDV(&DvInfo, true);
    638             }
    639             else
    640 #endif
    641             {
    642               rpcTempCU->getDisMvpCandNBDV(&DvInfo);
    643             }
    644 #if NH_3D_IV_MERGE
    645           }
    646 #endif
    647           rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    648           rpcBestCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    649           rpcTempCU->setPartSizeSubParts( ePartTemp, 0, uiDepth );
    650         }
    651       }
    652 #if  NH_3D_FAST_TEXTURE_ENCODING
    653       if(rpcTempCU->getSlice()->getViewIndex() && !rpcTempCU->getSlice()->getIsDepth() && rpcTempCU->getSlice()->getDefaultRefViewIdxAvailableFlag() )
    654       {
    655         PartSize ePartTemp = rpcTempCU->getPartitionSize(0);
    656         rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
    657         rpcTempCU->getIVNStatus( 0, &DvInfo,  bIVFMerge, iIVFMaxD);
    658         rpcTempCU->setPartSizeSubParts( ePartTemp, 0, uiDepth );
    659       }
    660 #endif
    661 #endif
     464
    662465      // do inter modes, SKIP and 2Nx2N
    663466      if( rpcBestCU->getSlice()->getSliceType() != I_SLICE )
    664467      {
    665 #if NH_3D_IC
    666         for( UInt uiICId = 0; uiICId < ( bICEnabled ? 2 : 1 ); uiICId++ )
    667         {
    668           Bool bICFlag = uiICId ? true : false;
    669 #endif
    670468        // 2Nx2N
    671469        if(m_pcEncCfg->getUseEarlySkipDetection())
    672470        {
    673 #if NH_3D_IC
    674             rpcTempCU->setICFlagSubParts(bICFlag, 0, 0, uiDepth);
    675 #endif
    676 #if  NH_3D_FAST_TEXTURE_ENCODING
    677           xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD );  rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode  );//by Competition for inter_2Nx2N
    678 #else
    679471          xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug) );
    680472          rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );//by Competition for inter_2Nx2N
    681 #endif
    682 #if NH_3D_VSP  || NH_3D_DBBP
    683           rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    684 #endif
    685473        }
    686474        // SKIP
    687 #if NH_3D_IC
    688           rpcTempCU->setICFlagSubParts(bICFlag, 0, 0, uiDepth);
    689 #endif
    690475        xCheckRDCostMerge2Nx2N( rpcBestCU, rpcTempCU DEBUG_STRING_PASS_INTO(sDebug), &earlyDetectionSkipMode );//by Merge for inter_2Nx2N
    691 #if  NH_3D_FAST_TEXTURE_ENCODING
    692           bFMD = bIVFMerge && rpcBestCU->isSkipped(0);
    693 #endif
    694476
    695477        rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    696 #if NH_3D_VSP  || NH_3D_DBBP
    697         rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    698 #endif
    699478
    700479        if(!m_pcEncCfg->getUseEarlySkipDetection())
    701480        {
    702481          // 2Nx2N, NxN
    703 #if NH_3D_IC
    704             rpcTempCU->setICFlagSubParts(bICFlag, 0, 0, uiDepth);
    705 #endif
    706 #if  NH_3D_FAST_TEXTURE_ENCODING
    707             xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD );  rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    708 #else
    709482
    710483          xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug) );
    711484          rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    712 #endif
    713 #if NH_3D_VSP  || NH_3D_DBBP
    714           rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    715 #endif
    716 #if NH_3D_DBBP
    717             if( rpcTempCU->getSlice()->getDepthBasedBlkPartFlag() && rpcTempCU->getSlice()->getDefaultRefViewIdxAvailableFlag() )
    718             {
    719               xCheckRDCostInterDBBP( rpcBestCU, rpcTempCU DEBUG_STRING_PASS_INTO(sDebug), false );
    720               rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode  );
    721 #if NH_3D_VSP  || NH_3D_DBBP
    722               rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    723 #endif
    724             }
    725 #endif
    726485
    727486          if(m_pcEncCfg->getUseCbfFastMode())
     
    730489          }
    731490        }
    732 #if NH_3D_IC
    733         }
    734 #endif
    735491      }
    736 #if NH_3D_QTLPC     
    737       if(depthMapDetect && !bIntraSliceDetect && !rapPic && ( m_pcEncCfg->getUseQTL() || bLimQtPredFalg ))
    738       {
    739         bTrySplitDQP = bTrySplit;
    740       }
    741 #endif
    742492
    743493      if (bIsLosslessMode) // Restore loop variable if lossless mode was searched.
     
    747497    }
    748498
    749 #if KWU_RC_MADPRED_E0227
    750     if ( uiDepth <= m_addSADDepth )
    751     {
    752       m_LCUPredictionSAD += m_temporalSAD;
    753       m_addSADDepth = uiDepth;
    754     }
    755 #endif
    756 #if NH_3D_ENC_DEPTH
    757     if( rpcBestCU->getSlice()->getIsDepth() && rpcBestCU->getSlice()->isIRAP() )
    758     {
    759       earlyDetectionSkipMode = false;
    760     }
    761 #endif
    762 #if NH_3D_DIS
    763     rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP  );
    764     if( rpcBestCU->getSlice()->getDepthIntraSkipFlag() )
    765     {
    766       xCheckRDCostDIS( rpcBestCU, rpcTempCU, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug) );
    767       rpcTempCU->initEstData( uiDepth, iMinQP, isAddLowestQP  );
    768     }
    769 #endif
    770499    if(!earlyDetectionSkipMode)
    771500    {
     
    789518          {
    790519            if( uiDepth == sps.getLog2DiffMaxMinCodingBlockSize() && doNotBlockPu
    791 #if NH_3D_QTLPC
    792                 && bTrySplit
    793 #endif
    794520)
    795521            {
    796 #if  NH_3D_FAST_TEXTURE_ENCODING
    797               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN DEBUG_STRING_PASS_INTO(sDebug), bFMD  );
    798 #else
    799522
    800523              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN DEBUG_STRING_PASS_INTO(sDebug)   );
    801 #endif
    802524              rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    803 #if NH_3D_VSP || NH_3D_DBBP
    804               rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    805 #endif
    806525
    807526            }
     
    809528
    810529          if(doNotBlockPu
    811 #if NH_3D_QTLPC
    812             && bTryNx2N
    813 #endif
    814530)
    815531          {
    816 #if  NH_3D_FAST_TEXTURE_ENCODING
    817             xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD  );
    818 #else
    819532            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N DEBUG_STRING_PASS_INTO(sDebug)  );
    820 #endif
    821533            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    822 #if NH_3D_VSP || NH_3D_DBBP
    823             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    824 #endif
    825534
    826535            if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_Nx2N )
     
    830539          }
    831540          if(doNotBlockPu
    832 #if NH_3D_QTLPC
    833             && bTry2NxN
    834 #endif
    835541)
    836542          {
    837 #if  NH_3D_FAST_TEXTURE_ENCODING
    838             xCheckRDCostInter      ( rpcBestCU, rpcTempCU, SIZE_2NxN DEBUG_STRING_PASS_INTO(sDebug), bFMD  );
    839 #else
    840543
    841544            xCheckRDCostInter      ( rpcBestCU, rpcTempCU, SIZE_2NxN DEBUG_STRING_PASS_INTO(sDebug)  );
    842 #endif
    843545
    844546            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    845 #if NH_3D_VSP || NH_3D_DBBP
    846             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    847 #endif
    848547
    849548            if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxN)
     
    871570            {
    872571              if(doNotBlockPu
    873 #if NH_3D_QTLPC
    874                 && bTry2NxN
    875 #endif
    876572)
    877573              {
    878 #if  NH_3D_FAST_TEXTURE_ENCODING
    879                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU DEBUG_STRING_PASS_INTO(sDebug), bFMD );
    880 #else
    881574                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU DEBUG_STRING_PASS_INTO(sDebug) );
    882 #endif
    883575                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    884 #if NH_3D_VSP || NH_3D_DBBP
    885                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    886 #endif
    887576                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
    888577                {
     
    891580              }
    892581              if(doNotBlockPu
    893 #if NH_3D_QTLPC
    894                 && bTry2NxN
    895 #endif
    896582)
    897583              {
    898 #if  NH_3D_FAST_TEXTURE_ENCODING
    899                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD DEBUG_STRING_PASS_INTO(sDebug), bFMD );
    900 #else
    901584                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD DEBUG_STRING_PASS_INTO(sDebug) );
    902 #endif
    903585
    904586                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    905 #if NH_3D_VSP || NH_3D_DBBP
    906                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    907 #endif
    908587
    909588                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
     
    917596            {
    918597              if(doNotBlockPu
    919 #if NH_3D_QTLPC
    920                 && bTry2NxN
    921 #endif
    922598)
    923599              {
    924 #if  NH_3D_FAST_TEXTURE_ENCODING
    925                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU DEBUG_STRING_PASS_INTO(sDebug), bFMD, true );
    926 #else
    927600
    928601                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU DEBUG_STRING_PASS_INTO(sDebug), true );
    929 #endif
    930602
    931603                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    932 #if NH_3D_VSP || NH_3D_DBBP
    933                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    934 #endif
    935604                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
    936605                {
     
    939608              }
    940609              if(doNotBlockPu
    941 #if NH_3D_QTLPC
    942                 && bTry2NxN
    943 #endif
    944610)
    945611              {
    946 #if  NH_3D_FAST_TEXTURE_ENCODING
    947                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD DEBUG_STRING_PASS_INTO(sDebug), bFMD, true );
    948 #else
    949612                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD DEBUG_STRING_PASS_INTO(sDebug), true );
    950 #endif
    951613                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    952 #if NH_3D_VSP || NH_3D_DBBP
    953                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    954 #endif
    955614
    956615                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
     
    966625            {
    967626              if(doNotBlockPu
    968 #if NH_3D_QTLPC
    969                 && bTryNx2N
    970 #endif
    971627)
    972628              {
    973 #if  NH_3D_FAST_TEXTURE_ENCODING
    974                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD );
    975 #else
    976629                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N DEBUG_STRING_PASS_INTO(sDebug) );
    977 #endif
    978630
    979631                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    980 #if NH_3D_VSP || NH_3D_DBBP
    981                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    982 #endif
    983632                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
    984633                {
     
    987636              }
    988637              if(doNotBlockPu
    989 #if NH_3D_QTLPC
    990                 && bTryNx2N
    991 #endif
    992638)
    993639              {
    994 #if  NH_3D_FAST_TEXTURE_ENCODING
    995                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD );
    996 #else
    997640                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N DEBUG_STRING_PASS_INTO(sDebug) );
    998 #endif
    999641                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1000 #if NH_3D_VSP || NH_3D_DBBP
    1001                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1002 #endif
    1003642              }
    1004643            }
     
    1007646            {
    1008647              if(doNotBlockPu
    1009 #if NH_3D_QTLPC
    1010                 && bTryNx2N
    1011 #endif
    1012648)
    1013649              {
    1014 #if  NH_3D_FAST_TEXTURE_ENCODING
    1015                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD, true );
    1016 #else
    1017650                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N DEBUG_STRING_PASS_INTO(sDebug), true );
    1018 #endif
    1019651                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1020 #if NH_3D_VSP || NH_3D_DBBP
    1021                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1022 #endif
    1023652                if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
    1024653                {
     
    1027656              }
    1028657              if(doNotBlockPu
    1029 #if NH_3D_QTLPC
    1030                 && bTryNx2N
    1031 #endif
    1032658)
    1033659              {
    1034 #if  NH_3D_FAST_TEXTURE_ENCODING
    1035                 xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N DEBUG_STRING_PASS_INTO(sDebug), bFMD, true );
    1036 #else
    1037660
    1038661                xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N DEBUG_STRING_PASS_INTO(sDebug), true );
    1039 #endif
    1040662                rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1041 #if NH_3D_VSP || NH_3D_DBBP
    1042                 rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1043 #endif
    1044663
    1045664              }
     
    1048667
    1049668#else
    1050 #if NH_3D_QTLPC
    1051             if (bTry2NxN)
    1052             {
    1053 #endif
    1054669
    1055670            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU );
    1056671            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1057 #if NH_3D_VSP || NH_3D_DBBP
    1058             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1059 #endif
    1060672            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD );
    1061673            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1062 #if NH_3D_VSP || NH_3D_DBBP
    1063             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1064 #endif
    1065 #if NH_3D_QTLPC
    1066             }
    1067             if (bTryNx2N)
    1068             {
    1069 #endif
    1070674            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N );
    1071675            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1072 #if NH_3D_VSP || NH_3D_DBBP
    1073             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1074 #endif
    1075676            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N );
    1076677            rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1077 #if NH_3D_VSP || NH_3D_DBBP
    1078             rpcTempCU->setDvInfoSubParts(DvInfo, 0, uiDepth);
    1079 #endif
    1080 #if NH_3D_QTLPC
    1081             }
    1082 #endif
    1083678
    1084679
     
    1086681          }
    1087682        }
    1088 #if  NH_3D_FAST_TEXTURE_ENCODING
    1089         if(!bFMD)
    1090         {
    1091 #endif
    1092683
    1093684        // do normal intra modes
     
    1100691          ((rpcBestCU->getCbf( 0, COMPONENT_Cb ) != 0) && (numberValidComponents > COMPONENT_Cb)) ||
    1101692          ((rpcBestCU->getCbf( 0, COMPONENT_Cr ) != 0) && (numberValidComponents > COMPONENT_Cr))   // avoid very complex intra if it is unlikely
    1102  #if NH_3D_ENC_DEPTH
    1103             || rpcBestCU->getSlice()->getIsDepth()
    1104 #endif
    1105693            )))
    1106694        {
    1107 #if NH_3D_ENC_DEPTH
    1108             Bool bOnlyIVP = false;
    1109             Bool bUseIVP = true;
    1110             if( (rpcBestCU->getSlice()->getSliceType() != I_SLICE) &&
    1111                 !( (rpcBestCU->getCbf( 0, COMPONENT_Y  ) != 0)                                            ||
    1112                   ((rpcBestCU->getCbf( 0, COMPONENT_Cb ) != 0) && (numberValidComponents > COMPONENT_Cb)) ||
    1113                   ((rpcBestCU->getCbf( 0, COMPONENT_Cr ) != 0) && (numberValidComponents > COMPONENT_Cr))   ) &&
    1114                   (rpcBestCU->getSlice()->getIsDepth() && !(rpcBestCU->getSlice()->isIRAP())) )
    1115             {
    1116               bOnlyIVP = true;
    1117               bUseIVP = rpcBestCU->getSlice()->getIntraContourFlag();
    1118             }
    1119             if( bUseIVP )
    1120             {
    1121               xCheckRDCostIntra( rpcBestCU, rpcTempCU, intraCost, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug), bOnlyIVP );
    1122 #else
    1123695          xCheckRDCostIntra( rpcBestCU, rpcTempCU, intraCost, SIZE_2Nx2N DEBUG_STRING_PASS_INTO(sDebug) );
    1124 #endif
    1125 #if KWU_RC_MADPRED_E0227
    1126             if ( uiDepth <= m_addSADDepth )
    1127             {
    1128               m_LCUPredictionSAD += m_spatialSAD;
    1129               m_addSADDepth = uiDepth;
    1130             }
    1131 #endif
    1132696
    1133697          rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1134698          if( uiDepth == sps.getLog2DiffMaxMinCodingBlockSize() )
    1135699          {
    1136 #if NH_3D_QTLPC //Try IntraNxN
    1137               if(bTrySplit)
    1138               {
    1139 #endif
    1140700            if( rpcTempCU->getWidth(0) > ( 1 << sps.getQuadtreeTULog2MinSize() ) )
    1141701            {
    1142702              Double tmpIntraCost;
    1143 #if NH_3D_ENC_DEPTH
    1144               xCheckRDCostIntra( rpcBestCU, rpcTempCU, tmpIntraCost, SIZE_NxN DEBUG_STRING_PASS_INTO(sDebug), bOnlyIVP );
    1145 #else
    1146703              xCheckRDCostIntra( rpcBestCU, rpcTempCU, tmpIntraCost, SIZE_NxN DEBUG_STRING_PASS_INTO(sDebug)   );
    1147 #endif
    1148704
    1149705              intraCost = std::min(intraCost, tmpIntraCost);
    1150706              rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1151707            }
    1152 #if NH_3D_QTLPC
    1153               }
    1154 #endif
    1155708          }
    1156 #if NH_3D_ENC_DEPTH
    1157           }
    1158 #endif
    1159709        }
    1160710
     
    1166716          UInt uiRawBits = getTotalBits(rpcBestCU->getWidth(0), rpcBestCU->getHeight(0), rpcBestCU->getPic()->getChromaFormat(), sps.getBitDepths().recon);
    1167717          UInt uiBestBits = rpcBestCU->getTotalBits();
    1168 #if NH_3D_VSO // M7
    1169           Double dRDCostTemp = m_pcRdCost->getUseLambdaScaleVSO() ? m_pcRdCost->calcRdCostVSO(uiRawBits, 0) : m_pcRdCost->calcRdCost(uiRawBits, 0);
    1170           if((uiBestBits > uiRawBits) || (rpcBestCU->getTotalCost() > dRDCostTemp ))
    1171 #else
    1172718          if((uiBestBits > uiRawBits) || (rpcBestCU->getTotalCost() > m_pcRdCost->calcRdCost(uiRawBits, 0)))
    1173 #endif
    1174719
    1175720          {
     
    1178723          }
    1179724        }
    1180 #if  NH_3D_FAST_TEXTURE_ENCODING
    1181         }
    1182 #endif
    1183725        if (bIsLosslessMode) // Restore loop variable if lossless mode was searched.
    1184726        {
     
    1195737      rpcBestCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // split bits
    1196738      rpcBestCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    1197 #if NH_3D_VSO // M8
    1198     if ( m_pcRdCost->getUseVSO() )   
    1199     {
    1200       rpcBestCU->getTotalCost()  = m_pcRdCost->calcRdCostVSO( rpcBestCU->getTotalBits(), rpcBestCU->getTotalDistortion() );   
    1201     }
    1202     else
    1203 #endif
    1204739      rpcBestCU->getTotalCost()  = m_pcRdCost->calcRdCost( rpcBestCU->getTotalBits(), rpcBestCU->getTotalDistortion() );
    1205740      m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_NEXT_BEST]);
    1206741    }
    1207 #if  NH_3D_FAST_TEXTURE_ENCODING
    1208     if(rpcBestCU->getSlice()->getViewIndex() && !rpcBestCU->getSlice()->getIsDepth() && (uiDepth >=iIVFMaxD) && rpcBestCU->isSkipped(0))
    1209     {
    1210       bSubBranch = false;
    1211     }
    1212 #endif
    1213742  }
    1214743
     
    1247776    iMaxQP = iMinQP; // If all TUs are forced into using transquant bypass, do not loop here.
    1248777  }
    1249 #if  NH_3D_FAST_TEXTURE_ENCODING
    1250   bSubBranch = bSubBranch && (bBoundary || !( m_pcEncCfg->getUseEarlyCU() && rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isSkipped(0) ));
    1251 #else
    1252778  const Bool bSubBranch = bBoundary || !( m_pcEncCfg->getUseEarlyCU() && rpcBestCU->getTotalCost()!=MAX_DOUBLE && rpcBestCU->isSkipped(0) );
    1253 #endif
    1254 #if NH_3D_QTLPC
    1255   if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() && (!getFastDeltaQp() || uiWidth > fastDeltaQPCuMaxSize || bBoundary) && bTrySplitDQP )
    1256 #else
    1257779  if( bSubBranch && uiDepth < sps.getLog2DiffMaxMinCodingBlockSize() && (!getFastDeltaQp() || uiWidth > fastDeltaQPCuMaxSize || bBoundary))
    1258 #endif
    1259780  {
    1260781    // further split
     
    1265786      rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    1266787
    1267 #if NH_3D_VSO // M9
    1268       // reset Model
    1269       if( m_pcRdCost->getUseRenModel() )
    1270       {
    1271         UInt  uiWidthOy     = m_ppcOrigYuv[uiDepth]->getWidth ( COMPONENT_Y );
    1272         UInt  uiHeightOy    = m_ppcOrigYuv[uiDepth]->getHeight( COMPONENT_Y );
    1273         Pel*  piSrc         = m_ppcOrigYuv[uiDepth]->getAddr  ( COMPONENT_Y, 0 );
    1274         UInt  uiSrcStride   = m_ppcOrigYuv[uiDepth]->getStride( COMPONENT_Y  );
    1275         m_pcRdCost->setRenModelData( m_ppcBestCU[uiDepth], 0, piSrc, uiSrcStride, uiWidthOy, uiHeightOy );
    1276       }
    1277 #endif
    1278788      UChar       uhNextDepth         = uiDepth+1;
    1279789      TComDataCU* pcSubBestPartCU     = m_ppcBestCU[uhNextDepth];
     
    1281791      DEBUG_STRING_NEW(sTempDebug)
    1282792
    1283 #if NH_3D_ARP
    1284       m_ppcWeightedTempCU[uhNextDepth]->setSlice( m_ppcWeightedTempCU[ uiDepth]->getSlice());
    1285       m_ppcWeightedTempCU[uhNextDepth]->setPic  ( m_ppcWeightedTempCU[ uiDepth] );
    1286 #endif
    1287793      for ( UInt uiPartUnitIdx = 0; uiPartUnitIdx < 4; uiPartUnitIdx++ )
    1288794      {
     
    1336842        rpcTempCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    1337843      }
    1338 #if NH_3D_VSO // M10
    1339       if ( m_pcRdCost->getUseVSO() )
    1340       {
    1341         rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    1342       }
    1343       else
    1344 #endif
    1345844        rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    1346845
     
    1365864          rpcTempCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // dQP bits
    1366865          rpcTempCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    1367 #if NH_3D_VSO // M11
    1368           if ( m_pcRdCost->getUseLambdaScaleVSO())         
    1369           {
    1370             rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );         
    1371           }
    1372           else
    1373 #endif
    1374866            rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    1375867
     
    1411903    }
    1412904  }
    1413 #if NH_3D_VSO // M12
    1414   if( m_pcRdCost->getUseRenModel() )
    1415   {
    1416     UInt  uiWidthRy     = m_ppcRecoYuvBest[uiDepth]->getWidth   ( COMPONENT_Y );
    1417     UInt  uiHeightRy    = m_ppcRecoYuvBest[uiDepth]->getHeight  ( COMPONENT_Y );
    1418     Pel*  piSrc       = m_ppcRecoYuvBest[uiDepth]->getAddr    ( COMPONENT_Y,  0 );
    1419     UInt  uiSrcStride = m_ppcRecoYuvBest[uiDepth]->getStride  ( COMPONENT_Y );
    1420     m_pcRdCost->setRenModelData( rpcBestCU, 0, piSrc, uiSrcStride, uiWidthRy, uiHeightRy );
    1421   }
    1422 #endif
    1423905
    1424906  DEBUG_STRING_APPEND(sDebug_, sDebug);
     
    15921074
    15931075    m_pcEntropyCoder->encodeMergeIndex( pcCU, uiAbsPartIdx );
    1594 #if NH_3D_ARP
    1595     m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx );
    1596 #endif
    1597 #if NH_3D_IC
    1598     m_pcEntropyCoder->encodeICFlag  ( pcCU, uiAbsPartIdx );
    1599 #endif
    16001076
    16011077    finishCU(pcCU,uiAbsPartIdx);
     
    16031079  }
    16041080
    1605 #if NH_3D_DIS
    1606   m_pcEntropyCoder->encodeDIS( pcCU, uiAbsPartIdx );
    1607   if(!pcCU->getDISFlag(uiAbsPartIdx))
    1608   {
    1609 #endif
    16101081  m_pcEntropyCoder->encodePredMode( pcCU, uiAbsPartIdx );
    16111082  m_pcEntropyCoder->encodePartSize( pcCU, uiAbsPartIdx, uiDepth );
     
    16171088    if(pcCU->getIPCMFlag(uiAbsPartIdx))
    16181089    {
    1619 #if NH_3D_SDC_INTRA
    1620       m_pcEntropyCoder->encodeSDCFlag( pcCU, uiAbsPartIdx );
    1621 #endif 
    16221090
    16231091      // Encode slice finish
     
    16291097  // prediction Info ( Intra : direction mode, Inter : Mv, reference idx )
    16301098  m_pcEntropyCoder->encodePredInfo( pcCU, uiAbsPartIdx );
    1631 #if NH_3D_DBBP
    1632   m_pcEntropyCoder->encodeDBBPFlag( pcCU, uiAbsPartIdx );
    1633 #endif
    1634 #if NH_3D_SDC_INTRA
    1635   m_pcEntropyCoder->encodeSDCFlag( pcCU, uiAbsPartIdx );
    1636 #endif 
    1637 #if NH_3D_ARP
    1638   m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx );
    1639 #endif
    1640 #if NH_3D_IC
    1641   m_pcEntropyCoder->encodeICFlag  ( pcCU, uiAbsPartIdx );
    1642 #endif
    16431099
    16441100  // Encode Coefficients
     
    16481104  setCodeChromaQpAdjFlag( codeChromaQpAdj );
    16491105  setdQPFlag( bCodeDQP );
    1650 #if NH_3D_DIS
    1651   }
    1652 #endif
    16531106
    16541107
     
    17891242#endif
    17901243
    1791 #if NH_3D_MLC
    1792   TComMvField  cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists
    1793   UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];
    1794 #else
    17951244  TComMvField  cMvFieldNeighbours[2 * MRG_MAX_NUM_CANDS]; // double length for mv of both lists
    17961245  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS];
    1797 #endif
    17981246  Int numValidMergeCand = 0;
    17991247  const Bool bTransquantBypassFlag = rpcTempCU->getCUTransquantBypass(0);
     
    18041252  }
    18051253  UChar uhDepth = rpcTempCU->getDepth( 0 );
    1806 #if NH_3D_IC
    1807   Bool bICFlag = rpcTempCU->getICFlag( 0 );
    1808 #endif
    1809 #if NH_3D_VSO // M1  //necessary here?
    1810   if( m_pcRdCost->getUseRenModel() )
    1811   {
    1812     UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( COMPONENT_Y );
    1813     UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( COMPONENT_Y );
    1814     Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr  ( COMPONENT_Y );
    1815     UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride( COMPONENT_Y );
    1816     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    1817   }
    1818 #endif
    1819 
    1820 #if NH_3D_ARP
    1821   DisInfo cOrigDisInfo = rpcTempCU->getDvInfo(0);
    1822 #else
    1823 #endif
     1254
    18241255
    18251256  rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uhDepth ); // interprets depth relative to CTU level
    18261257
    1827 #if NH_3D_SPIVMP
    1828   Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
    1829   memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    1830   TComMvField*  pcMvFieldSP;
    1831   UChar* puhInterDirSP;
    1832   pcMvFieldSP = new TComMvField[rpcTempCU->getPic()->getPicSym()->getNumPartitionsInCtu()*2];
    1833   puhInterDirSP = new UChar[rpcTempCU->getPic()->getPicSym()->getNumPartitionsInCtu()];
    1834 #endif
    1835 
    1836 #if NH_3D_VSP
    1837 #if !NH_3D_ARP
    1838   Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    1839   memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    1840 #if NH_3D_MLC
    1841   rpcTempCU->initAvailableFlags();
    1842 #endif
    1843   rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    1844 #if NH_3D_MLC
    1845   rpcTempCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours
    1846 #if NH_3D_SPIVMP
    1847     , pcMvFieldSP, puhInterDirSP
    1848 #endif
    1849     , numValidMergeCand
    1850     );
    1851 
    1852   rpcTempCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours, vspFlag
    1853 #if NH_3D_SPIVMP
    1854     , bSPIVMPFlag
    1855 #endif
    1856     , numValidMergeCand
    1857     );
    1858 #endif
    1859 #endif
    1860 #else
    1861 #if NH_3D_MLC
    1862   rpcTempCU->initAvailableFlags();
    1863 #endif
     1258
    18641259  rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );
    1865 #if NH_3D_MLC
    1866   rpcTempCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours
    1867 #if H_3D_SPIVMP
    1868     , pcMvFieldSP, puhInterDirSP
    1869 #endif
    1870     , numValidMergeCand
    1871     );
    1872 #if NH_3D_MLC
    1873   rpcTempCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours
    1874 #if H_3D_SPIVMP
    1875     , bSPIVMPFlag
    1876 #endif
    1877     , numValidMergeCand
    1878     );
    1879 #endif
    1880 #endif
    1881 #endif
    1882 
    1883 #if NH_3D_MLC
    1884   Int mergeCandBuffer[MRG_MAX_NUM_CANDS_MEM];
    1885 #else
     1260
    18861261  Int mergeCandBuffer[MRG_MAX_NUM_CANDS];
    1887 #endif
    1888 #if NH_3D_MLC
    1889   for( UInt ui = 0; ui < rpcTempCU->getSlice()->getMaxNumMergeCand(); ++ui )
    1890 #else
    18911262  for( UInt ui = 0; ui < numValidMergeCand; ++ui )
    1892 #endif
    18931263  {
    18941264    mergeCandBuffer[ui] = 0;
     
    19081278  DEBUG_STRING_NEW(bestStr)
    19091279
    1910 #if NH_3D_ARP
    1911   Int nARPWMax = rpcTempCU->getSlice()->getARPStepNum() - 1;
    1912 #if NH_3D_IC
    1913   if( nARPWMax < 0 || bICFlag )
    1914 #else
    1915   if( nARPWMax < 0 )
    1916 #endif
    1917   {
    1918     nARPWMax = 0;
    1919   }
    1920   for( Int nARPW=nARPWMax; nARPW >= 0 ; nARPW-- )
    1921   {
    1922 #if NH_3D
    1923 #if DEBUG_STRING
    1924     bestStr.clear();
    1925 #endif
    1926 #endif
    1927 #if NH_3D_IV_MERGE
    1928     memset( mergeCandBuffer, 0, MRG_MAX_NUM_CANDS_MEM*sizeof(Int) );
    1929 #else
    1930     memset( mergeCandBuffer, 0, MRG_MAX_NUM_CANDS * sizeof(Int) );
    1931 #endif
    1932     rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uhDepth ); // interprets depth relative to LCU level
    1933     rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth );
    1934 #if NH_3D_IC
    1935     rpcTempCU->setICFlagSubParts( bICFlag, 0, 0, uhDepth );
    1936 #endif
    1937     rpcTempCU->getDvInfo(0) = cOrigDisInfo;
    1938     rpcTempCU->setDvInfoSubParts(cOrigDisInfo, 0, uhDepth );
    1939 #if NH_3D_VSP
    1940     Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    1941     memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    1942 #endif
    1943 #if NH_3D
    1944 #if NH_3D_MLC
    1945     rpcTempCU->initAvailableFlags();
    1946 #endif
    1947     rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    1948     rpcTempCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours
    1949 #if NH_3D_SPIVMP
    1950       , pcMvFieldSP, puhInterDirSP
    1951 #endif
    1952       , numValidMergeCand
    1953       );
    1954 
    1955     rpcTempCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours
    1956 #if NH_3D_VSP
    1957       , vspFlag
    1958 #endif
    1959 #if NH_3D_SPIVMP
    1960       , bSPIVMPFlag
    1961 #endif
    1962       , numValidMergeCand
    1963       );
    1964 
    1965 #else
    1966     rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );
    1967 #endif
    1968 
    1969 
    1970 #endif
    19711280
    19721281  for( UInt uiNoResidual = 0; uiNoResidual < iteration; ++uiNoResidual )
     
    19781287    for( UInt uiMergeCand = 0; uiMergeCand < numValidMergeCand; ++uiMergeCand )
    19791288    {
    1980 #if NH_3D_IC
    1981       if( rpcTempCU->getSlice()->getApplyIC() && rpcTempCU->getSlice()->getIcSkipParseFlag() )
    1982       {
    1983         if( bICFlag && uiMergeCand == 0 )
    1984         {
    1985           continue;
    1986         }
    1987       }
    1988 #endif
    19891289#if NH_MV
    19901290      D_PRINT_INC_INDENT ( g_traceModeCheck, "uiMergeCand: "+  n2s(uiMergeCand) );
     
    19981298          // set MC parameters
    19991299          rpcTempCU->setPredModeSubParts( MODE_INTER, 0, uhDepth ); // interprets depth relative to CTU level
    2000 #if NH_3D_IC
    2001           rpcTempCU->setICFlagSubParts( bICFlag, 0, 0, uhDepth );
    2002 #endif
    20031300          rpcTempCU->setCUTransquantBypassSubParts( bTransquantBypassFlag, 0, uhDepth );
    20041301          rpcTempCU->setChromaQpAdjSubParts( bTransquantBypassFlag ? 0 : m_cuChromaQpOffsetIdxPlus1, 0, uhDepth );
     
    20061303          rpcTempCU->setMergeFlagSubParts( true, 0, 0, uhDepth ); // interprets depth relative to CTU level
    20071304          rpcTempCU->setMergeIndexSubParts( uiMergeCand, 0, 0, uhDepth ); // interprets depth relative to CTU level
    2008 #if NH_3D_ARP
    2009           rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth );
    2010 #endif
    2011 
    2012 #if NH_3D_VSP
    2013           rpcTempCU->setVSPFlagSubParts( vspFlag[uiMergeCand], 0, 0, uhDepth );
    2014 #endif
    2015 #if NH_3D_SPIVMP
    2016           rpcTempCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeCand], 0, 0, uhDepth);
    2017           if (bSPIVMPFlag[uiMergeCand])
     1305
    20181306          {
    2019             UInt uiSPAddr;
    2020             Int iWidth = rpcTempCU->getWidth(0);
    2021             Int iHeight = rpcTempCU->getHeight(0);
    2022             Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
    2023             rpcTempCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
    2024             for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
    2025             {
    2026               rpcTempCU->getSPAbsPartIdx(0, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
    2027               rpcTempCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
    2028               rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(rpcTempCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
    2029               rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(rpcTempCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
    2030             }
    2031           }
    2032           else
    2033 #endif
    2034           {
    2035 #if NH_3D_VSP
    2036             if ( vspFlag[uiMergeCand] )
    2037             {
    2038               UInt partAddr;
    2039               Int vspSize;
    2040               Int width, height;
    2041               rpcTempCU->getPartIndexAndSize( 0, partAddr, width, height );
    2042               if( uhInterDirNeighbours[ uiMergeCand ] & 0x01 )
    2043               {
    2044                 rpcTempCU->setMvFieldPUForVSP( rpcTempCU, partAddr, width, height, REF_PIC_LIST_0, cMvFieldNeighbours[ 2*uiMergeCand + 0 ].getRefIdx(), vspSize );
    2045                 rpcTempCU->setVSPFlag( partAddr, vspSize );
    2046               }
    2047               else
    2048               {
    2049                 rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
    2050               }
    2051               if( uhInterDirNeighbours[ uiMergeCand ] & 0x02 )
    2052               {
    2053                 rpcTempCU->setMvFieldPUForVSP( rpcTempCU, partAddr, width, height, REF_PIC_LIST_1 , cMvFieldNeighbours[ 2*uiMergeCand + 1 ].getRefIdx(), vspSize );
    2054                 rpcTempCU->setVSPFlag( partAddr, vspSize );
    2055               }
    2056               else
    2057               {
    2058                 rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
    2059               }
    2060               rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to LCU level
    2061             }
    2062             else
    2063             {
    2064 #endif
    20651307            rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to CTU level
    20661308            rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
    20671309            rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
    2068 #if NH_3D_VSP
    2069             }
    2070 #endif
    20711310          }
    20721311          // do MC
    20731312          m_pcPredSearch->motionCompensation ( rpcTempCU, m_ppcPredYuvTemp[uhDepth] );
    20741313          // estimate residual and encode everything
    2075 #if NH_3D_VSO //M2
    2076           if( m_pcRdCost->getUseRenModel() )
    2077           { //Reset
    2078             UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth    ( COMPONENT_Y );
    2079             UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight   ( COMPONENT_Y );
    2080             Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr     ( COMPONENT_Y );
    2081             UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride   ( COMPONENT_Y );
    2082             m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2083           }
    2084 #endif
    20851314          m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU,
    20861315                                                     m_ppcOrigYuv    [uhDepth],
     
    21001329            mergeCandBuffer[uiMergeCand] = 1;
    21011330          }
    2102 #if NH_3D_DIS
    2103           rpcTempCU->setDISFlagSubParts( false, 0, uhDepth );
    2104 #endif
    2105 #if NH_3D_VSP
    2106           if( rpcTempCU->getSkipFlag(0) )
    2107           {
    2108             rpcTempCU->setTrIdxSubParts(0, 0, uhDepth);
    2109           }
    2110 #endif
    2111 #if NH_3D_SDC_INTER
    2112           TComDataCU *rpcTempCUPre = rpcTempCU;
    2113 #endif
    21141331          Int orgQP = rpcTempCU->getQP( 0 );
    21151332          xCheckDQP( rpcTempCU );
    21161333          xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth DEBUG_STRING_PASS_INTO(bestStr) DEBUG_STRING_PASS_INTO(tmpStr));
    2117 #if NH_3D_SDC_INTER
    2118           if( rpcTempCU->getSlice()->getInterSdcFlag() && !uiNoResidual )
    2119           {
    2120             Double dOffsetCost[3] = {MAX_DOUBLE,MAX_DOUBLE,MAX_DOUBLE};
    2121             for( Int uiOffest = 1 ; uiOffest <= 5 ; uiOffest++ )
    2122             {
    2123               if( uiOffest > 3)
    2124               {
    2125                 if ( dOffsetCost[0] < (0.9*dOffsetCost[1]) && dOffsetCost[0] < (0.9*dOffsetCost[2]) )
    2126                 {
    2127                   continue;
    2128                 }
    2129                 if ( dOffsetCost[1] < dOffsetCost[0] && dOffsetCost[0] < dOffsetCost[2] &&  uiOffest == 5)
    2130                 {
    2131                   continue;
    2132                 }
    2133                 if ( dOffsetCost[0] < dOffsetCost[1] && dOffsetCost[2] < dOffsetCost[0] &&  uiOffest == 4)
    2134                 {
    2135                   continue;
    2136                 }
    2137               }
    2138               if( rpcTempCU != rpcTempCUPre )
    2139               {
    2140                 rpcTempCU->initEstData( uhDepth, orgQP, bTransquantBypassFlag  );
    2141                 rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth );
    2142               }
    2143               rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth );
    2144 #if NH_3D_DIS
    2145               rpcTempCU->setDISFlagSubParts( false, 0, uhDepth );
    2146 #endif
    2147               rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth );
    2148               rpcTempCU->setCbfSubParts( 1, COMPONENT_Y, 0, uhDepth );
    2149 #if NH_3D_VSO //M2
    2150               if( m_pcRdCost->getUseRenModel() )
    2151               { //Reset
    2152                 UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth    ( COMPONENT_Y );
    2153                 UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight   ( COMPONENT_Y );
    2154                 Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr     ( COMPONENT_Y );
    2155                 UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride   ( COMPONENT_Y );
    2156                 m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2157               }
    2158 #endif
    2159               Int iSdcOffset = 0;
    2160               if(uiOffest % 2 == 0)
    2161               {
    2162                 iSdcOffset = uiOffest >> 1;
    2163               }
    2164               else
    2165               {
    2166                 iSdcOffset = -1 * (uiOffest >> 1);
    2167               }
    2168               m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
    2169                 m_ppcOrigYuv[uhDepth],
    2170                 ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
    2171                 m_ppcResiYuvTemp[uhDepth],
    2172                 m_ppcRecoYuvTemp[uhDepth],
    2173                 iSdcOffset,
    2174                 uhDepth );
    2175               if (uiOffest <= 3 )
    2176               {
    2177                 dOffsetCost [uiOffest -1] = rpcTempCU->getTotalCost();
    2178               }
    2179 
    2180               xCheckDQP( rpcTempCU );
    2181               xCheckBestMode( rpcBestCU, rpcTempCU, uhDepth DEBUG_STRING_PASS_INTO(bestStr) DEBUG_STRING_PASS_INTO(tmpStr) );
    2182             }
    2183           }
    2184 #endif
    21851334
    21861335          rpcTempCU->initEstData( uhDepth, orgQP, bTransquantBypassFlag );
     
    21881337          if( m_pcEncCfg->getUseFastDecisionForMerge() && !bestIsSkip )
    21891338          {
    2190 #if NH_3D_SDC_INTER
    2191             if( rpcTempCU->getSlice()->getInterSdcFlag() )
    2192             {
    2193               bestIsSkip = !rpcBestCU->getSDCFlag( 0 ) && ( rpcBestCU->getQtRootCbf(0) == 0 );
    2194             }
    2195             else
    2196             {
    2197 #endif
    21981339            bestIsSkip = rpcBestCU->getQtRootCbf(0) == 0;
    2199 #if NH_3D_SDC_INTER
    2200             }
    2201 #endif
    22021340          }
    22031341        }
     
    22421380  }
    22431381  DEBUG_STRING_APPEND(sDebug, bestStr)
    2244 #if NH_3D_ARP
    2245  }
    2246 #endif
    2247 #if NH_3D_SPIVMP
    2248  delete[] pcMvFieldSP;
    2249  delete[] puhInterDirSP;
    2250 #endif
    22511382#if NH_MV
    22521383 D_DEC_INDENT( g_traceModeCheck );
     
    22561387
    22571388#if AMP_MRG
    2258 #if  NH_3D_FAST_TEXTURE_ENCODING
    2259 Void TEncCu::xCheckRDCostInter( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize DEBUG_STRING_FN_DECLARE(sDebug), Bool bFMD, Bool bUseMRG)
    2260 #else
    22611389Void TEncCu::xCheckRDCostInter( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize DEBUG_STRING_FN_DECLARE(sDebug), Bool bUseMRG)
    2262 #endif
    22631390#else
    22641391Void TEncCu::xCheckRDCostInter( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize ePartSize )
     
    22831410
    22841411  // prior to this, rpcTempCU will have just been reset using rpcTempCU->initEstData( uiDepth, iQP, bIsLosslessMode );
    2285 #if NH_3D_ARP
    2286   const Bool bTransquantBypassFlag = rpcTempCU->getCUTransquantBypass(0);
    2287 #endif
    2288 #if  NH_3D_FAST_TEXTURE_ENCODING
    2289   if(!(bFMD && (ePartSize == SIZE_2Nx2N)))  //have  motion estimation or merge check
    2290   {
    2291 #endif
    22921412  UChar uhDepth = rpcTempCU->getDepth( 0 );
    2293 #if NH_3D_ARP
    2294     Bool bFirstTime = true;
    2295     Int nARPWMax    = rpcTempCU->getSlice()->getARPStepNum() - 1;
    2296 #if NH_3D_IC
    2297     if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N || rpcTempCU->getICFlag(0) )
    2298 #else
    2299     if( nARPWMax < 0 || ePartSize != SIZE_2Nx2N )
    2300 #endif
    2301     {
    2302       nARPWMax = 0;
    2303     }
    2304 
    2305     for( Int nARPW = 0; nARPW <= nARPWMax; nARPW++ )
    2306     {
    2307 #if DEBUG_STRING && H_MV_ENC_DEC_TRAC
    2308       sTest.clear();
    2309 #endif
    2310 
    2311       if( !bFirstTime && rpcTempCU->getSlice()->getIvResPredFlag() )
    2312       {
    2313         rpcTempCU->initEstData( rpcTempCU->getDepth(0), rpcTempCU->getQP(0),bTransquantBypassFlag );     
    2314       }
    2315 #endif
    2316 #if NH_3D_VSO // M3
    2317       if( m_pcRdCost->getUseRenModel() )
    2318       {
    2319         UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( COMPONENT_Y );
    2320         UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( COMPONENT_Y );
    2321         Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr  ( COMPONENT_Y );
    2322         UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride( COMPONENT_Y );
    2323         m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2324       }
    2325 #endif
    2326 #if NH_3D_DIS
    2327       rpcTempCU->setDISFlagSubParts( false, 0, uhDepth );
    2328 #endif
    23291413  rpcTempCU->setPartSizeSubParts  ( ePartSize,  0, uhDepth );
    23301414  rpcTempCU->setPredModeSubParts  ( MODE_INTER, 0, uhDepth );
    23311415  rpcTempCU->setChromaQpAdjSubParts( rpcTempCU->getCUTransquantBypass(0) ? 0 : m_cuChromaQpOffsetIdxPlus1, 0, uhDepth );
    2332 #if NH_3D_ARP
    2333       rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth );
    2334 #endif
    2335 #if NH_3D_ARP
    2336       if( bFirstTime == false && nARPWMax )
    2337       {
    2338         rpcTempCU->copyPartFrom( m_ppcWeightedTempCU[uhDepth] , 0 , uhDepth );
    2339         rpcTempCU->setARPWSubParts( (UChar)nARPW , 0 , uhDepth );
    2340 
    2341         m_pcPredSearch->motionCompensation( rpcTempCU , m_ppcPredYuvTemp[uhDepth] );
    2342       }
    2343       else
    2344       {
    2345         bFirstTime = false;
    2346 #endif
    23471416#if AMP_MRG
    23481417  rpcTempCU->setMergeAMP (true);
    2349 #if  NH_3D_FAST_TEXTURE_ENCODING
    2350         m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth] DEBUG_STRING_PASS_INTO(sTest), bFMD, false, bUseMRG );
    2351 #else
    23521418  m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth] DEBUG_STRING_PASS_INTO(sTest), false, bUseMRG );
    2353 #endif
    23541419
    23551420#else
    23561421  m_pcPredSearch->predInterSearch ( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcRecoYuvTemp[uhDepth] );
    23571422#endif
    2358 #if NH_3D_ARP
    2359         if( nARPWMax )
    2360         {
    2361           m_ppcWeightedTempCU[uhDepth]->copyPartFrom( rpcTempCU , 0 , uhDepth );
    2362         }
    2363       }
    2364 #endif
    23651423
    23661424#if AMP_MRG
    23671425  if ( !rpcTempCU->getMergeAMP() )
    23681426  {
    2369 #if NH_3D_ARP
    2370         if( nARPWMax )
    2371         {
    2372           continue;
    2373         }
    2374         else
    2375 #endif
    23761427    {
    23771428#if NH_MV
     
    23821433  }
    23831434#endif
    2384 #if KWU_RC_MADPRED_E0227
    2385       if ( m_pcEncCfg->getUseRateCtrl() && m_pcEncCfg->getLCULevelRC() && ePartSize == SIZE_2Nx2N && uhDepth <= m_addSADDepth )
    2386       {
    2387         UInt SAD = m_pcRdCost->getSADPart( g_bitDepthY, m_ppcPredYuvTemp[uhDepth]->getLumaAddr(), m_ppcPredYuvTemp[uhDepth]->getStride(),
    2388           m_ppcOrigYuv[uhDepth]->getLumaAddr(), m_ppcOrigYuv[uhDepth]->getStride(),
    2389           rpcTempCU->getWidth(0), rpcTempCU->getHeight(0) );
    2390         m_temporalSAD = (Int)SAD;
    2391       }
    2392 #endif
    23931435
    23941436  m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvBest[uhDepth], m_ppcRecoYuvTemp[uhDepth], false DEBUG_STRING_PASS_INTO(sTest) );
    2395 #if NH_3D_VSP
    2396   if( rpcTempCU->getQtRootCbf(0)==0 )
    2397   {
    2398     rpcTempCU->setTrIdxSubParts(0, 0, uhDepth);
    2399   }
    2400 #endif
    2401 #if NH_3D_VSO // M4
    2402   if( m_pcRdCost->getUseLambdaScaleVSO() )
    2403   {
    2404     rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    2405   }
    2406   else           
    2407 #endif
    24081437    rpcTempCU->getTotalCost()  = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    24091438
     
    24111440  DebugInterPredResiReco(sTest, *(m_ppcPredYuvTemp[uhDepth]), *(m_ppcResiYuvBest[uhDepth]), *(m_ppcRecoYuvTemp[uhDepth]), DebugStringGetPredModeMask(rpcTempCU->getPredictionMode(0)));
    24121441#endif
    2413 #if NH_3D_SDC_INTER
    2414       TComDataCU *rpcTempCUPre = rpcTempCU;
    2415 #endif
    24161442
    24171443  xCheckDQP( rpcTempCU );
    24181444  xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth DEBUG_STRING_PASS_INTO(sDebug) DEBUG_STRING_PASS_INTO(sTest));
    2419 #if NH_3D_SDC_INTER
    2420       if( rpcTempCU->getSlice()->getInterSdcFlag() && ePartSize == SIZE_2Nx2N)
    2421       {
    2422         Double dOffsetCost[3] = {MAX_DOUBLE,MAX_DOUBLE,MAX_DOUBLE};
    2423         for( Int uiOffest = 1 ; uiOffest <= 5 ; uiOffest++ )
    2424         {
    2425           if( uiOffest > 3)
    2426           {
    2427             if ( dOffsetCost[0] < (0.9*dOffsetCost[1]) && dOffsetCost[0] < (0.9*dOffsetCost[2]) )
    2428             {
    2429               continue;
    2430             }
    2431             if ( dOffsetCost[1] < dOffsetCost[0] && dOffsetCost[0] < dOffsetCost[2] &&  uiOffest == 5)
    2432             {
    2433               continue;
    2434             }
    2435             if ( dOffsetCost[0] < dOffsetCost[1] && dOffsetCost[2] < dOffsetCost[0] &&  uiOffest == 4)
    2436             {
    2437               continue;
    2438             }
    2439           }
    2440 
    2441           if( rpcTempCU != rpcTempCUPre )
    2442           {
    2443             Int orgQP = rpcBestCU->getQP( 0 );
    2444             rpcTempCU->initEstData( uhDepth, orgQP ,bTransquantBypassFlag );     
    2445             rpcTempCU->copyPartFrom( rpcBestCU, 0, uhDepth );
    2446           }
    2447           rpcTempCU->setSkipFlagSubParts( false, 0, uhDepth );
    2448 #if NH_3D_DIS
    2449           rpcTempCU->setDISFlagSubParts( false, 0, uhDepth );
    2450 #endif
    2451           rpcTempCU->setTrIdxSubParts( 0, 0, uhDepth );
    2452           rpcTempCU->setCbfSubParts( 1, COMPONENT_Y, 0, uhDepth );
    2453 #if NH_3D_VSO // M3
    2454           if( m_pcRdCost->getUseRenModel() )
    2455           {
    2456             UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( COMPONENT_Y );
    2457             UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( COMPONENT_Y  );
    2458             Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr  ( COMPONENT_Y  );
    2459             UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride( COMPONENT_Y  );
    2460             m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2461           }
    2462 #endif
    2463 
    2464           Int iSdcOffset = 0;
    2465           if(uiOffest % 2 == 0)
    2466           {
    2467             iSdcOffset = uiOffest >> 1;
    2468           }
    2469           else
    2470           {
    2471             iSdcOffset = -1 * (uiOffest >> 1);
    2472           }
    2473           m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
    2474             m_ppcOrigYuv[uhDepth],
    2475             ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
    2476             m_ppcResiYuvTemp[uhDepth],
    2477             m_ppcRecoYuvTemp[uhDepth],
    2478             iSdcOffset,
    2479             uhDepth );
    2480           if (uiOffest <= 3 )
    2481           {
    2482             dOffsetCost [uiOffest -1] = rpcTempCU->getTotalCost();
    2483           }
    2484 
    2485           xCheckDQP( rpcTempCU );
    2486           xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth DEBUG_STRING_PASS_INTO(sDebug) DEBUG_STRING_PASS_INTO(sTest));
    2487         }
    2488 
    2489       }
    2490 #endif
    2491 #if NH_3D_ARP
    2492     }
    2493 #endif
    2494 #if  NH_3D_FAST_TEXTURE_ENCODING
    2495   }
    2496 #endif
    24971445#if NH_MV
    24981446  D_DEC_INDENT( g_traceModeCheck );
     
    25001448}
    25011449
    2502 #if NH_3D_DBBP
    2503 Void TEncCu::xInvalidateOriginalSegments( TComYuv* pOrigYuv, TComYuv* pOrigYuvTemp, Bool* pMask, UInt uiValidSegment )
    2504 {
    2505   UInt  uiWidth     = pOrigYuv->getWidth (COMPONENT_Y);
    2506   UInt  uiHeight    = pOrigYuv->getHeight(COMPONENT_Y);
    2507   Pel*  piSrc       = pOrigYuv->getAddr(COMPONENT_Y);
    2508   UInt  uiSrcStride = pOrigYuv->getStride(COMPONENT_Y);
    2509   Pel*  piDst       = pOrigYuvTemp->getAddr(COMPONENT_Y);
    2510   UInt  uiDstStride = pOrigYuvTemp->getStride(COMPONENT_Y);
    2511  
    2512   UInt  uiMaskStride= MAX_CU_SIZE;
    2513  
    2514   AOF( uiWidth == uiHeight );
    2515  
    2516   // backup pointer
    2517   Bool* pMaskStart = pMask;
    2518  
    2519   for (Int y=0; y<uiHeight; y++)
    2520   {
    2521     for (Int x=0; x<uiWidth; x++)
    2522     {
    2523       UChar ucSegment = (UChar)pMask[x];
    2524       AOF( ucSegment < 2 );
    2525      
    2526       piDst[x] = (ucSegment==uiValidSegment)?piSrc[x]:DBBP_INVALID_SHORT;
    2527     }
    2528    
    2529     piSrc  += uiSrcStride;
    2530     piDst  += uiDstStride;
    2531     pMask  += uiMaskStride;
    2532   }
    2533  
    2534   // now invalidate chroma
    2535   Pel*  piSrcU       = pOrigYuv->getAddr(COMPONENT_Cb);
    2536   Pel*  piSrcV       = pOrigYuv->getAddr(COMPONENT_Cr);
    2537   UInt  uiSrcStrideC = pOrigYuv->getStride(COMPONENT_Cb);
    2538   Pel*  piDstU       = pOrigYuvTemp->getAddr(COMPONENT_Cb);
    2539   Pel*  piDstV       = pOrigYuvTemp->getAddr(COMPONENT_Cr);
    2540   UInt  uiDstStrideC = pOrigYuvTemp->getStride(COMPONENT_Cb);
    2541   pMask = pMaskStart;
    2542  
    2543   for (Int y=0; y<uiHeight/2; y++)
    2544   {
    2545     for (Int x=0; x<uiWidth/2; x++)
    2546     {
    2547       UChar ucSegment = (UChar)pMask[x*2];
    2548       AOF( ucSegment < 2 );
    2549      
    2550       piDstU[x] = (ucSegment==uiValidSegment)?piSrcU[x]:DBBP_INVALID_SHORT;
    2551       piDstV[x] = (ucSegment==uiValidSegment)?piSrcV[x]:DBBP_INVALID_SHORT;
    2552     }
    2553    
    2554     piSrcU  += uiSrcStrideC;
    2555     piSrcV  += uiSrcStrideC;
    2556     piDstU  += uiDstStrideC;
    2557     piDstV  += uiDstStrideC;
    2558     pMask   += 2*uiMaskStride;
    2559   }
    2560 }
    2561 #endif
    2562 
    2563 #if NH_3D_DBBP
    2564 Void TEncCu::xCheckRDCostInterDBBP( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU  DEBUG_STRING_FN_DECLARE(sDebug), Bool bUseMRG )
    2565 {
    2566   DEBUG_STRING_NEW(sTest)
    2567   AOF( !rpcTempCU->getSlice()->getIsDepth() );
    2568  
    2569   UChar uhDepth = rpcTempCU->getDepth( 0 );
    2570  
    2571 #if NH_3D_VSO
    2572   if( m_pcRdCost->getUseRenModel() )
    2573   {
    2574     UInt  uiWidth     = m_ppcOrigYuv[uhDepth]->getWidth ( COMPONENT_Y );
    2575     UInt  uiHeight    = m_ppcOrigYuv[uhDepth]->getHeight( COMPONENT_Y );
    2576     Pel*  piSrc       = m_ppcOrigYuv[uhDepth]->getAddr  ( COMPONENT_Y );
    2577     UInt  uiSrcStride = m_ppcOrigYuv[uhDepth]->getStride( COMPONENT_Y );
    2578     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2579   }
    2580 #endif
    2581  
    2582   UInt uiWidth  = rpcTempCU->getWidth(0);
    2583   UInt uiHeight = rpcTempCU->getHeight(0);
    2584   AOF( uiWidth == uiHeight );
    2585  
    2586 #if NH_3D_DBBP
    2587   if(uiWidth <= 8)
    2588   {
    2589     return;
    2590   }
    2591 #endif
    2592  
    2593   rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N,  0, uhDepth );
    2594  
    2595   // fetch virtual depth block
    2596   UInt uiDepthStride = 0;
    2597 #if H_3D_FCO
    2598   Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(rpcTempCU->getZorderIdxInCU(), uiWidth, uiHeight, uiDepthStride);
    2599 #else
    2600   Pel* pDepthPels = rpcTempCU->getVirtualDepthBlock(0, uiWidth, uiHeight, uiDepthStride);
    2601 #endif
    2602   AOF( pDepthPels != NULL );
    2603   AOF( uiDepthStride != 0 );
    2604  
    2605   PartSize eVirtualPartSize = m_pcPredSearch->getPartitionSizeFromDepth(pDepthPels, uiDepthStride, uiWidth, rpcTempCU);
    2606 
    2607   // derive partitioning from depth
    2608   Bool pMask[MAX_CU_SIZE*MAX_CU_SIZE];
    2609   Bool bValidMask = m_pcPredSearch->getSegmentMaskFromDepth(pDepthPels, uiDepthStride, uiWidth, uiHeight, pMask, rpcTempCU);
    2610  
    2611   if( !bValidMask )
    2612   {
    2613     return;
    2614   }
    2615  
    2616   // find optimal motion/disparity vector for each segment
    2617   DisInfo originalDvInfo = rpcTempCU->getDvInfo(0);
    2618   DbbpTmpData* pDBBPTmpData = rpcTempCU->getDBBPTmpData();
    2619   TComYuv* apPredYuv[2] = { m_ppcRecoYuvTemp[uhDepth], m_ppcPredYuvTemp[uhDepth] };
    2620  
    2621   // find optimal motion vector fields for both segments (as 2Nx2N)
    2622   rpcTempCU->setDepthSubParts( uhDepth, 0 );
    2623   rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N,  0, uhDepth );
    2624   rpcTempCU->setPredModeSubParts( MODE_INTER, 0, uhDepth );
    2625   for( UInt uiSegment = 0; uiSegment < 2; uiSegment++ )
    2626   {
    2627     rpcTempCU->setDBBPFlagSubParts(true, 0, 0, uhDepth);
    2628     rpcTempCU->setDvInfoSubParts(originalDvInfo, 0, uhDepth);
    2629    
    2630     // invalidate all other segments in original YUV
    2631     xInvalidateOriginalSegments(m_ppcOrigYuv[uhDepth], m_ppcOrigYuvDBBP[uhDepth], pMask, uiSegment);
    2632    
    2633     // do motion estimation for this segment
    2634     m_pcRdCost->setUseMask(true);
    2635     rpcTempCU->getDBBPTmpData()->eVirtualPartSize = eVirtualPartSize;
    2636     rpcTempCU->getDBBPTmpData()->uiVirtualPartIndex = uiSegment;
    2637     m_pcPredSearch->predInterSearch( rpcTempCU, m_ppcOrigYuvDBBP[uhDepth], apPredYuv[uiSegment], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth] DEBUG_STRING_PASS_INTO(sTest), false, bUseMRG );
    2638     m_pcRdCost->setUseMask(false);
    2639    
    2640     // extract motion parameters of full block for this segment
    2641     pDBBPTmpData->auhInterDir[uiSegment] = rpcTempCU->getInterDir(0);
    2642    
    2643     pDBBPTmpData->abMergeFlag[uiSegment] = rpcTempCU->getMergeFlag(0);
    2644     pDBBPTmpData->auhMergeIndex[uiSegment] = rpcTempCU->getMergeIndex(0);
    2645    
    2646 #if NH_3D_VSP
    2647     AOF( rpcTempCU->getSPIVMPFlag(0) == false );
    2648     AOF( rpcTempCU->getVSPFlag(0) == 0 );
    2649 #endif
    2650    
    2651     for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    2652     {
    2653       RefPicList eRefList = (RefPicList)uiRefListIdx;
    2654      
    2655       pDBBPTmpData->acMvd[uiSegment][eRefList] = rpcTempCU->getCUMvField(eRefList)->getMvd(0);
    2656       pDBBPTmpData->aiMvpNum[uiSegment][eRefList] = rpcTempCU->getMVPNum(eRefList, 0);
    2657       pDBBPTmpData->aiMvpIdx[uiSegment][eRefList] = rpcTempCU->getMVPIdx(eRefList, 0);
    2658      
    2659       rpcTempCU->getMvField(rpcTempCU, 0, eRefList, pDBBPTmpData->acMvField[uiSegment][eRefList]);
    2660     }
    2661   }
    2662  
    2663   // store final motion/disparity information in each PU using derived partitioning
    2664   rpcTempCU->setDepthSubParts( uhDepth, 0 );
    2665   rpcTempCU->setPartSizeSubParts  ( eVirtualPartSize,  0, uhDepth );
    2666   rpcTempCU->setPredModeSubParts  ( MODE_INTER, 0, uhDepth );
    2667  
    2668   UInt uiPUOffset = ( g_auiPUOffset[UInt( eVirtualPartSize )] << ( ( rpcTempCU->getSlice()->getSPS()->getMaxTotalCUDepth() - uhDepth ) << 1 ) ) >> 4;
    2669   for( UInt uiSegment = 0; uiSegment < 2; uiSegment++ )
    2670   {
    2671     UInt uiPartAddr = uiSegment*uiPUOffset;
    2672    
    2673     rpcTempCU->setDBBPFlagSubParts(true, uiPartAddr, uiSegment, uhDepth);
    2674    
    2675     // now set stored information from 2Nx2N motion search to each partition
    2676     rpcTempCU->setInterDirSubParts(pDBBPTmpData->auhInterDir[uiSegment], uiPartAddr, uiSegment, uhDepth); // interprets depth relative to LCU level
    2677    
    2678     rpcTempCU->setMergeFlagSubParts(pDBBPTmpData->abMergeFlag[uiSegment], uiPartAddr, uiSegment, uhDepth);
    2679     rpcTempCU->setMergeIndexSubParts(pDBBPTmpData->auhMergeIndex[uiSegment], uiPartAddr, uiSegment, uhDepth);
    2680        
    2681     for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
    2682     {
    2683       RefPicList eRefList = (RefPicList)uiRefListIdx;
    2684      
    2685       rpcTempCU->getCUMvField( eRefList )->setAllMvd(pDBBPTmpData->acMvd[uiSegment][eRefList], eVirtualPartSize, uiPartAddr, 0, uiSegment);
    2686       rpcTempCU->setMVPNum(eRefList, uiPartAddr, pDBBPTmpData->aiMvpNum[uiSegment][eRefList]);
    2687       rpcTempCU->setMVPIdx(eRefList, uiPartAddr, pDBBPTmpData->aiMvpIdx[uiSegment][eRefList]);
    2688      
    2689       rpcTempCU->getCUMvField( eRefList )->setAllMvField( pDBBPTmpData->acMvField[uiSegment][eRefList], eVirtualPartSize, uiPartAddr, 0, uiSegment ); // interprets depth relative to rpcTempCU level
    2690     }
    2691   }
    2692  
    2693   // reconstruct final prediction signal by combining both segments
    2694   Int bitDepthY = rpcTempCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA);
    2695   m_pcPredSearch->combineSegmentsWithMask(apPredYuv, m_ppcPredYuvTemp[uhDepth], pMask, uiWidth, uiHeight, 0, eVirtualPartSize, bitDepthY);
    2696   m_pcPredSearch->encodeResAndCalcRdInterCU( rpcTempCU, m_ppcOrigYuv[uhDepth], m_ppcPredYuvTemp[uhDepth], m_ppcResiYuvTemp[uhDepth], m_ppcResiYuvBest[uhDepth], m_ppcRecoYuvTemp[uhDepth], false DEBUG_STRING_PASS_INTO(sTest) );
    2697  
    2698   xCheckDQP( rpcTempCU );
    2699   xCheckBestMode(rpcBestCU, rpcTempCU, uhDepth  DEBUG_STRING_PASS_INTO(sDebug) DEBUG_STRING_PASS_INTO(sTest) );
    2700 }
    2701 #endif
    2702 #if NH_3D_DIS
    2703 Void TEncCu::xCheckRDCostDIS( TComDataCU*& rpcBestCU, TComDataCU*& rpcTempCU, PartSize eSize DEBUG_STRING_FN_DECLARE(sDebug) )
    2704 {
    2705   DEBUG_STRING_NEW(sTest)
    2706   UInt uiDepth = rpcTempCU->getDepth( 0 );
    2707   if( !rpcBestCU->getSlice()->getIsDepth() || (eSize != SIZE_2Nx2N))
    2708   {
    2709     return;
    2710   }
    2711 
    2712 #if NH_MV
    2713   D_PRINT_INC_INDENT(g_traceModeCheck, "xCheckRDCostDIS" );
    2714 #endif
    2715 
    2716 #if NH_3D_VSO // M5
    2717   if( m_pcRdCost->getUseRenModel() )
    2718   {
    2719     UInt  uiWidth     = m_ppcOrigYuv[uiDepth]->getWidth   ( COMPONENT_Y );
    2720     UInt  uiHeight    = m_ppcOrigYuv[uiDepth]->getHeight  ( COMPONENT_Y );
    2721     Pel*  piSrc       = m_ppcOrigYuv[uiDepth]->getAddr    ( COMPONENT_Y );
    2722     UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride  ( COMPONENT_Y );
    2723     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2724   }
    2725 #endif
    2726 
    2727   rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth );
    2728   rpcTempCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
    2729   rpcTempCU->setPredModeSubParts( MODE_INTRA, 0, uiDepth );
    2730   rpcTempCU->setCUTransquantBypassSubParts( rpcTempCU->getCUTransquantBypass(0), 0, uiDepth );
    2731 
    2732   rpcTempCU->setTrIdxSubParts(0, 0, uiDepth);
    2733   rpcTempCU->setCbfSubParts(0, COMPONENT_Y, 0, uiDepth);
    2734   rpcTempCU->setDISFlagSubParts(true, 0, uiDepth);
    2735   rpcTempCU->setIntraDirSubParts(CHANNEL_TYPE_LUMA, DC_IDX, 0, uiDepth);
    2736 #if NH_3D_SDC_INTRA
    2737   rpcTempCU->setSDCFlagSubParts( false, 0, uiDepth);
    2738 #endif
    2739 
    2740   UInt uiPreCalcDistC;
    2741   m_pcPredSearch  ->estIntraPredDIS      ( rpcTempCU, m_ppcOrigYuv[uiDepth], m_ppcPredYuvTemp[uiDepth], m_ppcResiYuvTemp[uiDepth], m_ppcRecoYuvTemp[uiDepth], uiPreCalcDistC, false );
    2742 
    2743 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC
    2744   Int oldTraceCopyBack = g_traceCopyBack;
    2745   g_traceCopyBack = false; 
    2746 #endif
    2747   m_ppcRecoYuvTemp[uiDepth]->copyToPicComponent(COMPONENT_Y, rpcTempCU->getPic()->getPicYuvRec(), rpcTempCU->getCtuRsAddr(), rpcTempCU->getZorderIdxInCtu() );
    2748 #if ENC_DEC_TRACE && H_MV_ENC_DEC_TRAC 
    2749   g_traceCopyBack = oldTraceCopyBack;
    2750 #endif
    2751 
    2752   m_pcEntropyCoder->resetBits();
    2753   if ( rpcTempCU->getSlice()->getPPS()->getTransquantBypassEnableFlag())
    2754   {
    2755     m_pcEntropyCoder->encodeCUTransquantBypassFlag( rpcTempCU, 0,          true );
    2756   }
    2757   m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0,          true );
    2758   m_pcEntropyCoder->encodeDIS( rpcTempCU, 0,          true );
    2759 
    2760   m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]);
    2761 
    2762   rpcTempCU->getTotalBits() = m_pcEntropyCoder->getNumberOfWrittenBits();
    2763   rpcTempCU->getTotalBins() = ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    2764 
    2765 #if NH_3D_VSO // M6
    2766   if( m_pcRdCost->getUseLambdaScaleVSO())
    2767   {
    2768     rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() ); 
    2769   }
    2770   else
    2771 #endif
    2772   rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    2773 
    2774   xCheckDQP( rpcTempCU );
    2775   xCheckBestMode(rpcBestCU, rpcTempCU, uiDepth  DEBUG_STRING_PASS_INTO(sDebug) DEBUG_STRING_PASS_INTO(sTest) );
    2776 #if NH_MV
    2777   D_DEC_INDENT( g_traceModeCheck ); 
    2778 #endif
    2779 }
    2780 #endif
     1450
    27811451Void TEncCu::xCheckRDCostIntra( TComDataCU *&rpcBestCU,
    27821452                                TComDataCU *&rpcTempCU,
     
    27841454                                PartSize     eSize
    27851455                                DEBUG_STRING_FN_DECLARE(sDebug)
    2786 #if NH_3D_ENC_DEPTH
    2787                               , Bool bOnlyIVP
    2788 #endif
    27891456                              )
    27901457{
     
    28051472
    28061473  UInt uiDepth = rpcTempCU->getDepth( 0 );
    2807 #if NH_3D_VSO // M5
    2808   if( m_pcRdCost->getUseRenModel() )
    2809   {
    2810     UInt  uiWidth     = m_ppcOrigYuv[uiDepth]->getWidth   ( COMPONENT_Y );
    2811     UInt  uiHeight    = m_ppcOrigYuv[uiDepth]->getHeight  ( COMPONENT_Y );
    2812     Pel*  piSrc       = m_ppcOrigYuv[uiDepth]->getAddr    ( COMPONENT_Y );
    2813     UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride  ( COMPONENT_Y );
    2814     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2815   }
    2816 #endif
    28171474
    28181475  rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth );
    2819 #if NH_3D_DIS
    2820   rpcTempCU->setDISFlagSubParts( false, 0, uiDepth );
    2821 #endif
    28221476
    28231477
     
    28291483
    28301484  m_pcPredSearch->estIntraPredLumaQT( rpcTempCU, m_ppcOrigYuv[uiDepth], m_ppcPredYuvTemp[uiDepth], m_ppcResiYuvTemp[uiDepth], m_ppcRecoYuvTemp[uiDepth], resiLuma DEBUG_STRING_PASS_INTO(sTest)
    2831 #if NH_3D_ENC_DEPTH
    2832                                     , bOnlyIVP
    2833 #endif
    28341485                                    );
    28351486
     
    28411492  }
    28421493 
    2843 #if NH_3D_SDC_INTRA
    2844   if( rpcTempCU->getSDCFlag( 0 ) )
    2845   {
    2846     assert( rpcTempCU->getTransformIdx(0) == 0 );
    2847     assert( rpcTempCU->getCbf(0, COMPONENT_Y) == 1 );
    2848   }
    2849 #endif
    28501494
    28511495  m_pcEntropyCoder->resetBits();
     
    28561500  }
    28571501  m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0,          true );
    2858 #if NH_3D_DIS
    2859   m_pcEntropyCoder->encodeDIS( rpcTempCU, 0,          true );
    2860   if(!rpcTempCU->getDISFlag(0))
    2861   {
    2862 #endif
    28631502    m_pcEntropyCoder->encodePredMode( rpcTempCU, 0,          true );
    28641503    m_pcEntropyCoder->encodePartSize( rpcTempCU, 0, uiDepth, true );
    28651504    m_pcEntropyCoder->encodePredInfo( rpcTempCU, 0 );
    28661505    m_pcEntropyCoder->encodeIPCMInfo(rpcTempCU, 0, true );
    2867 #if NH_3D_SDC_INTRA
    2868     m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true );
    2869 #endif
    28701506
    28711507    // Encode Coefficients
     
    28751511    setCodeChromaQpAdjFlag( codeChromaQpAdjFlag );
    28761512    setdQPFlag( bCodeDQP );
    2877 #if NH_3D_DIS
    2878   }
    2879 #endif
    28801513  m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]);
    28811514
    28821515  rpcTempCU->getTotalBits() = m_pcEntropyCoder->getNumberOfWrittenBits();
    28831516  rpcTempCU->getTotalBins() = ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    2884 #if NH_3D_VSO // M6
    2885   if( m_pcRdCost->getUseLambdaScaleVSO()) 
    2886   {
    2887     rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() ); 
    2888   }
    2889   else
    2890 #endif
    28911517    rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    28921518
     
    29241550  UInt uiDepth = rpcTempCU->getDepth( 0 );
    29251551
    2926 #if NH_3D_VSO // VERY NEW
    2927   if( m_pcRdCost->getUseRenModel() )
    2928   {
    2929     UInt  uiWidth     = m_ppcOrigYuv[uiDepth]->getWidth   ( COMPONENT_Y );
    2930     UInt  uiHeight    = m_ppcOrigYuv[uiDepth]->getHeight  ( COMPONENT_Y );
    2931     Pel*  piSrc       = m_ppcOrigYuv[uiDepth]->getAddr    ( COMPONENT_Y );
    2932     UInt  uiSrcStride = m_ppcOrigYuv[uiDepth]->getStride  ( COMPONENT_Y );
    2933     m_pcRdCost->setRenModelData( rpcTempCU, 0, piSrc, uiSrcStride, uiWidth, uiHeight );
    2934   }
    2935 #endif
    29361552  rpcTempCU->setSkipFlagSubParts( false, 0, uiDepth );
    2937 #if NH_3D_DIS
    2938   rpcTempCU->setDISFlagSubParts( false, 0, uiDepth );
    2939 #endif
    29401553  rpcTempCU->setIPCMFlag(0, true);
    29411554  rpcTempCU->setIPCMFlagSubParts (true, 0, rpcTempCU->getDepth(0));
     
    29571570
    29581571  m_pcEntropyCoder->encodeSkipFlag ( rpcTempCU, 0,          true );
    2959 #if NH_3D_DIS
    2960   m_pcEntropyCoder->encodeDIS( rpcTempCU, 0,          true );
    2961 #endif
    29621572  m_pcEntropyCoder->encodePredMode ( rpcTempCU, 0,          true );
    29631573  m_pcEntropyCoder->encodePartSize ( rpcTempCU, 0, uiDepth, true );
    29641574  m_pcEntropyCoder->encodeIPCMInfo ( rpcTempCU, 0, true );
    2965 #if NH_3D_SDC_INTRA
    2966   m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true );
    2967 #endif
    29681575  m_pcRDGoOnSbacCoder->store(m_pppcRDSbacCoder[uiDepth][CI_TEMP_BEST]);
    29691576
    29701577  rpcTempCU->getTotalBits() = m_pcEntropyCoder->getNumberOfWrittenBits();
    29711578  rpcTempCU->getTotalBins() = ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    2972 #if NH_3D_VSO // M44
    2973   if ( m_pcRdCost->getUseVSO() )
    2974   {
    2975     rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCostVSO( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    2976   }
    2977   else
    2978 #endif
    29791579    rpcTempCU->getTotalCost() = m_pcRdCost->calcRdCost( rpcTempCU->getTotalBits(), rpcTempCU->getTotalDistortion() );
    29801580
     
    30431643      pcCU->getTotalBits() += m_pcEntropyCoder->getNumberOfWrittenBits(); // dQP bits
    30441644      pcCU->getTotalBins() += ((TEncBinCABAC *)((TEncSbac*)m_pcEntropyCoder->m_pcEntropyCoderIf)->getEncBinIf())->getBinsCoded();
    3045 #if NH_3D_VSO // M45
    3046       if ( m_pcRdCost->getUseVSO() )     
    3047       {
    3048         pcCU->getTotalCost() = m_pcRdCost->calcRdCostVSO( pcCU->getTotalBits(), pcCU->getTotalDistortion() );     
    3049       }
    3050       else
    3051 #endif
    30521645        pcCU->getTotalCost() = m_pcRdCost->calcRdCost( pcCU->getTotalBits(), pcCU->getTotalDistortion() );
    30531646    }
Note: See TracChangeset for help on using the changeset viewer.