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/Lib/TLibEncoder
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • 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.