Changeset 716 in 3DVCSoftware


Ignore:
Timestamp:
28 Nov 2013, 10:04:37 (11 years ago)
Author:
mediatek-htm
Message:

Bug fix for F0093, addded macro is

#define BUGFIX_F0093 1 bug fix for F0093 for depth IvMC pruning

Location:
branches/HTM-8.2-dev0-MediaTek/source
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-8.2-dev0-MediaTek/source/App/TAppEncoder/TAppEncCfg.cpp

    r712 r716  
    510510  ("AdvMultiviewResPred",      m_uiUseAdvResPred,           (UInt)1, "Usage of Advanced Residual Prediction" )
    511511#endif
     512#if MTK_SPIVMP_F0110
     513  ("SubPULog2Size", m_iSubPULog2Size, (Int)3, "Sub-PU size index: 2^n")
     514#endif
     515
    512516#if H_3D_IC
    513517#if SEC_ONLY_TEXTURE_IC_F0151
     
    14861490#if H_3D_ARP
    14871491  xConfirmPara( ( 0 != m_uiUseAdvResPred ) &&  ( 1 != m_uiUseAdvResPred ), "UseAdvResPred must be 0 or 1." );
     1492#endif
     1493#if MTK_SPIVMP_F0110
     1494  xConfirmPara( m_iSubPULog2Size < 2,                                        "SubPULog2Size must be 2 or greater.");
     1495  xConfirmPara( m_iSubPULog2Size > 6,                                        "SubPULog2Size must be 6 or smaller.");
     1496  xConfirmPara( (1<<m_iSubPULog2Size) > m_uiMaxCUWidth,                      "SubPULog2Size must be log2(maxCUSize) or smaller.");
    14881497#endif
    14891498#if ADAPTIVE_QP_SELECTION
     
    24322441  printf("IvMvPred:%d ", m_ivMvPredFlag );
    24332442#endif
     2443#if MTK_SPIVMP_F0110
     2444  printf(" SubPULog2Size:%d  " , m_iSubPULog2Size  );
     2445#endif
    24342446#endif
    24352447#if H_3D_ARP
  • branches/HTM-8.2-dev0-MediaTek/source/App/TAppEncoder/TAppEncCfg.h

    r712 r716  
    119119#else
    120120  Bool                   m_ivMvPredFlag;                      ///< Interview motion vector prediction
     121#endif
     122#if MTK_SPIVMP_F0110
     123  Int                    m_iSubPULog2Size;                   
    121124#endif
    122125#endif
  • branches/HTM-8.2-dev0-MediaTek/source/App/TAppEncoder/TAppEncTop.cpp

    r712 r716  
    182182    m_cTEncTop.setUseAdvRP                     ( ( isDepth || 0==layerIdInVps ) ? 0 : m_uiUseAdvResPred );
    183183    m_cTEncTop.setARPStepNum                   ( ( isDepth || 0==layerIdInVps ) ? 1 : H_3D_ARP_WFNR     );
     184#endif
     185#if MTK_SPIVMP_F0110
     186    m_cTEncTop.setSubPULog2Size                 (( isDepth || 0==layerIdInVps ) ? 0 : m_iSubPULog2Size   );
    184187#endif
    185188#if H_3D_IC
     
    16551658    vps.setARPStepNum      ( layer, ( isDepth || isLayerZero ) ? 1 : H_3D_ARP_WFNR     );
    16561659#endif 
     1660#if MTK_SPIVMP_F0110
     1661    if( isDepth )
     1662    {
     1663      vps.setSubPULog2Size         ( layer, (layer != 1) ? m_iSubPULog2Size: 0 );
     1664    }
     1665    else
     1666    {
     1667      vps.setSubPULog2Size         ( layer, (!isLayerZero) ? m_iSubPULog2Size: 0 );
     1668    }
     1669#endif
    16571670
    16581671#if H_3D_DIM
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComDataCU.cpp

    r712 r716  
    146146  m_piVSPFlag            = NULL;
    147147#endif
     148#if MTK_SPIVMP_F0110
     149  m_pbSPIVMPFlag         = NULL;
     150#endif
    148151#if H_3D_ARP
    149152  m_puhARPW              = NULL;
     
    196199#if H_3D_VSP
    197200    m_piVSPFlag          = (Char*  )xMalloc(Char,   uiNumPartition);
     201#endif
     202#if MTK_SPIVMP_F0110
     203    m_pbSPIVMPFlag       = (Bool*  )xMalloc(Bool,   uiNumPartition);
    198204#endif
    199205    m_puhLumaIntraDir    = (UChar* )xMalloc(UChar,  uiNumPartition);
     
    356362    if ( m_piVSPFlag          ) { xFree(m_piVSPFlag);           m_piVSPFlag         = NULL; }
    357363#endif
     364#if MTK_SPIVMP_F0110
     365    if ( m_pbSPIVMPFlag       ) { xFree(m_pbSPIVMPFlag);           m_pbSPIVMPFlag         = NULL; }
     366#endif
    358367    if ( m_puhLumaIntraDir    ) { xFree(m_puhLumaIntraDir);     m_puhLumaIntraDir   = NULL; }
    359368    if ( m_puhChromaIntraDir  ) { xFree(m_puhChromaIntraDir);   m_puhChromaIntraDir = NULL; }
     
    561570#if H_3D_VSP
    562571    m_piVSPFlag[ui] = pcFrom->m_piVSPFlag[ui];
     572#endif
     573#if MTK_SPIVMP_F0110
     574    m_pbSPIVMPFlag[ui] = pcFrom->m_pbSPIVMPFlag[ui];
    563575#endif
    564576    m_puhLumaIntraDir[ui]=pcFrom->m_puhLumaIntraDir[ui];
     
    603615#if H_3D_VSP
    604616    memset( m_piVSPFlag         + firstElement, 0,                        numElements * sizeof( *m_piVSPFlag ) );
     617#endif
     618#if MTK_SPIVMP_F0110
     619    memset( m_pbSPIVMPFlag      + firstElement, 0,                        numElements * sizeof( *m_pbSPIVMPFlag ) );
    605620#endif
    606621    memset( m_puhLumaIntraDir   + firstElement, DC_IDX,                   numElements * sizeof( *m_puhLumaIntraDir ) );
     
    784799      m_piVSPFlag[ui] = 0;
    785800#endif
     801#if MTK_SPIVMP_F0110
     802      m_pbSPIVMPFlag[ui] = 0;
     803#endif
    786804      m_puhLumaIntraDir[ui] = DC_IDX;
    787805      m_puhChromaIntraDir[ui] = 0;
     
    883901#if H_3D_VSP
    884902  memset( m_piVSPFlag,          0, sizeof( Char  ) * m_uiNumPartition );
     903#endif
     904#if MTK_SPIVMP_F0110
     905  memset( m_pbSPIVMPFlag,       0, sizeof( Bool  ) * m_uiNumPartition );
    885906#endif
    886907  memset( m_puhLumaIntraDir,    DC_IDX, iSizeInUchar );
     
    9801001      m_pDvInfo[ ui ] = pcCU->m_pDvInfo[uiPartOffset+ui];
    9811002#endif
     1003#if MTK_SPIVMP_F0110
     1004      m_pbSPIVMPFlag[ui]=pcCU->m_pbSPIVMPFlag[uiPartOffset+ui];
     1005#endif
    9821006      m_puhLumaIntraDir[ui]=pcCU->m_puhLumaIntraDir[uiPartOffset+ui];
    9831007      m_puhChromaIntraDir[ui]=pcCU->m_puhChromaIntraDir[uiPartOffset+ui];
     
    11301154  m_piVSPFlag           = pcCU->getVSPFlag()          + uiPart;
    11311155#endif
     1156#if MTK_SPIVMP_F0110
     1157  m_pbSPIVMPFlag        = pcCU->getSPIVMPFlag()          + uiPart;
     1158#endif
    11321159
    11331160#if H_3D_ARP
     
    12851312  m_piVSPFlag          = pcCU->getVSPFlag()               + uiAbsPartIdx;
    12861313  m_pDvInfo            = pcCU->getDvInfo()                + uiAbsPartIdx;
     1314#endif
     1315#if MTK_SPIVMP_F0110
     1316  m_pbSPIVMPFlag       = pcCU->getSPIVMPFlag()               + uiAbsPartIdx;
    12871317#endif
    12881318
     
    13351365
    13361366#endif
     1367#if MTK_SPIVMP_F0110
     1368  memcpy( m_pbSPIVMPFlag        + uiOffset, pcCU->getSPIVMPFlag(),        sizeof( Bool ) * uiNumPartition );
     1369#endif
    13371370  memcpy( m_puhLumaIntraDir     + uiOffset, pcCU->getLumaIntraDir(),      iSizeInUchar );
    13381371  memcpy( m_puhChromaIntraDir   + uiOffset, pcCU->getChromaIntraDir(),    iSizeInUchar );
     
    14641497  memcpy( rpcCU->getDvInfo()            + m_uiAbsIdxInLCU, m_pDvInfo,             sizeof( *m_pDvInfo ) * m_uiNumPartition );
    14651498#endif
     1499#if MTK_SPIVMP_F0110
     1500  memcpy( rpcCU->getSPIVMPFlag()        + m_uiAbsIdxInLCU, m_pbSPIVMPFlag,        sizeof( Bool ) * m_uiNumPartition );
     1501#endif
    14661502  memcpy( rpcCU->getLumaIntraDir()      + m_uiAbsIdxInLCU, m_puhLumaIntraDir,     iSizeInUchar );
    14671503  memcpy( rpcCU->getChromaIntraDir()    + m_uiAbsIdxInLCU, m_puhChromaIntraDir,   iSizeInUchar );
     
    15791615#if H_3D_VSP
    15801616  memcpy( rpcCU->getVSPFlag()           + uiPartOffset, m_piVSPFlag,           sizeof(Char) * uiQNumPart );
     1617#endif
     1618#if MTK_SPIVMP_F0110
     1619  memcpy( rpcCU->getSPIVMPFlag()        + uiPartOffset, m_pbSPIVMPFlag,        sizeof(Bool) * uiQNumPart );
    15811620#endif
    15821621  memcpy( rpcCU->getLumaIntraDir()      + uiPartOffset, m_puhLumaIntraDir,     iSizeInUchar );
     
    27052744  setSubPart<UChar>( uiMergeIndex, m_puhMergeIndex, uiAbsPartIdx, uiDepth, uiPartIdx );
    27062745}
     2746
     2747#if MTK_SPIVMP_F0110
     2748Void TComDataCU::setSPIVMPFlagSubParts( Bool bSPIVMPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth )
     2749{
     2750  setSubPart<Bool>( bSPIVMPFlag, m_pbSPIVMPFlag, uiAbsPartIdx, uiDepth, uiPartIdx );
     2751}
     2752#endif
    27072753
    27082754#if H_3D_VSP
     
    39624008      , InheritedVSPDisInfo*  inheritedVSPDisInfo
    39634009#endif
     4010#if MTK_SPIVMP_F0110
     4011      , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
     4012#endif
    39644013      , Int& numValidMergeCand, Int mrgCandIdx
    39654014)
     
    40304079#if QC_DEPTH_IV_MRG_F0125
    40314080  Bool bIsDepth = getSlice()->getIsDepth();
     4081#if !BUGFIX_F0093
    40324082  Bool bDepthIPMCAvai = false;
     4083#endif
    40334084#endif
    40344085
     
    44334484    , bIsDepth
    44344485#endif
     4486#if MTK_SPIVMP_F0110
     4487    , pcMvFieldSP, puhInterDirSP
     4488#endif
    44354489    );
    44364490  } 
     
    44594513    Int iCnloop=0;
    44604514
    4461     for(Int i = 0; i < 2; i ++)
    4462     {
    4463       iCnloop = iPosLeftAbove[i];
    4464       if ( iCnloop == -1 )
    4465       {
    4466         continue;
    4467       }
    4468       if(ivCandDir[0] == puhInterDirNeighbours[iCnloop] && tmpMV[0]==pcMvFieldNeighbours[(iCnloop<<1)] && tmpMV[1]==pcMvFieldNeighbours[(iCnloop<<1)+1])
    4469       {
    4470         bRemoveSpa                      = true;
    4471         break;
    4472       }     
    4473     }
     4515#if BUGFIX_F0093
     4516    if (!bIsDepth)
     4517    {
     4518#endif
     4519      for(Int i = 0; i < 2; i ++)
     4520      {
     4521        iCnloop = iPosLeftAbove[i];
     4522        if ( iCnloop == -1 )
     4523        {
     4524          continue;
     4525        }
     4526        if(ivCandDir[0] == puhInterDirNeighbours[iCnloop] && tmpMV[0]==pcMvFieldNeighbours[(iCnloop<<1)] && tmpMV[1]==pcMvFieldNeighbours[(iCnloop<<1)+1])
     4527        {
     4528          bRemoveSpa                      = true;
     4529          break;
     4530        }     
     4531      }
     4532#if BUGFIX_F0093
     4533    }
     4534#endif
    44744535#if QC_DEPTH_IV_MRG_F0125
     4536#if BUGFIX_F0093
     4537    if (bIsDepth)
     4538#else
    44754539    if ( bIsDepth && !bRemoveSpa)
     4540#endif
    44764541    {
    44774542      iCnloop = iCount-1;
    44784543      for(; iCnloop >= 0; iCnloop --)
    44794544      {
     4545#if BUGFIX_F0093
     4546        if(ivCandDir[0] == puhInterDirNeighbours[iCnloop] && pcMvFieldNeighbours[iCnloop<<1]==tmpMV[0] && pcMvFieldNeighbours[(iCnloop<<1)+1]==tmpMV[1])  // F0125 compatible with F0093
     4547#else
    44804548        if(puhInterDirNeighbours[iCount] == puhInterDirNeighbours[iCnloop] && pcMvFieldNeighbours[iCnloop<<1]==pcMvFieldNeighbours[(iCount<<1)] && pcMvFieldNeighbours[(iCnloop<<1)+1]==pcMvFieldNeighbours[(iCount<<1)+1])
     4549#endif
    44814550        {
    44824551          bRemoveSpa                      = true;
     
    44844553        }
    44854554      }
     4555#if !BUGFIX_F0093
    44864556      if(!bRemoveSpa)
    44874557      {
    44884558        bDepthIPMCAvai = true;
    44894559      }
     4560#endif
    44904561    }
    44914562#endif
     
    45454616    if (bIvMC)
    45464617    {
     4618#if MTK_SPIVMP_F0110
     4619      pbSPIVMPFlag[iCount] = true;
     4620#endif
    45474621      if( ( ivCandDir[0] & 1 ) == 1 )
    45484622      {
     
    45564630      puhInterDirNeighbours[ iCount ] = ivCandDir[0];
    45574631
     4632#if !BUGFIX_F0093
    45584633#if QC_DEPTH_IV_MRG_F0125
    45594634      if ( bDepthIPMCAvai || !bIsDepth )
    45604635      {
    45614636#endif
    4562       if ( mrgCandIdx == iCount )
    4563       {
    4564         return;
    4565       }
    4566       iCount ++;
     4637#endif
     4638        if ( mrgCandIdx == iCount )
     4639        {
     4640          return;
     4641        }
     4642        iCount ++;
     4643#if !BUGFIX_F0093
    45674644#if QC_DEPTH_IV_MRG_F0125
    45684645      }
     4646#endif
    45694647#endif
    45704648    }
     
    81128190}
    81138191#endif
     8192
     8193#if MTK_SPIVMP_F0110
     8194Void TComDataCU::getSPPara(Int iPUWidth, Int iPUHeight, Int& iNumSP, Int& iNumSPInOneLine, Int& iSPWidth, Int& iSPHeight)
     8195{
     8196  Int iSubPUSize = 1<<getSlice()->getVPS()->getSubPULog2Size(getSlice()->getLayerId());
     8197  iNumSPInOneLine = iPUWidth/iSubPUSize;
     8198  iNumSPInOneLine = iNumSPInOneLine < 1 ? 1: iNumSPInOneLine;
     8199  Int iNumSPInOneColumn = iPUHeight/iSubPUSize;
     8200  iNumSPInOneColumn = iNumSPInOneColumn < 1 ? 1: iNumSPInOneColumn;
     8201  iNumSP = iNumSPInOneLine * iNumSPInOneColumn;
     8202
     8203  iSPWidth = iNumSPInOneLine == 1 ? iPUWidth: iSubPUSize;
     8204  iSPHeight = iNumSPInOneColumn == 1 ? iPUHeight: iSubPUSize;
     8205}
     8206
     8207Void TComDataCU::getSPAbsPartIdx(UInt uiBaseAbsPartIdx, Int iWidth, Int iHeight, Int iPartIdx, Int iNumPartLine, UInt& ruiPartAddr )
     8208{
     8209  uiBaseAbsPartIdx += m_uiAbsIdxInLCU;
     8210  Int iBasePelX = g_auiRasterToPelX[g_auiZscanToRaster[uiBaseAbsPartIdx]];
     8211  Int iBasePelY = g_auiRasterToPelY[g_auiZscanToRaster[uiBaseAbsPartIdx]];
     8212  Int iCurrPelX = iBasePelX + iPartIdx%iNumPartLine * iWidth;
     8213  Int iCurrPelY = iBasePelY + iPartIdx/iNumPartLine * iHeight;
     8214  Int iCurrRaster = iCurrPelY / getPic()->getMinCUHeight() * getPic()->getNumPartInWidth() + iCurrPelX/getPic()->getMinCUWidth();
     8215  ruiPartAddr = g_auiRasterToZscan[iCurrRaster];
     8216  ruiPartAddr -= m_uiAbsIdxInLCU; 
     8217}
     8218
     8219Void TComDataCU::setInterDirSP( UInt uiDir, UInt uiAbsPartIdx, Int iWidth, Int iHeight )
     8220{
     8221  uiAbsPartIdx += getZorderIdxInCU();
     8222  Int iStartPelX = g_auiRasterToPelX[g_auiZscanToRaster[uiAbsPartIdx]];
     8223  Int iStartPelY = g_auiRasterToPelY[g_auiZscanToRaster[uiAbsPartIdx]];
     8224  Int iEndPelX = iStartPelX + iWidth;
     8225  Int iEndPelY = iStartPelY + iHeight;
     8226
     8227  Int iCurrRaster, uiPartAddr;
     8228
     8229  for (Int i=iStartPelY; i<iEndPelY; i+=getPic()->getMinCUHeight())
     8230  {
     8231    for (Int j=iStartPelX; j < iEndPelX; j += getPic()->getMinCUWidth())
     8232    {
     8233      iCurrRaster = i / getPic()->getMinCUHeight() * getPic()->getNumPartInWidth() + j/getPic()->getMinCUWidth();
     8234      uiPartAddr = g_auiRasterToZscan[iCurrRaster];
     8235      uiPartAddr -= getZorderIdxInCU(); 
     8236
     8237      m_puhInterDir[uiPartAddr] = uiDir;
     8238    }
     8239  }
     8240}
     8241#endif
     8242
    81148243#if H_3D_IV_MERGE
    81158244Bool
     
    81188247, Bool bIsDepth           
    81198248#endif
     8249#if MTK_SPIVMP_F0110
     8250, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
     8251#endif
    81208252)
    81218253{
     
    81398271  pcBaseRec->getTopLeftSamplePos( getAddr(), getZorderIdxInCU() + uiPartAddr, iCurrPosX, iCurrPosY );
    81408272
     8273#if !MTK_SPIVMP_F0110
    81418274#if QC_DEPTH_IV_MRG_F0125
    81428275  iCurrPosX  += ( iWidth  >> 1 );
     
    81468279  iCurrPosY  += ( ( iHeight - 1 ) >> 1 );
    81478280#endif
     8281#endif
    81488282
    81498283  Bool depthRefineFlag = false;
     
    81628296#endif
    81638297
     8298#if MTK_SPIVMP_F0110
     8299  ////////////////////////////////
     8300  //////////sub-PU IvMC///////////
     8301  ////////////////////////////////
     8302 
     8303  Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     8304  getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     8305
     8306  for (Int i=0; i<iNumSP; i++)
     8307  {
     8308    puhInterDirSP[i] = 0;
     8309    pcMvFieldSP[2*i].getMv().set(0, 0);
     8310    pcMvFieldSP[2*i+1].getMv().set(0,0);
     8311    pcMvFieldSP[2*i].setRefIdx(-1);
     8312    pcMvFieldSP[2*i+1].setRefIdx(-1);
     8313  }
     8314
     8315  Int         iBaseCUAddr;
     8316  Int         iBaseAbsPartIdx;
     8317  TComDataCU* pcBaseCU;
     8318  Int iPartition = 0;
     8319  Int iInterDirLast = 0;
     8320  TComMvField cMvFieldLast[2];
     8321
     8322  Int iDelX = iSPWidth/2;
     8323  Int iDelY = iSPHeight/2;
     8324
     8325  Int         iBasePosX, iBasePosY;
     8326  for (Int i=iCurrPosY; i < iCurrPosY + iHeight; i += iSPHeight)
     8327  {
     8328    for (Int j = iCurrPosX; j < iCurrPosX + iWidth; j += iSPWidth)
     8329    {
     8330      iBasePosX   = Clip3( 0, pcBaseRec->getWidth () - 1, j + iDelX + ( (cDv.getHor() + 2 ) >> 2 ));
     8331      iBasePosY   = Clip3( 0, pcBaseRec->getHeight() - 1, i + iDelY + ( (cDv.getVer() + 2 ) >> 2 ));
     8332
     8333      pcBaseRec->getCUAddrAndPartIdx( iBasePosX , iBasePosY, iBaseCUAddr, iBaseAbsPartIdx );
     8334      pcBaseCU    = pcBasePic->getCU( iBaseCUAddr );
     8335      if(!( pcBaseCU->getPredictionMode( iBaseAbsPartIdx ) == MODE_INTRA ))
     8336      {
     8337        for( UInt uiCurrRefListId = 0; uiCurrRefListId < 2; uiCurrRefListId++ )
     8338        {
     8339          RefPicList  eCurrRefPicList = RefPicList( uiCurrRefListId );
     8340          Bool bLoop_stop = false;
     8341          for(Int iLoop = 0; iLoop < 2 && !bLoop_stop; ++iLoop)
     8342          {
     8343            RefPicList eBaseRefPicList = (iLoop ==1)? RefPicList( 1 -  uiCurrRefListId ) : RefPicList( uiCurrRefListId );
     8344            TComMvField cBaseMvField;
     8345            pcBaseCU->getMvField( pcBaseCU, iBaseAbsPartIdx, eBaseRefPicList, cBaseMvField );
     8346            Int         iBaseRefIdx     = cBaseMvField.getRefIdx();
     8347            if (iBaseRefIdx >= 0)
     8348            {
     8349              Int iBaseRefPOC = pcBaseCU->getSlice()->getRefPOC(eBaseRefPicList, iBaseRefIdx);
     8350              if (iBaseRefPOC != pcSlice->getPOC())   
     8351              {
     8352                for (Int iPdmRefIdx = 0; iPdmRefIdx < pcSlice->getNumRefIdx( eCurrRefPicList ); iPdmRefIdx++)
     8353                {
     8354                  if (iBaseRefPOC == pcSlice->getRefPOC(eCurrRefPicList, iPdmRefIdx))
     8355                  {
     8356                    abPdmAvailable[ uiCurrRefListId ] = true;
     8357                    TComMv cMv(cBaseMvField.getHor(), cBaseMvField.getVer());
     8358
     8359                    if( !bIsDepth )
     8360                    {
     8361                      cMv.setIDVFlag   (true);
     8362                      cMv.setIDVHor    (cDv.getHor());                 
     8363                      cMv.setIDVVer    (cDv.getVer()); 
     8364                      cMv.setIDVVId    (iViewIndex);
     8365                    }
     8366
     8367                    clipMv( cMv );
     8368                    bLoop_stop = true;
     8369
     8370                    pcMvFieldSP[2*iPartition + uiCurrRefListId].setMvField(cMv, iPdmRefIdx);
     8371                    break;
     8372                  }
     8373                }
     8374              }
     8375            }
     8376          }
     8377        }
     8378      }
     8379
     8380      puhInterDirSP[iPartition] = (pcMvFieldSP[2*iPartition].getRefIdx()!=-1 ? 1: 0) + (pcMvFieldSP[2*iPartition+1].getRefIdx()!=-1 ? 2: 0);
     8381      if (puhInterDirSP[iPartition] == 0)
     8382      {
     8383        if (iInterDirLast != 0)
     8384        {
     8385          puhInterDirSP[iPartition] = iInterDirLast;
     8386          pcMvFieldSP[2*iPartition] = cMvFieldLast[0];
     8387          pcMvFieldSP[2*iPartition + 1] = cMvFieldLast[1];
     8388        }
     8389      }
     8390      else
     8391      {
     8392        if (iInterDirLast ==0)
     8393        {
     8394          availableMcDc[0] = puhInterDirSP[iPartition];
     8395          paiPdmRefIdx  [ 0 ] = pcMvFieldSP[2*iPartition].getRefIdx();
     8396          pacPdmMv      [ 0 ] = pcMvFieldSP[2*iPartition].getMv();
     8397          paiPdmRefIdx  [ 1 ] = pcMvFieldSP[2*iPartition+1].getRefIdx();
     8398          pacPdmMv      [ 1 ] = pcMvFieldSP[2*iPartition+1].getMv();
     8399
     8400          if (iPartition != 0)
     8401          {
     8402            for (Int iPart = iPartition-1; iPart >= 0; iPart--)
     8403            {
     8404              puhInterDirSP[iPart] = puhInterDirSP[iPartition];
     8405              pcMvFieldSP[2*iPart] = pcMvFieldSP[2*iPartition];
     8406              pcMvFieldSP[2*iPart + 1] = pcMvFieldSP[2*iPartition + 1];
     8407            }
     8408          }
     8409        }
     8410        iInterDirLast = puhInterDirSP[iPartition];
     8411        cMvFieldLast[0] = pcMvFieldSP[2*iPartition];
     8412        cMvFieldLast[1] = pcMvFieldSP[2*iPartition + 1];
     8413      }
     8414
     8415      iPartition ++;
     8416
     8417    }
     8418  } 
     8419
     8420  iCurrPosX  += ( iWidth  >> 1 );
     8421  iCurrPosY  += ( iHeight >> 1 );
     8422#endif
     8423
    81648424  ////////////////////////////////
    81658425  /////// IvMC + IvMCShift ///////
    81668426  ////////////////////////////////
    81678427
    8168   for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++) 
     8428#if MTK_SPIVMP_F0110
     8429  for(Int iLoopCan = 1; iLoopCan < 2; iLoopCan ++)
     8430#else
     8431  for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++)
     8432#endif
    81698433  {
    81708434    // iLoopCan == 0 --> IvMC
     
    82348498    }
    82358499  }
     8500#if MTK_SPIVMP_F0110
     8501  for(Int iLoopCan = 1; iLoopCan < 2; iLoopCan ++)
     8502#else
    82368503  for(Int iLoopCan = 0; iLoopCan < 2; iLoopCan ++)
     8504#endif
    82378505  {
    82388506    availableMcDc[(iLoopCan << 1)] = ( abPdmAvailable[(iLoopCan<<2)] ? 1 : 0 ) + ( abPdmAvailable[1 + (iLoopCan<<2)] ? 2 : 0);
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComDataCU.h

    r712 r716  
    198198                                      ///< 0: non-VSP; 1: VSP
    199199#endif
     200#if MTK_SPIVMP_F0110
     201  Bool*         m_pbSPIVMPFlag;       ///< array of sub-PU IVMP flags to indicate whehter a block uses sub-PU IVMP
     202                                      ///< 0: non-SPIVMP; 1: SPIVMP
     203#endif
    200204#if H_3D_ARP
    201205  UChar*        m_puhARPW;
     
    531535  Void          getIVNStatus       ( UInt uiPartIdx,  DisInfo* pDInfo, Bool& bIVFMerge,  Int& iIVFMaxD);
    532536#endif
     537#if MTK_SPIVMP_F0110
     538  Void          getSPPara(Int iPUWidth, Int iPUHeight, Int& iNumSP, Int& iNumSPInOneLine, Int& iSPWidth, Int& iSPHeight);
     539  Void          getSPAbsPartIdx(UInt uiBaseAbsPartIdx, Int iWidth, Int iHeight, Int iPartIdx, Int iNumPartLine, UInt& ruiPartAddr );
     540  Void          setInterDirSP( UInt uiDir, UInt uiAbsPartIdx, Int iWidth, Int iHeight );
     541#endif
    533542#if H_3D_IV_MERGE
    534543  Bool          getInterViewMergeCands          ( UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* availableMcDc
    535544#if QC_DEPTH_IV_MRG_F0125
    536545    , Bool bIsDepth           
     546#endif
     547#if MTK_SPIVMP_F0110
     548    , TComMvField* pcMFieldSP, UChar* puhInterDirSP
    537549#endif
    538550    );   
     
    708720                                            , InheritedVSPDisInfo*  inheritedVSPDisInfo
    709721#endif
    710                                             , Int& numValidMergeCand, Int mrgCandIdx = -1 );
     722#if MTK_SPIVMP_F0110
     723                                            , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
     724#endif
     725                                            , Int& numValidMergeCand, Int mrgCandIdx = -1
     726                                            );
    711727
    712728#if H_3D_VSP
    713729  inline Void   xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount,  InheritedVSPDisInfo*  inheritedVSPDisInfo);
     730
     731#if MTK_SPIVMP_F0110
     732  Bool*         getSPIVMPFlag        ()                        { return m_pbSPIVMPFlag;          }
     733  Bool          getSPIVMPFlag        ( UInt uiIdx )            { return m_pbSPIVMPFlag[uiIdx];   }
     734  Void          setSPIVMPFlag        ( UInt uiIdx, Bool n )     { m_pbSPIVMPFlag[uiIdx] = n;      }
     735  Void          setSPIVMPFlagSubParts( Bool bSPIVMPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
     736#endif
    714737
    715738  Char*         getVSPFlag        ()                        { return m_piVSPFlag;          }
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComMotionInfo.cpp

    r608 r716  
    4040#include "assert.h"
    4141#include <stdlib.h>
     42#if MTK_SPIVMP_F0110
     43#include "TComDataCU.h"
     44#include "TComPic.h"
     45#endif
    4246
    4347//! \ingroup TLibCommon
     
    323327  setAllRefIdx( mvField.getRefIdx(), eCUMode, iPartAddr, uiDepth, iPartIdx );
    324328}
     329
     330#if MTK_SPIVMP_F0110
     331Void TComCUMvField::setMvFieldSP( TComDataCU* pcCU, UInt uiAbsPartIdx, TComMvField cMvField, Int iWidth, Int iHeight  )
     332{
     333  uiAbsPartIdx += pcCU->getZorderIdxInCU();
     334  Int iStartPelX = g_auiRasterToPelX[g_auiZscanToRaster[uiAbsPartIdx]];
     335  Int iStartPelY = g_auiRasterToPelY[g_auiZscanToRaster[uiAbsPartIdx]];
     336  Int iEndPelX = iStartPelX + iWidth;
     337  Int iEndPelY = iStartPelY + iHeight;
     338
     339  Int iCurrRaster, uiPartAddr;
     340
     341  for (Int i=iStartPelY; i<iEndPelY; i+=pcCU->getPic()->getMinCUHeight())
     342  {
     343    for (Int j=iStartPelX; j < iEndPelX; j += pcCU->getPic()->getMinCUWidth())
     344    {
     345      iCurrRaster = i / pcCU->getPic()->getMinCUHeight() * pcCU->getPic()->getNumPartInWidth() + j/pcCU->getPic()->getMinCUWidth();
     346      uiPartAddr = g_auiRasterToZscan[iCurrRaster];
     347      uiPartAddr -= pcCU->getZorderIdxInCU(); 
     348
     349      m_pcMv[uiPartAddr] = cMvField.getMv();
     350      m_piRefIdx[uiPartAddr] = cMvField.getRefIdx();
     351    }
     352  }
     353}
     354#endif
    325355
    326356/**Subsampling of the stored prediction mode, reference index and motion vector
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComMotionInfo.h

    r622 r716  
    4343#include "CommonDef.h"
    4444#include "TComMv.h"
    45 
    4645//! \ingroup TLibCommon
    4746//! \{
     
    5150// ====================================================================================================================
    5251
     52#if MTK_SPIVMP_F0110
     53class TComDataCU;
     54#endif
    5355/// parameters for AMVP
    5456typedef struct _AMVPInfo
     
    171173  Void    setAllRefIdx ( Int iRefIdx,                 PartSize eMbMode, Int iPartAddr, UInt uiDepth, Int iPartIdx=0 );
    172174  Void    setAllMvField( TComMvField const & mvField, PartSize eMbMode, Int iPartAddr, UInt uiDepth, Int iPartIdx=0 );
     175#if MTK_SPIVMP_F0110
     176  Void    setMvFieldSP ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComMvField cMvField, Int iWidth, Int iHeight  );
     177#endif
    173178
    174179  Void setNumPartition( Int iNumPart )
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComPrediction.cpp

    r712 r716  
    561561}
    562562
     563#if MTK_SPIVMP_F0110
     564Void TComPrediction::xGetSubPUAddrAndMerge(TComDataCU* pcCU, UInt uiPartAddr, Int iSPWidth, Int iSPHeight, Int iNumSPInOneLine, Int iNumSP, UInt* uiMergedSPW, UInt* uiMergedSPH, UInt* uiSPAddr )
     565{
     566  for (Int i = 0; i < iNumSP; i++)
     567  {
     568    uiMergedSPW[i] = iSPWidth;
     569    uiMergedSPH[i] = iSPHeight;
     570    pcCU->getSPAbsPartIdx(uiPartAddr, iSPWidth, iSPHeight, i, iNumSPInOneLine, uiSPAddr[i]);
     571  }
     572  // horizontal sub-PU merge
     573  for (Int i=0; i<iNumSP; i++)
     574  {
     575    if (i % iNumSPInOneLine == iNumSPInOneLine - 1 || uiMergedSPW[i]==0 || uiMergedSPH[i]==0)
     576    {
     577      continue;
     578    }
     579    for (Int j=i+1; j<i+iNumSPInOneLine-i%iNumSPInOneLine; j++)
     580    {
     581      if (xCheckTwoSPMotion(pcCU, uiSPAddr[i], uiSPAddr[j]))
     582      {
     583        uiMergedSPW[i] += iSPWidth;
     584        uiMergedSPW[j] = uiMergedSPH[j] = 0;
     585      }
     586      else
     587      {
     588        break;
     589      }
     590    }
     591  }
     592  //vertical sub-PU merge
     593  for (Int i=0; i<iNumSP-iNumSPInOneLine; i++)
     594  {
     595    if (uiMergedSPW[i]==0 || uiMergedSPH[i]==0)
     596    {
     597      continue;
     598    }
     599    for (Int j=i+iNumSPInOneLine; j<iNumSP; j+=iNumSPInOneLine)
     600    {
     601      if (xCheckTwoSPMotion(pcCU, uiSPAddr[i], uiSPAddr[j]) && uiMergedSPW[i]==uiMergedSPW[j])
     602      {
     603        uiMergedSPH[i] += iSPHeight;
     604        uiMergedSPH[j] = uiMergedSPW[j] = 0;
     605      }
     606      else
     607      {
     608        break;
     609      }
     610    }
     611  }
     612}
     613
     614Bool TComPrediction::xCheckTwoSPMotion ( TComDataCU* pcCU, UInt PartAddr0, UInt PartAddr1 )
     615{
     616  if( pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr0) != pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr1))
     617  {
     618    return false;
     619  }
     620  if( pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr0) != pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr1))
     621  {
     622    return false;
     623  }
     624
     625  if (pcCU->getCUMvField(REF_PIC_LIST_0)->getRefIdx(PartAddr0) >= 0)
     626  {
     627    if (pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr0) != pcCU->getCUMvField(REF_PIC_LIST_0)->getMv(PartAddr1))
     628    {
     629      return false;
     630    }
     631  }
     632
     633  if (pcCU->getCUMvField(REF_PIC_LIST_1)->getRefIdx(PartAddr0) >= 0)
     634  {
     635    if (pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr0) != pcCU->getCUMvField(REF_PIC_LIST_1)->getMv(PartAddr1))
     636    {
     637      return false;
     638    }
     639  }
     640  return true;
     641}
     642#endif
    563643
    564644Void TComPrediction::motionCompensation ( TComDataCU* pcCU, TComYuv* pcYuvPred, RefPicList eRefPicList, Int iPartIdx )
     
    592672      else
    593673      {
    594         if ( xCheckIdenticalMotion( pcCU, uiPartAddr ) )
    595         {
    596           xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, REF_PIC_LIST_0, pcYuvPred );
     674#if MTK_SPIVMP_F0110
     675        if ( pcCU->getSPIVMPFlag(uiPartAddr)!=0) 
     676        {
     677          Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     678
     679          pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     680
     681          UInt uiW[256], uiH[256];
     682          UInt uiSPAddr[256];
     683
     684          xGetSubPUAddrAndMerge(pcCU, uiPartAddr, iSPWidth, iSPHeight, iNumSPInOneLine, iNumSP, uiW, uiH, uiSPAddr);
     685
     686          //MC
     687          for (Int i = 0; i < iNumSP; i++)
     688          {
     689            if (uiW[i]==0 || uiH[i]==0)
     690            {
     691              continue;
     692            }
     693            if( xCheckIdenticalMotion( pcCU, uiSPAddr[i] ))
     694            {
     695              xPredInterUni (pcCU, uiSPAddr[i], uiW[i], uiH[i], REF_PIC_LIST_0, pcYuvPred );
     696            }
     697            else
     698            {
     699              xPredInterBi  (pcCU, uiSPAddr[i], uiW[i], uiH[i], pcYuvPred);
     700            }
     701          }
    597702        }
    598703        else
    599704        {
    600           xPredInterBi  (pcCU, uiPartAddr, iWidth, iHeight, pcYuvPred );
    601         }
     705#endif
     706          if ( xCheckIdenticalMotion( pcCU, uiPartAddr ) )
     707          {
     708            xPredInterUni (pcCU, uiPartAddr, iWidth, iHeight, REF_PIC_LIST_0, pcYuvPred );
     709          }
     710          else
     711          {
     712            xPredInterBi  (pcCU, uiPartAddr, iWidth, iHeight, pcYuvPred );
     713          }
     714#if MTK_SPIVMP_F0110
     715        }
     716#endif
    602717      }
    603718#if H_3D_VSP
     
    643758      else
    644759      {
     760#if MTK_SPIVMP_F0110
     761       if (pcCU->getSPIVMPFlag(uiPartAddr)!=0) 
     762      {
     763        Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     764
     765        pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     766
     767        UInt uiW[256], uiH[256];
     768        UInt uiSPAddr[256];
     769
     770        xGetSubPUAddrAndMerge(pcCU, uiPartAddr, iSPWidth, iSPHeight, iNumSPInOneLine, iNumSP, uiW, uiH, uiSPAddr);
     771        //MC
     772        for (Int i = 0; i < iNumSP; i++)
     773        {
     774          if (uiW[i]==0 || uiH[i]==0)
     775          {
     776            continue;
     777          }
     778          if( xCheckIdenticalMotion( pcCU, uiSPAddr[i] ))
     779          {
     780            xPredInterUni (pcCU, uiSPAddr[i], uiW[i], uiH[i], REF_PIC_LIST_0, pcYuvPred );
     781          }
     782          else
     783          {
     784            xPredInterBi  (pcCU, uiSPAddr[i], uiW[i], uiH[i], pcYuvPred);
     785          }
     786        }
     787      }
     788      else
     789      {
     790#endif
    645791        if ( xCheckIdenticalMotion( pcCU, uiPartAddr ) )
    646792        {
     
    651797          xPredInterBi  (pcCU, uiPartAddr, iWidth, iHeight, pcYuvPred );
    652798        }
     799#if MTK_SPIVMP_F0110
     800       }
     801#endif
    653802      }
    654803#if H_3D_VSP
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComPrediction.h

    r711 r716  
    142142  Void xDCPredFiltering( Int* pSrc, Int iSrcStride, Pel*& rpDst, Int iDstStride, Int iWidth, Int iHeight );
    143143  Bool xCheckIdenticalMotion    ( TComDataCU* pcCU, UInt PartAddr);
    144 
     144#if MTK_SPIVMP_F0110
     145  Bool xCheckTwoSPMotion ( TComDataCU* pcCU, UInt PartAddr0, UInt PartAddr1 );
     146  Void xGetSubPUAddrAndMerge(TComDataCU* pcCU, UInt uiPartAddr, Int iSPWidth, Int iSPHeight, Int iNumSPInOneLine, Int iNumSP, UInt* uiMergedSPW, UInt* uiMergedSPH, UInt* uiSPAddr );
     147#endif
    145148#if H_3D_DIM
    146149  // depth intra functions
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComSlice.cpp

    r710 r716  
    18381838#if H_3D_IV_MERGE
    18391839    m_ivMvPredFlag         [ i ] = false;
     1840#if MTK_SPIVMP_F0110
     1841    m_iSubPULog2Size       [ i ] = 0;
     1842#endif
    18401843#endif
    18411844#if H_3D_VSP
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TComSlice.h

    r710 r716  
    597597#if H_3D_IV_MERGE
    598598  Bool        m_ivMvPredFlag             [ MAX_NUM_LAYERS ];
     599#if MTK_SPIVMP_F0110
     600  Int         m_iSubPULog2Size           [MAX_NUM_LAYERS   ];
     601#endif
    599602#endif
    600603#if H_3D_VSP
     
    829832  Void    setIvMvPredFlag     ( Int layerIdInVps, Bool val )  { m_ivMvPredFlag[ layerIdInVps ] = val; }
    830833  Bool    getIvMvPredFlag     ( Int layerIdInVps )            { return m_ivMvPredFlag[ layerIdInVps ]; };
     834#if MTK_SPIVMP_F0110
     835  Int     getSubPULog2Size(Int layerIdInVps)           { return m_iSubPULog2Size[layerIdInVps]; }
     836  Void    setSubPULog2Size(Int layerIdInVps, Int u)    { m_iSubPULog2Size[layerIdInVps] = u;}
     837#endif
    831838#endif
    832839#if H_3D_VSP
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibCommon/TypeDef.h

    r713 r716  
    262262#if H_3D_IV_MERGE
    263263#define QC_DEPTH_IV_MRG_F0125                   1 // JCT3V-F0125: Depth oriented Inter-view MV candidate
     264#define MTK_SPIVMP_F0110                        0 // JCT3V-F0110: Sub-PU level inter-view motion prediction
     265#define BUGFIX_F0093                            1 // bug fix for F0093 for depth IvMC pruning
    264266#endif
    265267
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r712 r716  
    12451245    pcVPS->setARPStepNum( i, 1 );
    12461246#endif 
     1247#if MTK_SPIVMP_F0110
     1248    pcVPS->setSubPULog2Size(i, 0);
     1249#endif
    12471250    if ( i != 0 )
    12481251    {
     
    12511254#if H_3D_IV_MERGE
    12521255        READ_FLAG( uiCode, "iv_mv_pred_flag[i]");          pcVPS->setIvMvPredFlag         ( i, uiCode == 1 ? true : false );
     1256#if MTK_SPIVMP_F0110
     1257        READ_UVLC (uiCode, "log2_sub_PU_size_minus2");     pcVPS->setSubPULog2Size(i, uiCode+2);
     1258#endif
    12531259#endif
    12541260#if H_3D_ARP
     
    12691275        {
    12701276          READ_FLAG( uiCode, "iv_mv_pred_flag[i]");          pcVPS->setIvMvPredFlag         ( i, uiCode == 1 ? true : false );
     1277        }
     1278#endif
     1279#if MTK_SPIVMP_F0110
     1280        if (i!=1)
     1281        {
     1282          READ_UVLC (uiCode, "log2_sub_PU_size_minus2");     pcVPS->setSubPULog2Size(i, uiCode+2);
    12711283        }
    12721284#endif
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibDecoder/TDecCu.cpp

    r712 r716  
    403403    memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    404404    InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
    405 
     405#if MTK_SPIVMP_F0110
     406    Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
     407    memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     408    TComMvField*  pcMvFieldSP;
     409    UChar* puhInterDirSP;
     410    pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
     411    puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
     412#endif
    406413#if ETRIKHU_MERGE_REUSE_F0093
    407414    m_ppcCU[uiDepth]->initAvailableFlags();
    408415    m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    409     m_ppcCU[uiDepth]->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand, uiMergeIndex );
     416    m_ppcCU[uiDepth]->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo
     417#if MTK_SPIVMP_F0110
     418      , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     419#endif
     420      , numValidMergeCand, uiMergeIndex );
    410421#else
    411422    m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand, uiMergeIndex );
     
    457468      }
    458469    }
     470#if MTK_SPIVMP_F0110
     471    pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeIndex], uiAbsPartIdx, 0, uiDepth );
     472    if (bSPIVMPFlag[uiMergeIndex])
     473    {
     474      UInt uiSPAddr;
     475      Int iWidth = pcCU->getWidth(uiAbsPartIdx);
     476      Int iHeight = pcCU->getHeight(uiAbsPartIdx);
     477
     478      Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     479
     480      pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     481
     482      for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     483      {
     484        pcCU->getSPAbsPartIdx(uiAbsPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     485        pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
     486        pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     487        pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     488      }
     489    }
     490    delete pcMvFieldSP;
     491    delete puhInterDirSP;
     492#endif
    459493#if !LGE_SHARP_VSP_INHERIT_F0104
    460494#if H_3D_IC
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibDecoder/TDecEntropy.cpp

    r712 r716  
    213213  UChar uhInterDirNeighbours[MRG_MAX_NUM_CANDS];
    214214#endif
    215 
     215#if MTK_SPIVMP_F0110
     216  Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
     217  TComMvField*  pcMvFieldSP;
     218  UChar* puhInterDirSP;
     219  pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
     220  puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
     221#endif
    216222  for ( UInt ui = 0; ui < pcCU->getSlice()->getMaxNumMergeCand(); ui++ )
    217223  {
     
    256262          memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    257263          InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
     264#if MTK_SPIVMP_F0110
     265          memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     266#endif
    258267#if ETRIKHU_MERGE_REUSE_F0093
    259268          pcSubCU->initAvailableFlags();
    260269          pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand);
    261           pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand );
     270          pcSubCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo
     271#if MTK_SPIVMP_F0110
     272            , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     273#endif
     274            , numValidMergeCand );
    262275#else
    263276          pcSubCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand );
     
    290303        memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    291304        InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
     305#if MTK_SPIVMP_F0110
     306        memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     307#endif
    292308#if ETRIKHU_MERGE_REUSE_F0093
    293309        pcSubCU->initAvailableFlags();
    294310        pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    295         pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo,numValidMergeCand, uiMergeIndex );
     311        pcSubCU->xGetInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo
     312#if MTK_SPIVMP_F0110
     313          , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     314#endif
     315          ,numValidMergeCand, uiMergeIndex );
    296316#else
    297317        pcSubCU->getInterMergeCandidates( uiSubPartIdx-uiAbsPartIdx, uiPartIdx, cMvFieldNeighbours, uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo,numValidMergeCand, uiMergeIndex );
     
    325345        }
    326346      }
     347#if MTK_SPIVMP_F0110
     348      pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeIndex], uiSubPartIdx, uiPartIdx, uiDepth ); 
     349      if (bSPIVMPFlag[uiMergeIndex] != 0)
     350      {
     351        Int iWidth, iHeight;
     352        UInt uiIdx;
     353        pcCU->getPartIndexAndSize( uiPartIdx, uiIdx, iWidth, iHeight, uiSubPartIdx, true );
     354
     355        UInt uiSPAddr;
     356
     357        Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     358
     359        pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     360
     361        for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     362        {
     363          pcCU->getSPAbsPartIdx(uiSubPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     364          pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
     365          pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     366          pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     367        }
     368      }
     369#endif
    327370    }
    328371    else
     
    358401    }
    359402  }
     403#if MTK_SPIVMP_F0110
     404  delete pcMvFieldSP;
     405  delete puhInterDirSP;
     406#endif
    360407  return;
    361408}
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibEncoder/TEncCavlc.cpp

    r712 r716  
    10061006#if H_3D_IV_MERGE
    10071007        WRITE_FLAG( pcVPS->getIvMvPredFlag         ( i ) ? 1 : 0 , "iv_mv_pred_flag[i]");
     1008#if MTK_SPIVMP_F0110
     1009        WRITE_UVLC( pcVPS->getSubPULog2Size(i)-2, "log2_sub_PU_size_minus2[i]");
     1010#endif
    10081011#endif
    10091012#if H_3D_ARP
     
    10231026        {
    10241027          WRITE_FLAG( pcVPS->getIvMvPredFlag         ( i ) ? 1 : 0 , "iv_mv_pred_flag[i]");
     1028        }
     1029#endif
     1030#if MTK_SPIVMP_F0110
     1031        if (i!=1)
     1032        {
     1033          WRITE_UVLC( pcVPS->getSubPULog2Size(i)-2, "log2_sub_PU_size_minus2[i]");
    10251034        }
    10261035#endif
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibEncoder/TEncCfg.h

    r712 r716  
    403403  UInt      m_uiARPStepNum;
    404404#endif
     405#if MTK_SPIVMP_F0110
     406  Int      m_iSubPULog2Size;
     407#endif
    405408#if H_3D_IC
    406409  Bool      m_bUseIC;
     
    505508  UInt       getARPStepNum                  ()               { return m_uiARPStepNum;    }
    506509  Void       setARPStepNum                  ( UInt  u )      { m_uiARPStepNum = u;       }
     510#endif
     511#if MTK_SPIVMP_F0110
     512  Int        getSubPULog2Size                   ()                   { return m_iSubPULog2Size;}
     513  Void       setSubPULog2Size                   (Int u)              { m_iSubPULog2Size = u; }     
    507514#endif
    508515
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibEncoder/TEncCu.cpp

    r712 r716  
    18681868    memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
    18691869    InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
     1870#if MTK_SPIVMP_F0110
     1871    Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
     1872    memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     1873    TComMvField*  pcMvFieldSP;
     1874    UChar* puhInterDirSP;
     1875    pcMvFieldSP = new TComMvField[rpcTempCU->getPic()->getPicSym()->getNumPartition()*2];
     1876    puhInterDirSP = new UChar[rpcTempCU->getPic()->getPicSym()->getNumPartition()];
     1877#endif
    18701878#if ETRIKHU_MERGE_REUSE_F0093
    18711879    rpcTempCU->initAvailableFlags();
    18721880    rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand );
    1873     rpcTempCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag,inheritedVSPDisInfo, numValidMergeCand );
     1881    rpcTempCU->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag,inheritedVSPDisInfo
     1882#if MTK_SPIVMP_F0110
     1883      , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     1884#endif
     1885      , numValidMergeCand
     1886      );
    18741887#else
    18751888    rpcTempCU->getInterMergeCandidates( 0, 0, cMvFieldNeighbours,uhInterDirNeighbours, vspFlag, inheritedVSPDisInfo, numValidMergeCand );
     
    19101923          rpcTempCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMergeCand].m_acDvInfo, 0, 0, uhDepth );
    19111924#endif
    1912           rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to LCU level
    1913           rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
    1914           rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
     1925#if MTK_SPIVMP_F0110
     1926          rpcTempCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMergeCand], 0, 0, uhDepth);
     1927          if (bSPIVMPFlag[uiMergeCand])
     1928          {
     1929            UInt uiSPAddr;
     1930            Int iWidth = rpcTempCU->getWidth(0);
     1931            Int iHeight = rpcTempCU->getHeight(0);
     1932
     1933            Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     1934
     1935            rpcTempCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     1936
     1937            for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     1938            {
     1939              rpcTempCU->getSPAbsPartIdx(0, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     1940              rpcTempCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
     1941              rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(rpcTempCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     1942              rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(rpcTempCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     1943            }
     1944          }
     1945          else
     1946          {
     1947#endif
     1948            rpcTempCU->setInterDirSubParts( uhInterDirNeighbours[uiMergeCand], 0, 0, uhDepth ); // interprets depth relative to LCU level
     1949            rpcTempCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
     1950            rpcTempCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], SIZE_2Nx2N, 0, 0 ); // interprets depth relative to rpcTempCU level
     1951#if MTK_SPIVMP_F0110
     1952          }
     1953#endif
    19151954#if H_3D_ARP && !QC_MTK_INTERVIEW_ARP_F0123_F0108
    19161955          if( nARPW )
     
    20542093  }
    20552094 }
     2095#if MTK_SPIVMP_F0110
     2096 delete pcMvFieldSP;
     2097 delete puhInterDirSP;
     2098#endif
    20562099#if H_3D_ARP
    20572100 }
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibEncoder/TEncSearch.cpp

    r712 r716  
    36163616                                 , InheritedVSPDisInfo*  inheritedVSPDisInfo
    36173617#endif
     3618#if MTK_SPIVMP_F0110
     3619                                 , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
     3620#endif
    36183621                                 , Int& numValidMergeCand
    36193622                                 )
     
    36393642                                        , inheritedVSPDisInfo
    36403643#endif
     3644#if MTK_SPIVMP_F0110
     3645                                        , pbSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     3646#endif
    36413647                                        , numValidMergeCand
    36423648        );
     
    36633669                                      , inheritedVSPDisInfo
    36643670#endif
     3671#if MTK_SPIVMP_F0110
     3672                                      , pbSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     3673#endif
    36653674                                      , numValidMergeCand
    36663675      );
     
    36913700      PartSize ePartSize = pcCU->getPartitionSize( 0 );
    36923701
    3693       pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
    3694       pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
     3702#if MTK_SPIVMP_F0110
     3703      pcCU->setSPIVMPFlagSubParts( pbSPIVMPFlag[uiMergeCand], uiAbsPartIdx, iPUIdx, pcCU->getDepth( uiAbsPartIdx ));
     3704      if (pbSPIVMPFlag[uiMergeCand])
     3705      {
     3706        UInt uiSPAddr;
     3707
     3708        Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     3709
     3710        pcCU->getSPPara(iWidth, iHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     3711
     3712        for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     3713        {
     3714          pcCU->getSPAbsPartIdx(uiAbsPartIdx, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     3715          pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     3716          pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     3717        }
     3718      }
     3719      else
     3720      {
     3721#endif
     3722        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvField( cMvFieldNeighbours[0 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
     3723        pcCU->getCUMvField(REF_PIC_LIST_1)->setAllMvField( cMvFieldNeighbours[1 + 2*uiMergeCand], ePartSize, uiAbsPartIdx, 0, iPUIdx );
     3724#if MTK_SPIVMP_F0110
     3725      }
     3726#endif
    36953727
    36963728#if H_3D_VSP
     
    43694401      DisInfo OriginalDvInfo = pcCU->getDvInfo(uiAbsPartIdx);
    43704402#endif
    4371 
     4403#if MTK_SPIVMP_F0110
     4404      Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
     4405      memset(bSPIVMPFlag, false, sizeof(Bool)*MRG_MAX_NUM_CANDS_MEM);
     4406      TComMvField*  pcMvFieldSP;
     4407      UChar* puhInterDirSP;
     4408      pcMvFieldSP = new TComMvField[pcCU->getPic()->getPicSym()->getNumPartition()*2];
     4409      puhInterDirSP = new UChar[pcCU->getPic()->getPicSym()->getNumPartition()];
     4410#endif
    43724411      xMergeEstimation( pcCU, pcOrgYuv, iPartIdx, uiMRGInterDir, cMRGMvField, uiMRGIndex, uiMRGCost, cMvFieldNeighbours, uhInterDirNeighbours
    43734412#if H_3D_VSP
     
    43754414                      , inheritedVSPDisInfo
    43764415#endif
     4416#if MTK_SPIVMP_F0110
     4417                      , bSPIVMPFlag, pcMvFieldSP, puhInterDirSP
     4418#endif
    43774419                      , numValidMergeCand
    43784420                      );
     
    43864428        pcCU->setDvInfoSubParts(inheritedVSPDisInfo[uiMRGIndex].m_acDvInfo, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    43874429#endif
    4388         pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
    4389         {
    4390           pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
    4391           pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
    4392         }
     4430#if MTK_SPIVMP_F0110
     4431        pcCU->setSPIVMPFlagSubParts(bSPIVMPFlag[uiMRGIndex], uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) ); 
     4432        if (bSPIVMPFlag[uiMRGIndex]!=0)
     4433        {
     4434          UInt uiSPAddr;
     4435
     4436          Int iNumSPInOneLine, iNumSP, iSPWidth, iSPHeight;
     4437
     4438          pcCU->getSPPara(iRoiWidth, iRoiHeight, iNumSP, iNumSPInOneLine, iSPWidth, iSPHeight);
     4439
     4440          for (Int iPartitionIdx = 0; iPartitionIdx < iNumSP; iPartitionIdx++)
     4441          {
     4442            pcCU->getSPAbsPartIdx(uiPartAddr, iSPWidth, iSPHeight, iPartitionIdx, iNumSPInOneLine, uiSPAddr);
     4443            pcCU->setInterDirSP(puhInterDirSP[iPartitionIdx], uiSPAddr, iSPWidth, iSPHeight);
     4444            pcCU->getCUMvField( REF_PIC_LIST_0 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx], iSPWidth, iSPHeight);
     4445            pcCU->getCUMvField( REF_PIC_LIST_1 )->setMvFieldSP(pcCU, uiSPAddr, pcMvFieldSP[2*iPartitionIdx + 1], iSPWidth, iSPHeight);
     4446          }
     4447
     4448          if ( pcCU->getInterDir(uiPartAddr) == 3 && pcCU->isBipredRestriction(iPartIdx) )
     4449          {
     4450            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMv( TComMv(0,0), ePartSize, uiPartAddr, 0, iPartIdx);
     4451            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllRefIdx( -1, ePartSize, uiPartAddr, 0, iPartIdx);
     4452            pcCU->setInterDirSubParts( 1, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ));
     4453          }
     4454
     4455        }
     4456        else
     4457        {
     4458#endif
     4459          pcCU->setInterDirSubParts  ( uiMRGInterDir, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4460          {
     4461            pcCU->getCUMvField( REF_PIC_LIST_0 )->setAllMvField( cMRGMvField[0], ePartSize, uiPartAddr, 0, iPartIdx );
     4462            pcCU->getCUMvField( REF_PIC_LIST_1 )->setAllMvField( cMRGMvField[1], ePartSize, uiPartAddr, 0, iPartIdx );
     4463          }
     4464#if MTK_SPIVMP_F0110
     4465        }
     4466#endif
    43934467
    43944468        pcCU->getCUMvField(REF_PIC_LIST_0)->setAllMvd    ( cMvZero,            ePartSize, uiPartAddr, 0, iPartIdx );
     
    44024476      else
    44034477      {
     4478#if MTK_SPIVMP_F0110       
     4479        pcCU->setSPIVMPFlagSubParts(0, uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     4480#endif
    44044481        // set ME result
    44054482        pcCU->setMergeFlagSubParts( false,        uiPartAddr, iPartIdx, pcCU->getDepth( uiPartAddr ) );
     
    44144491        }
    44154492      }
     4493#if MTK_SPIVMP_F0110
     4494      delete pcMvFieldSP;
     4495      delete puhInterDirSP;
     4496#endif
    44164497    }
    44174498
     
    53265407      dZeroCost = dCost + 1;
    53275408    }
     5409#if MTK_SPIVMP_F0110
     5410    if ( dZeroCost < dCost || pcCU->getQtRootCbf(0)==0)
     5411#else
    53285412    if ( dZeroCost < dCost )
     5413#endif
    53295414    {
    53305415      dCost        = dZeroCost;
  • branches/HTM-8.2-dev0-MediaTek/source/Lib/TLibEncoder/TEncSearch.h

    r712 r716  
    427427                                  , InheritedVSPDisInfo*  inheritedVSPDisInfo
    428428#endif
     429#if MTK_SPIVMP_F0110
     430                                  , Bool* pbSPIVMPFlag, TComMvField* pcMvFieldSP, UChar* puhInterDirSP
     431#endif
    429432                                  , Int& numValidMergeCand
    430433                                   );
Note: See TracChangeset for help on using the changeset viewer.