Ignore:
Timestamp:
14 Jul 2015, 12:31:09 (9 years ago)
Author:
tech
Message:

Merged HTM-14.1-update-dev3@1273.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-14.1-update-dev2/source/Lib/TLibDecoder/TDecEntropy.cpp

    r1225 r1274  
    105105}
    106106
    107 #if H_3D_ARP
     107#if NH_3D_ARP
    108108Void TDecEntropy::decodeARPW( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    109109{
     
    129129  pcCU->setICFlagSubParts( false , uiAbsPartIdx, 0, uiDepth );
    130130
    131 #if H_3D_ARP
     131#if NH_3D_ARP
    132132  if ( pcCU->isIntra( uiAbsPartIdx ) || ( pcCU->getSlice()->getViewIndex() == 0 ) || pcCU->getSlice()->getIsDepth() || pcCU->getARPW( uiAbsPartIdx ) > 0 )
    133133#else
     
    240240  UInt uiNumPU = ( ePartSize == SIZE_2Nx2N ? 1 : ( ePartSize == SIZE_NxN ? 4 : 2 ) );
    241241  UInt uiPUOffset = ( g_auiPUOffset[UInt( ePartSize )] << ( ( pcCU->getSlice()->getSPS()->getMaxTotalCUDepth() - uiDepth ) << 1 ) ) >> 4;
    242 #if H_3D_IV_MERGE
     242//#if H_3D_IV_MERGE
     243#if NH_3D_MLC
    243244  TComMvField cMvFieldNeighbours[MRG_MAX_NUM_CANDS_MEM << 1]; // double length for mv of both lists
    244245  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS_MEM];
     
    247248  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS];
    248249#endif
    249 #if H_3D_SPIVMP
     250#if NH_3D_SPIVMP
    250251  Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];     
    251   TComMvField*  pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
    252   UChar* puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
    253 #endif
    254 #if H_3D_IV_MERGE
     252  TComMvField*  pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()*2];
     253  UChar* puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartitionsInCtu()];
     254#endif
     255#if NH_3D_IV_MERGE
    255256  pcSubCU->copyDVInfoFrom( pcCU, uiAbsPartIdx);
    256257#endif
     
    260261  }
    261262  Int numValidMergeCand = 0;
     263#if !NH_3D
    262264  Bool hasMergedCandList = false;
     265#else
     266  Bool isMerged = false;
     267#endif
    263268
    264269  pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_0 );
    265270  pcSubCU->copyInterPredInfoFrom( pcCU, uiAbsPartIdx, REF_PIC_LIST_1 );
    266 #if H_3D
     271#if NH_3D
    267272  for ( UInt uiPartIdx = 0, uiSubPartIdx = uiAbsPartIdx; uiPartIdx < uiNumPU; uiPartIdx++, uiSubPartIdx += uiPUOffset )
    268273  {
     
    296301
    297302  ////// Parse CUs extension syntax
     303#if NH_3D_DBBP
    298304  decodeDBBPFlag( pcCU, uiAbsPartIdx, uiDepth );
    299   decodeSDCFlag ( pcCU, uiAbsPartIdx, uiDepth );
    300 
    301 #if H_3D_ARP
     305#endif
     306  //decodeSDCFlag ( pcCU, uiAbsPartIdx, uiDepth );
     307
     308#if NH_3D_ARP
    302309  decodeARPW  ( pcCU, uiAbsPartIdx, uiDepth );
    303310#endif
     
    312319    {
    313320      UInt uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    314 #if H_3D_DBBP
     321#if NH_3D_DBBP
    315322      if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && ePartSize != SIZE_2Nx2N && pcSubCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(uiAbsPartIdx) == false )
    316323#else
     
    321328        if ( !isMerged )
    322329        {
    323 #if H_3D_VSP
     330#if NH_3D_VSP
    324331          Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    325332          memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     
    330337          pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    331338          pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours
    332 #if H_3D_SPIVMP
     339#if NH_3D_SPIVMP
    333340            , pcMvFieldSP, puhInterDirSP
    334341#endif
    335342            , numValidMergeCand );
    336343          pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    337 #if H_3D_SPIVMP
     344#if NH_3D_SPIVMP
    338345            , bSPIVMPFlag
    339346#endif
    340347            , numValidMergeCand );
    341348          pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
    342 
    343349#else
    344350#if H_3D
     
    358364      {
    359365        uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
    360 #if H_3D_VSP
     366#if NH_3D_VSP
    361367        Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    362368        memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     
    367373        pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    368374        pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours
    369 #if H_3D_SPIVMP
     375#if NH_3D_SPIVMP
    370376          , pcMvFieldSP, puhInterDirSP
    371377#endif
    372378          ,numValidMergeCand, uiMergeIndex );
    373379        pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours, vspFlag
    374 #if H_3D_SPIVMP
     380#if NH_3D_SPIVMP
    375381          , bSPIVMPFlag
    376382#endif
     
    398404          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    399405          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    400 #if H_3D_VSP
    401 #if H_3D_DBBP
     406#if NH_3D_VSP
     407#if NH_3D_DBBP
    402408          if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 && !pcCU->getDBBPFlag( uiAbsPartIdx ) )
    403409#else
     
    490496        {
    491497          pcSubCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth ); // temporarily set.
     498
     499#if NH_3D_MLC
     500#if NH_3D_VSP
     501          Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
     502          memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     503#endif
     504#if NH_3D_SPIVMP
     505          memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     506#endif
     507          pcSubCU->initAvailableFlags();
     508#endif
    492509          pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
     510#if NH_3D_MLC
     511          pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours
     512#if NH_3D_SPIVMP
     513            , pcMvFieldSP, puhInterDirSP
     514#endif
     515            , numValidMergeCand );
     516          pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours
     517#if NH_3D_VSP
     518            , vspFlag
     519#endif
     520#if NH_3D_SPIVMP
     521            , bSPIVMPFlag
     522#endif
     523            , numValidMergeCand );
     524#if NH_3D_VSP
     525          pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
     526#endif
     527#endif
    493528          pcSubCU->setPartSizeSubParts( ePartSize, 0, uiDepth ); // restore.
    494529          hasMergedCandList = true;
     
    498533      {
    499534        uiMergeIndex = pcCU->getMergeIndex(uiSubPartIdx);
     535
     536#if NH_3D_MLC
     537#if NH_3D_VSP
     538        Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
     539        memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     540#endif
     541#if NH_3D_SPIVMP
     542        memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     543#endif
     544        pcSubCU->initAvailableFlags();
     545#endif
    500546        pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
     547#if NH_3D_MLC
     548        pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours
     549#if NH_3D_SPIVMP
     550          , pcMvFieldSP, puhInterDirSP
     551#endif
     552          ,numValidMergeCand, uiMergeIndex );
     553        pcSubCU->buildMCL( cMvFieldNeighbours, uhInterDirNeighbours
     554#if NH_3D_VSP
     555          , vspFlag
     556#endif
     557#if NH_3D_SPIVMP
     558          , bSPIVMPFlag
     559#endif
     560          ,numValidMergeCand );
     561#if NH_3D_VSP
     562        pcCU->setVSPFlagSubParts( vspFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth );
     563#endif
     564#endif
    501565      }
    502566
     
    512576          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvd( cTmpMv, ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    513577          pcCU->getCUMvField( RefPicList( uiRefListIdx ) )->setAllMvField( cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ], ePartSize, uiSubPartIdx, uiDepth, uiPartIdx );
    514 
    515         }
    516       }
     578#if NH_3D_VSP
     579          if( pcCU->getVSPFlag( uiSubPartIdx ) != 0 )
     580          {
     581            if ( uhInterDirNeighbours[ uiMergeIndex ] & (1<<uiRefListIdx) )
     582            {
     583              UInt dummy;
     584              Int vspSize;
     585              Int width, height;
     586              pcCU->getPartIndexAndSize( uiPartIdx, dummy, width, height, uiSubPartIdx, pcCU->getTotalNumPart()==256 );
     587              pcCU->setMvFieldPUForVSP( pcCU, uiSubPartIdx, width, height, RefPicList( uiRefListIdx ), cMvFieldNeighbours[ 2*uiMergeIndex + uiRefListIdx ].getRefIdx(), vspSize );
     588              pcCU->setVSPFlag( uiSubPartIdx, vspSize );
     589            }
     590          }
     591#endif
     592        }
     593      }
     594#if NH_3D_SPIVMP
     595      pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth ); 
     596      if (bSPIVMPFlag[uiMergeIndex] != 0)
     597      {
     598        Int iWidth, iHeight;
     599        UInt uiIdx;
     600        pcCU->getPartIndexAndSize( uiPartIdx, uiIdx, iWidth, iHeight, uiSubPartIdx, true );
     601
     602        UInt uiSPAddr;
     603
     604        Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     605
     606        pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     607
     608        for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     609        {
     610          pcCU->getSPAbsPartIdx(uiSubPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     611          pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
     612          pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     613          pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     614        }
     615      }
     616#endif
    517617    }
    518618    else
     
    551651  }
    552652#endif
    553 #if H_3D_SPIVMP
     653#if NH_3D_SPIVMP
    554654  delete[] pcMvFieldSP;
    555655  delete[] puhInterDirSP;
     
    619719}
    620720
    621 #if H_3D
     721#if NH_3D
    622722Void TDecEntropy::decodeMVPIdxPU( TComDataCU* pcSubCU, UInt uiPartAddr, UInt uiDepth, UInt uiPartIdx, RefPicList eRefList )
    623723{
     
    10701170}
    10711171#endif
    1072 #if H_3D_DBBP
     1172#if NH_3D_DBBP
    10731173Void TDecEntropy::decodeDBBPFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
    10741174{
Note: See TracChangeset for help on using the changeset viewer.