Ignore:
Timestamp:
28 Nov 2013, 10:04:37 (10 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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.