Ignore:
Timestamp:
3 Feb 2014, 11:35:43 (11 years ago)
Author:
rwth
Message:
  • first version of DBBP (requires some cleanup)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev1-RWTH/source/Lib/TLibEncoder/TEncSearch.cpp

    r809 r816  
    35833583  pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight );
    35843584  UInt uiDepth = pcCU->getDepth( uiAbsPartIdx );
     3585 
     3586#if H_3D_DBBP
     3587  DBBPTmpData* pDBBPTmpData = pcCU->getDBBPTmpData();
     3588  if( pcCU->getDBBPFlag(0) )
     3589  {
     3590    AOF( uiAbsPartIdx == 0 );
     3591    AOF( iPUIdx == 0 );
     3592    AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N );
     3593    AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE );
     3594   
     3595    // temporary change of partition size for candidate derivation
     3596    pcCU->setPartSizeSubParts( pDBBPTmpData->eVirtualPartSize, 0, pcCU->getDepth(0));
     3597    iPUIdx = pcCU->getDBBPTmpData()->uiVirtualPartIndex;
     3598   
     3599    // if this is handling the second segment, make sure that motion info of first segment is available
     3600    if( iPUIdx == 1 )
     3601    {
     3602      pcCU->setInterDirSubParts(pDBBPTmpData->auhInterDir[0], 0, 0, pcCU->getDepth(0)); // interprets depth relative to LCU level
     3603     
     3604      pcCU->setVSPFlagSubParts(pDBBPTmpData->ahVSPFlag[0], 0, 0, pcCU->getDepth(0));
     3605      pcCU->setDvInfoSubParts(pDBBPTmpData->acDvInfo[0], 0, 0, pcCU->getDepth(0));
     3606     
     3607      for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
     3608      {
     3609        RefPicList eRefList = (RefPicList)uiRefListIdx;
     3610       
     3611#if NTT_STORE_SPDV_VSP_G0148
     3612        if( pcCU->getVSPFlag( 0 ) != 0 )
     3613        {
     3614          if ( pcCU->getInterDir(0) & (1<<uiRefListIdx) )
     3615          {
     3616            UInt dummy;
     3617            Int vspSize;
     3618            Int width, height;
     3619            pcCU->getPartIndexAndSize( 0, dummy, width, height, 0, pcCU->getTotalNumPart()==256 );
     3620            AOF( dummy == 0 );
     3621            pcCU->setMvFieldPUForVSP( pcCU, 0, width, height, eRefList, pDBBPTmpData->acMvField[0][eRefList].getRefIdx(), vspSize );
     3622            pcCU->setVSPFlag( 0, vspSize );
     3623          }
     3624        }
     3625        else
     3626#endif
     3627        pcCU->getCUMvField( eRefList )->setAllMvField( pDBBPTmpData->acMvField[0][eRefList], pDBBPTmpData->eVirtualPartSize, 0, 0, 0 ); // interprets depth relative to rpcTempCU level
     3628      }
     3629    }
     3630   
     3631    // update these values to virtual partition size
     3632    pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight );
     3633  }
     3634#endif
     3635 
    35853636  PartSize partSize = pcCU->getPartitionSize( 0 );
     3637#if H_3D_DBBP
     3638  if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 && pcCU->getDBBPFlag(0) == false )
     3639#else
    35863640  if ( pcCU->getSlice()->getPPS()->getLog2ParallelMergeLevelMinus2() && partSize != SIZE_2Nx2N && pcCU->getWidth( 0 ) <= 8 )
     3641#endif
    35873642  {
    35883643    pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, uiDepth );
     
    36343689#endif
    36353690
     3691#if H_3D_DBBP
     3692  if( pcCU->getDBBPFlag(0) )
     3693  {
     3694    // reset to 2Nx2N for actual motion search
     3695    iPUIdx = 0;
     3696    AOF( pcCU->getPartitionSize(0) == pDBBPTmpData->eVirtualPartSize );
     3697    pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, pcCU->getDepth(0));
     3698   
     3699    // restore values for 2Nx2N partition size
     3700    pcCU->getPartIndexAndSize( iPUIdx, uiAbsPartIdx, iWidth, iHeight );
     3701   
     3702    AOF( uiAbsPartIdx == 0 );
     3703    AOF( iWidth == iHeight );
     3704  }
     3705#endif
    36363706
    36373707  ruiCost = MAX_UINT;
     
    43464416#endif
    43474417
     4418#if H_3D_DBBP
     4419    // test merge mode for DBBP (2Nx2N)
     4420    if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N || pcCU->getDBBPFlag(0) )
     4421#else
    43484422    if ( pcCU->getPartitionSize( uiPartAddr ) != SIZE_2Nx2N )
     4423#endif
    43494424    {
    43504425      UInt uiMRGInterDir = 0;     
     
    45644639  if (!bFilled)
    45654640  {
     4641#if H_3D_DBBP
     4642    DBBPTmpData* pDBBPTmpData = pcCU->getDBBPTmpData();
     4643    if( pcCU->getDBBPFlag(0) )
     4644    {
     4645      AOF( uiPartAddr == 0 );
     4646      AOF( uiPartIdx == 0 );
     4647      AOF( pcCU->getPartitionSize(0) == SIZE_2Nx2N );
     4648      AOF( pDBBPTmpData->eVirtualPartSize != SIZE_NONE );
     4649      AOF( iRoiWidth == iRoiHeight );
     4650     
     4651      // temporary change of partition size for candidate derivation
     4652      pcCU->setPartSizeSubParts( pDBBPTmpData->eVirtualPartSize, 0, pcCU->getDepth(0));
     4653      uiPartIdx = pcCU->getDBBPTmpData()->uiVirtualPartIndex;
     4654     
     4655      // if this is handling the second segment, make sure that motion info of first segment is set to first segment
     4656      if( uiPartIdx == 1 )
     4657      {
     4658        pcCU->setInterDirSubParts(pDBBPTmpData->auhInterDir[0], 0, 0, pcCU->getDepth(0)); // interprets depth relative to LCU level
     4659       
     4660        for ( UInt uiRefListIdx = 0; uiRefListIdx < 2; uiRefListIdx++ )
     4661        {
     4662          RefPicList eRefList = (RefPicList)uiRefListIdx;
     4663          pcCU->getCUMvField( eRefList )->setAllMvField( pDBBPTmpData->acMvField[0][eRefList], pDBBPTmpData->eVirtualPartSize, 0, 0, 0 ); // interprets depth relative to rpcTempCU level
     4664        }
     4665      }
     4666     
     4667      // update these values to virtual partition size
     4668      pcCU->getPartIndexAndSize( uiPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
     4669    }
     4670#endif
     4671   
    45664672    pcCU->fillMvpCand( uiPartIdx, uiPartAddr, eRefPicList, iRefIdx, pcAMVPInfo );
     4673   
     4674#if H_3D_DBBP
     4675    if( pcCU->getDBBPFlag(0) )
     4676    {
     4677      // reset to 2Nx2N for motion search
     4678      uiPartIdx = 0;
     4679      AOF( pcCU->getPartitionSize(0) == pDBBPTmpData->eVirtualPartSize );
     4680      pcCU->setPartSizeSubParts( SIZE_2Nx2N, 0, pcCU->getDepth(0));
     4681     
     4682      // restore values for 2Nx2N partition size
     4683      pcCU->getPartIndexAndSize( uiPartIdx, uiPartAddr, iRoiWidth, iRoiHeight );
     4684      AOF(uiPartAddr==0);
     4685    }
     4686#endif
    45674687  }
    45684688 
Note: See TracChangeset for help on using the changeset viewer.