Changeset 800 in 3DVCSoftware for branches/HTM-9.3-dev1-KHU/source


Ignore:
Timestamp:
27 Jan 2014, 01:32:41 (11 years ago)
Author:
khu
Message:

Integration of JCT3V-G0147: Simplification of sub-PU level temporal inter-view motion parameter prediction

Location:
branches/HTM-9.3-dev1-KHU/source/Lib/TLibCommon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev1-KHU/source/Lib/TLibCommon/TComDataCU.cpp

    r796 r800  
    74377437  Int iDelY = iSPHeight/2;
    74387438
     7439#if KHU_SIMP_SPIVMP_G0147
     7440  Int         iCenterPosX = iCurrPosX + ( ( iWidth /  iSPWidth ) >> 1 )  * iSPWidth + ( iSPWidth >> 1 );
     7441  Int         iCenterPosY = iCurrPosY + ( ( iHeight /  iSPHeight ) >> 1 )  * iSPHeight + (iSPHeight >> 1);
     7442  Int         iRefCenterCUAddr, iRefCenterAbsPartIdx;
     7443
     7444  if(iWidth == iSPWidth && iHeight == iSPHeight)
     7445  {
     7446    iCenterPosX = iCurrPosX + (iWidth >> 1);
     7447    iCenterPosY = iCurrPosY + (iHeight >> 1);
     7448  }
     7449
     7450  Int iRefCenterPosX   = Clip3( 0, pcBaseRec->getWidth () - 1, iCenterPosX + ( (cDv.getHor() + 2 ) >> 2 ) );
     7451  Int iRefCenterPosY   = Clip3( 0, pcBaseRec->getHeight() - 1, iCenterPosY + ( (cDv.getVer() + 2 ) >> 2 ) );
     7452
     7453  pcBaseRec->getCUAddrAndPartIdx( iRefCenterPosX , iRefCenterPosY , iRefCenterCUAddr, iRefCenterAbsPartIdx );
     7454  TComDataCU* pcDefaultCU    = pcBasePic->getCU( iRefCenterCUAddr );
     7455  if(!( pcDefaultCU->getPredictionMode( iRefCenterAbsPartIdx ) == MODE_INTRA ))
     7456  {
     7457    for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ )       
     7458    {
     7459      RefPicList  eCurrRefPicList = RefPicList( uiCurrRefListId );
     7460      Bool stopLoop = false;
     7461      for(Int iLoop = 0; iLoop < 2 && !stopLoop; ++iLoop)
     7462      {
     7463        RefPicList eDefaultRefPicList = (iLoop ==1)? RefPicList( 1 -  uiCurrRefListId ) : RefPicList( uiCurrRefListId );
     7464        TComMvField cDefaultMvField;
     7465        pcDefaultCU->getMvField( pcDefaultCU, iRefCenterAbsPartIdx, eDefaultRefPicList, cDefaultMvField );
     7466        Int         iDefaultRefIdx     = cDefaultMvField.getRefIdx();
     7467        if (iDefaultRefIdx >= 0)
     7468        {
     7469          Int iDefaultRefPOC = pcDefaultCU->getSlice()->getRefPOC(eDefaultRefPicList, iDefaultRefIdx);
     7470          if (iDefaultRefPOC != pcSlice->getPOC())   
     7471          {
     7472            for (Int iPdmRefIdx = 0; iPdmRefIdx < pcSlice->getNumRefIdx( eCurrRefPicList ); iPdmRefIdx++)
     7473            {
     7474              if (iDefaultRefPOC == pcSlice->getRefPOC(eCurrRefPicList, iPdmRefIdx))
     7475              {
     7476                abPdmAvailable[ uiCurrRefListId ] = true;
     7477                TComMv cMv(cDefaultMvField.getHor(), cDefaultMvField.getVer());
     7478#if H_3D_NBDV
     7479#if H_3D_IV_MERGE
     7480                if( !bIsDepth )
     7481                {
     7482#endif
     7483                  cMv.setIDVFlag   (true);
     7484                  cMv.setIDVHor    (cDv.getHor());                 
     7485                  cMv.setIDVVer    (cDv.getVer()); 
     7486                  cMv.setIDVVId    (iViewIndex);
     7487#if H_3D_IV_MERGE
     7488                }
     7489#endif
     7490#endif
     7491                clipMv( cMv );
     7492                paiPdmRefIdx  [ uiCurrRefListId ] = iPdmRefIdx;
     7493                pacPdmMv      [ uiCurrRefListId ] = cMv;
     7494                stopLoop = true;
     7495                break;
     7496              }
     7497            }
     7498          }
     7499        }
     7500      }
     7501    }
     7502  }
     7503  availableMcDc[0] = ( abPdmAvailable[0]? 1 : 0) + (abPdmAvailable[1]? 2 : 0);
     7504
     7505  if(availableMcDc[0])
     7506  {
     7507#endif
    74397508  Int         iBasePosX, iBasePosY;
    74407509  for (Int i=iCurrPosY; i < iCurrPosY + iHeight; i += iSPHeight)
     
    74957564      if (puhInterDirSP[iPartition] == 0)
    74967565      {
     7566#if KHU_SIMP_SPIVMP_G0147
     7567        puhInterDirSP[iPartition] = availableMcDc[0];
     7568        pcMvFieldSP[2*iPartition].setMvField(pacPdmMv[0], paiPdmRefIdx[0]);
     7569        pcMvFieldSP[2*iPartition + 1].setMvField(pacPdmMv[1], paiPdmRefIdx[1]);
     7570#else
    74977571        if (iInterDirLast != 0)
    74987572        {
     
    75017575          pcMvFieldSP[2*iPartition + 1] = cMvFieldLast[1];
    75027576        }
    7503       }
     7577#endif
     7578      }
     7579#if !KHU_SIMP_SPIVMP_G0147
    75047580      else
    75057581      {
     
    75267602        cMvFieldLast[1] = pcMvFieldSP[2*iPartition + 1];
    75277603      }
    7528 
     7604#endif
    75297605      iPartition ++;
    75307606
    75317607    }
    7532   } 
     7608  }
     7609#if KHU_SIMP_SPIVMP_G0147
     7610  }
     7611#endif
    75337612#if SEC_SPIVMP_MCP_SIZE_G0077
    75347613  }
  • branches/HTM-9.3-dev1-KHU/source/Lib/TLibCommon/TypeDef.h

    r795 r800  
    233233#endif
    234234#define QC_DEPTH_MERGE_SIMP_G0127         1 // Remove DV candidate and shifting candidate for depth coding
     235
     236#define KHU_SIMP_SPIVMP_G0147             1  // Simplification on Sub-PU level temporal interview motion prediction
    235237
    236238///// ***** DEPTH INTRA MODES *********
Note: See TracChangeset for help on using the changeset viewer.