Ignore:
Timestamp:
15 Jul 2015, 14:57:32 (9 years ago)
Author:
tech
Message:

Merged 14.1-update-dev2@1277.

Location:
branches/HTM-14.1-update-dev1
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-14.1-update-dev1

  • branches/HTM-14.1-update-dev1/source/Lib/TLibEncoder/TEncSearch.cpp

    r1258 r1279  
    340340
    341341  piRefSrch = rcStruct.piRefY + iSearchY * rcStruct.iYStride + iSearchX;
    342 #if H_3D_IC
     342#if NH_3D_IC
    343343  m_cDistParam.bUseIC = pcPatternKey->getICFlag();
    344344#endif
     
    851851
    852852    setDistParamComp(COMPONENT_Y);
    853 #if H_3D_IC
     853#if NH_3D_IC
    854854    m_cDistParam.bUseIC = pcPatternKey->getICFlag();
    855855#endif
     
    29012901      const Bool bUseHadamard=pcCU->getCUTransquantBypass(0) == 0;
    29022902      m_pcRdCost->setDistParam(distParam, sps.getBitDepth(CHANNEL_TYPE_LUMA), piOrg, uiStride, piPred, uiStride, puRect.width, puRect.height, bUseHadamard);
     2903
     2904#if NH_3D_IC_FIX
     2905      distParam.bUseIC = false;
     2906#endif
     2907#if H_3D_INTER_SDC_FIX
     2908      distParam.bUseSDCMRSAD = false;
     2909#endif
    29032910      distParam.bApplyWeight = false;
    29042911      for( Int modeIdx = 0; modeIdx < numModesAvailable; modeIdx++ )
     
    38353842                            iWidth, iHeight, m_pcEncCfg->getUseHADME() && (pcCU->getCUTransquantBypass(iPartIdx) == 0) );
    38363843
    3837 #if H_3D_IC
     3844#if NH_3D_IC
    38383845  cDistParam.bUseIC = false;
    38393846#endif
     
    38473854//! estimation of best merge coding
    38483855Void TEncSearch::xMergeEstimation( TComDataCU* pcCU, TComYuv* pcYuvOrg, Int iPUIdx, UInt& uiInterDir, TComMvField* pacMvField, UInt& uiMergeIndex, Distortion& ruiCost, TComMvField* cMvFieldNeighbours, UChar* uhInterDirNeighbours, Int& numValidMergeCand
    3849 #if H_3D_VSP
     3856#if NH_3D_VSP
    38503857                                 , Int* vspFlag
    38513858#endif
    3852 #if H_3D_SPIVMP
     3859#if NH_3D_SPIVMP
    38533860                                 , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
    38543861#endif
     
    38623869  UInt uiDepth = pcCU->getDepth( uiAbsPartIdx );
    38633870
    3864 #if H_3D_DBBP
     3871#if NH_3D_DBBP
    38653872  DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData();
    38663873  if( pcCU->getDBBPFlag(0) )
     
    38693876    AOF( iPUIdx == 0 );
    38703877    AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N );
    3871     AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE );
     3878    AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES );
    38723879   
    38733880    // temporary change of partition size for candidate derivation
     
    38943901
    38953902  PartSize partSize = pcCU->getPartitionSize( 0 );
    3896 #if H_3D_DBBP
     3903#if NH_3D_DBBP
    38973904  if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(0) == false )
    38983905#else
     
    39033910    {
    39043911      pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); // temporarily set
    3905 #if H_3D
     3912#if NH_3D_MLC
    39063913      pcCU->initAvailableFlags();
    3907       pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand);
     3914      pcCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand );
    39083915      pcCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours
    3909 #if H_3D_SPIVMP
     3916#if NH_3D_SPIVMP
    39103917        , pcMvFieldSP, puhInterDirSP
    39113918#endif
     
    39143921
    39153922      pcCU->buildMCL( cMvFieldNeighbours,uhInterDirNeighbours
    3916 #if H_3D_VSP
     3923#if NH_3D_VSP
    39173924        , vspFlag
    39183925#endif
    3919 #if H_3D_SPIVMP
     3926#if NH_3D_SPIVMP
    39203927        , pbSPIVMPFlag
    39213928#endif
    3922                                         , numValidMergeCand
     3929        , numValidMergeCand
    39233930        );
    39243931#else
     
    39303937  else
    39313938  {
    3932 #if H_3D
     3939#if NH_3D_MLC
    39333940    pcCU->initAvailableFlags();
    3934     pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours,uhInterDirNeighbours, numValidMergeCand);
     3941    pcCU->getInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    39353942    pcCU->xGetInterMergeCandidates( uiAbsPartIdx, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours
    3936 #if H_3D_SPIVMP
     3943#if NH_3D_SPIVMP
    39373944      , pcMvFieldSP, puhInterDirSP
    39383945#endif
     
    39413948
    39423949    pcCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours
    3943 #if H_3D_VSP
     3950#if NH_3D_VSP
    39443951      , vspFlag
    39453952#endif
    3946 #if H_3D_SPIVMP
     3953#if NH_3D_SPIVMP
    39473954      , pbSPIVMPFlag
    39483955#endif
    3949                                       , numValidMergeCand
     3956      , numValidMergeCand
    39503957      );
    39513958#else
     
    39563963  xRestrictBipredMergeCand( pcCU, iPUIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    39573964
    3958 #if H_3D_DBBP
     3965#if NH_3D_DBBP
    39593966  if( pcCU->getDBBPFlag(0) )
    39603967  {
     
    39793986
    39803987    PartSize ePartSize = pcCU->getPartitionSize( 0 );
    3981 #if H_3D_VSP
     3988#if NH_3D_VSP
    39823989    pcCU->setVSPFlagSubParts( vspFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ) );
    39833990#endif
    39843991
    3985 #if H_3D_SPIVMP
     3992#if NH_3D_SPIVMP
    39863993    pcCU->setSPIVMPFlagSubParts( pbSPIVMPFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ));
    39873994    if (pbSPIVMPFlag[uiMergeCand])
     
    40024009    else
    40034010#endif
    4004 #if H_3D_VSP
    4005 #if H_3D_DBBP
     4011#if NH_3D_VSP
     4012#if NH_3D_DBBP
    40064013      if ( vspFlag[uiMergeCand] && !pcCU->getDBBPFlag(0) )
    40074014#else
     
    40394046    pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    40404047    pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    4041 #if H_3D_VSP
     4048#if NH_3D_VSP
    40424049      }
    40434050#endif
     
    41504157  Distortion   biPDistTemp = std::numeric_limits<Distortion>::max();
    41514158
    4152 #if H_3D_IV_MERGE
     4159#if NH_3D_IV_MERGE
    41534160  TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists
    41544161  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];
     
    41854192
    41864193    pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
    4187 #if H_3D_VSP
     4194#if NH_3D_VSP
    41884195    pcCU->setVSPFlagSubParts( 0, uiPartAddr, iPartIdx, pcCU->getDepth(uiPartAddr) );
    41894196#endif
     
    45284535    } // end if bTestNormalMC
    45294536#endif
    4530 #if H_3D_DBBP
     4537#if NH_3D_DBBP
    45314538    // test merge mode for DBBP (2Nx2N)
    45324539    if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N || pcCU->getDBBPFlag(0) )
     
    45684575      Distortion uiMRGCost = std::numeric_limits<Distortion>::max();
    45694576
    4570 #if H_3D_VSP
     4577#if NH_3D_VSP
    45714578      Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    45724579      memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     
    45774584      DisInfo OriginalDvInfo = pcCU->getDvInfo(uiAbsPartIdx);
    45784585#endif
    4579 #if H_3D_SPIVMP
     4586#if NH_3D_SPIVMP
    45804587      Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
    45814588      memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
    45824589      TComMvField*  pcMvFieldSP;
    45834590      UChar* puhInterDirSP;
    4584       pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
    4585       puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
    4586 #endif
    4587       xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours
    4588 
    4589 #if H_3D_VSP
     4591      pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()*2];
     4592      puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()];
     4593#endif
     4594      xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand
     4595#if NH_3D_VSP
    45904596                      , vspFlag
    45914597#endif
    4592 #if H_3D_SPIVMP
     4598#if NH_3D_SPIVMP
    45934599                      , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
    45944600#endif
    4595 , numValidMergeCand);
     4601                      );
    45964602
    45974603      if ( uiMRGCost < uiMECost )
     
    46004606        pcCU->setMergeFlagSubParts ( true,          uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46014607        pcCU->setMergeIndexSubParts( uiMRGIndex,    uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    4602 #if H_3D_VSP
     4608#if NH_3D_VSP
    46034609        pcCU->setVSPFlagSubParts( vspFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46044610#endif
    4605 #if H_3D_SPIVMP
     4611#if NH_3D_SPIVMP
    46064612        pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 
    46074613        if (bSPIVMPFlag[uiMRGIndex]!=0)
     
    46264632        else
    46274633#endif
    4628 #if H_3D_VSP
    4629 #if H_3D_DBBP
     4634#if NH_3D_VSP
     4635#if NH_3D_DBBP
    46304636        if ( vspFlag[uiMRGIndex] && !pcCU->getDBBPFlag(uiPartAddr) )
    46314637#else
     
    46634669        pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
    46644670        pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4671#if NH_3D_VSP
     4672          }
     4673#endif
    46654674#if H_3D
    46664675          }
     
    46764685      else
    46774686      {
    4678 #if H_3D_SPIVMP       
     4687#if NH_3D_SPIVMP       
    46794688        pcCU->setSPIVMPFlagSubParts(0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46804689#endif
     
    46824691        pcCU->setMergeFlagSubParts( false,        uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46834692        pcCU->setInterDirSubParts ( uiMEInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    4684 #if H_3D_VSP
     4693#if NH_3D_VSP
    46854694        pcCU->setVSPFlagSubParts ( 0,             uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    46864695        pcCU->setDvInfoSubParts(OriginalDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     
    46894698        pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMEMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
    46904699      }
    4691 #if H_3D_SPIVMP
     4700#if NH_3D_SPIVMP
    46924701      delete[] pcMvFieldSP;
    46934702      delete[] puhInterDirSP;
     
    47254734  {
    47264735
    4727 #if H_3D_DBBP
     4736#if NH_3D_DBBP
    47284737    DbbpTmpData* pDBBPTmpData = pcCU->getDBBPTmpData();
    47294738    if( pcCU->getDBBPFlag(0) )
     
    47324741      AOF( uiPartIdx == 0 );
    47334742      AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N );
    4734       AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE );
     4743      AOF( pDBBPTmpData->eVirtualPartSize != NUMBER_OF_PART_SIZES );
    47354744      AOF( iRoiWidth == iRoiHeight );
    47364745     
     
    47574766
    47584767    pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo );
    4759 #if H_3D_DBBP
     4768#if NH_3D_DBBP
    47604769    if( pcCU->getDBBPFlag(0) )
    47614770    {
     
    49784987  pcCU->clipMv( cMvCand );
    49794988
    4980 #if H_3D_IC
     4989#if NH_3D_IC
    49814990  Bool bICFlag = pcCU->getICFlag( uiPartAddr ) && ( pcCU->getSlice()->getViewIndex() != pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getViewIndex() );
    49824991#endif
     
    49854994  if ( pcCU->getSlice()->testWeightPred() && pcCU->getSlice()->getSliceType()==P_SLICE )
    49864995  {
    4987     xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA) );
     4996    xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, true, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA)
     4997#if NH_3D_ARP
     4998      , false //add this for IC, otherwise, it could be removed
     4999#endif
     5000      );
    49885001  }
    49895002  else
    49905003  {
    49915004    xPredInterBlk( COMPONENT_Y, pcCU, pcPicYuvRef, uiPartAddr, &cMvCand, iSizeX, iSizeY, pcTemplateCand, false, pcCU->getSlice()->getSPS()->getBitDepth(CHANNEL_TYPE_LUMA)
    4992 #if H_3D_ARP
     5005#if NH_3D_ARP
    49935006      , false
    49945007#endif
    4995 #if H_3D_IC
     5008#if NH_3D_IC
    49965009    , bICFlag
    49975010#endif
     
    50385051  pcCU->getPartIndexAndSize( iPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
    50395052
    5040 #if H_3D_IC
     5053#if NH_3D_IC
    50415054  Bool bICFlag = pcCU->getICFlag( uiPartAddr ) && ( pcCU->getSlice()->getViewIndex() != pcCU->getSlice()->getRefPic( eRefPicList, iRefIdxPred )->getViewIndex() );
    50425055  pcPatternKey->setICFlag( bICFlag );
     
    50855098
    50865099  m_pcRdCost->setPredictor  ( *pcMvPred );
    5087 #if H_3D_IC
     5100#if NH_3D_INTEGER_MV_DEPTH
    50885101  if( pcCU->getSlice()->getIsDepth() )
    50895102  {
     
    50945107#endif
    50955108    m_pcRdCost->setCostScale  ( 2 );   
    5096 #if H_3D_IC
     5109#if NH_3D_INTEGER_MV_DEPTH
    50975110  }
    50985111#endif
     
    51215134
    51225135  m_pcRdCost->getMotionCost( true, 0, pcCU->getCUTransquantBypass(uiPartAddr) );
    5123 #if H_3D_IC
     5136#if NH_3D_INTEGER_MV_DEPTH
    51245137  if( ! pcCU->getSlice()->getIsDepth() )
    51255138  {
     
    51345147  rcMv += (cMvHalf <<= 1);
    51355148  rcMv +=  cMvQter;
    5136 #if H_3D_IC
     5149#if NH_3D_INTEGER_MV_DEPTH
    51375150  }
    51385151#endif
    51395152
    51405153  UInt uiMvBits = m_pcRdCost->getBits( rcMv.getHor(), rcMv.getVer() );
    5141 #if H_3D_IC
     5154#if NH_3D_INTEGER_MV_DEPTH
    51425155  if( pcCU->getSlice()->getIsDepth() )
    51435156  {
     
    51535166{
    51545167  Int  iMvShift = 2;
    5155 #if H_3D_IC
     5168#if NH_3D_INTEGER_MV_DEPTH
    51565169  if( pcCU->getSlice()->getIsDepth() )
    51575170  {
     
    52285241      m_cDistParam.bitDepth = pcPatternKey->getBitDepthY();
    52295242
    5230 #if H_3D_IC
     5243#if NH_3D_IC
    52315244      m_cDistParam.bUseIC = pcPatternKey->getICFlag();
    52325245#endif
     
    53115324  UInt uiSearchRange = m_iSearchRange;
    53125325  pcCU->clipMv( rcMv );
    5313 #if H_3D_IC
     5326#if NH_3D_INTEGER_MV_DEPTH
    53145327  if( ! pcCU->getSlice()->getIsDepth() )
    53155328#endif
     
    53315344      TComMv cMv = m_acMvPredictors[index];
    53325345      pcCU->clipMv( cMv );
    5333 #if H_3D_IC
     5346#if NH_3D_INTEGER_MV_DEPTH
    53345347      if( ! pcCU->getSlice()->getIsDepth() )
    53355348      {     
    53365349#endif
    53375350        cMv >>= 2;
    5338 #if H_3D_IC
     5351#if NH_3D_INTEGER_MV_DEPTH
    53395352      }
    53405353#endif
     
    57595772    m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true);
    57605773    m_pcEntropyCoder->encodeMergeIndex( pcCU, 0, true );
    5761 #if H_3D_ARP
     5774#if NH_3D_ARP
    57625775    m_pcEntropyCoder->encodeARPW( pcCU, 0 );
    57635776#endif
    5764 #if H_3D_IC
     5777#if NH_3D_IC
    57655778    m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );
    57665779#endif
     
    58555868  const Double zeroCost     = (pcCU->isLosslessCoded( 0 )) ? (nonZeroCost+1) : (m_pcRdCost->calcRdCost( zeroResiBits, zeroDistortion ));
    58565869#endif
    5857 #if H_3D_SPIVMP
    5858     if ( dZeroCost < dCost || pcCU->getQtRootCbf(0)==0)
     5870#if NH_3D_SPIVMP
     5871    if ( zeroCost < nonZeroCost || pcCU->getQtRootCbf(0)==0)
    58595872#else
    58605873  if ( zeroCost < nonZeroCost || !pcCU->getQtRootCbf(0) )
     
    70787091    m_pcEntropyCoder->encodeSkipFlag(pcCU, 0, true);
    70797092    m_pcEntropyCoder->encodeMergeIndex(pcCU, 0, true);
    7080 #if H_3D_ARP
     7093#if NH_3D_ARP
    70817094    m_pcEntropyCoder->encodeARPW( pcCU, 0 );
    70827095#endif
    7083 #if H_3D_IC
     7096#if NH_3D_IC
    70847097    m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );
    70857098#endif
     
    71057118    m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true );
    71067119#endif
    7107 #if H_3D_ARP
     7120#if NH_3D_ARP
    71087121    m_pcEntropyCoder->encodeARPW( pcCU , 0  );
    71097122#endif
    7110 #if H_3D_IC
     7123#if NH_3D_IC
    71117124    m_pcEntropyCoder->encodeICFlag( pcCU, 0, true );
    71127125#endif
    7113 #if H_3D
     7126#if NH_3D_DBBP
    71147127    m_pcEntropyCoder->encodeDBBPFlag( pcCU, 0, true );
    71157128#endif
Note: See TracChangeset for help on using the changeset viewer.