Ignore:
Timestamp:
28 Aug 2013, 04:55:26 (12 years ago)
Author:
mediatek-htm
Message:

Modify the software implementation related to "MTK_VSP_FIX_E0172" to be aligned with the draft text.
The MACRO is "MTK_VSP_FIX_ALIGN_WD_E0172"

By Yi-Wen Chen (yiwen.chen@…)

Location:
branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComDataCU.cpp

    r593 r596  
    943943#if H_3D_VSP
    944944      m_piVSPFlag[ui]=pcCU->m_piVSPFlag[uiPartOffset+ui];
     945#if MTK_VSP_FIX_ALIGN_WD_E0172
     946      m_pDvInfo[ ui ] = pcCU->m_pDvInfo[uiPartOffset+ui];
     947#endif
    945948#if MTK_VSP_FIX_E0172
    946949      m_piVSPDir[ui]=pcCU->m_piVSPDir[uiPartOffset+ui];
     
    12381241#if H_3D_VSP
    12391242  m_piVSPFlag          = pcCU->getVSPFlag()               + uiAbsPartIdx;
     1243#if MTK_VSP_FIX_ALIGN_WD_E0172
     1244  m_pDvInfo            = pcCU->getDvInfo()                + uiAbsPartIdx;
     1245#endif
    12401246#if MTK_VSP_FIX_E0172
    12411247  m_piVSPDir           = pcCU->getVSPDir  ()              + uiAbsPartIdx;
     
    12881294#if H_3D_VSP
    12891295  memcpy( m_piVSPFlag           + uiOffset, pcCU->getVSPFlag(),           sizeof( Char ) * uiNumPartition );
     1296#if MTK_VSP_FIX_ALIGN_WD_E0172
     1297  memcpy( m_pDvInfo             + uiOffset, pcCU->getDvInfo(),            sizeof( *m_pDvInfo ) * uiNumPartition );
     1298#endif
    12901299#if MTK_VSP_FIX_E0172
    12911300  memcpy( m_piVSPDir            + uiOffset, pcCU->getVSPDir  (),          sizeInChar );
     
    14111420#if H_3D_VSP
    14121421  memcpy( rpcCU->getVSPFlag()           + m_uiAbsIdxInLCU, m_piVSPFlag,           sizeof( Char ) * m_uiNumPartition );
     1422#if MTK_VSP_FIX_ALIGN_WD_E0172
     1423  memcpy( rpcCU->getDvInfo()            + m_uiAbsIdxInLCU, m_pDvInfo,             sizeof( *m_pDvInfo ) * m_uiNumPartition );
     1424#endif
    14131425#if MTK_VSP_FIX_E0172
    14141426  memcpy( rpcCU->getVSPDir  ()          + m_uiAbsIdxInLCU, m_piVSPDir  ,          sizeInChar );
     
    25282540  setSubPart<Char>( iVSPFlag, m_piVSPFlag, uiAbsPartIdx, uiDepth, uiPartIdx );
    25292541}
     2542#if MTK_VSP_FIX_ALIGN_WD_E0172
     2543template<typename T>
     2544Void TComDataCU::setSubPartT( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx )
     2545{
     2546  UInt uiCurrPartNumQ = (m_pcPic->getNumPartInCU() >> (2 * uiCUDepth)) >> 2;
     2547  switch ( m_pePartSize[ uiCUAddr ] )
     2548  {
     2549  case SIZE_2Nx2N:
     2550    for (UInt ui = 0; ui < 4 * uiCurrPartNumQ; ui++)
     2551      puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2552
     2553    break;
     2554  case SIZE_2NxN:
     2555    for (UInt ui = 0; ui < 2 * uiCurrPartNumQ; ui++)
     2556      puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2557    break;
     2558  case SIZE_Nx2N:
     2559    for (UInt ui = 0; ui < uiCurrPartNumQ; ui++)
     2560      puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2561    for (UInt ui = 0; ui < uiCurrPartNumQ; ui++)
     2562      puhBaseLCU[uiCUAddr + 2 * uiCurrPartNumQ + ui] = uiParameter;
     2563    break;
     2564  case SIZE_NxN:
     2565    for (UInt ui = 0; ui < uiCurrPartNumQ; ui++)
     2566      puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2567    break;
     2568  case SIZE_2NxnU:
     2569    if ( uiPUIdx == 0 )
     2570    {
     2571      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2572        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2573      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2574        puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter;
     2575
     2576    }
     2577    else if ( uiPUIdx == 1 )
     2578    {
     2579      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2580        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2581      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1) + (uiCurrPartNumQ << 1); ui++)
     2582        puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter;
     2583
     2584    }
     2585    else
     2586    {
     2587      assert(0);
     2588    }
     2589    break;
     2590  case SIZE_2NxnD:
     2591    if ( uiPUIdx == 0 )
     2592    {
     2593      for (UInt ui = 0; ui < ((uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1)); ui++)
     2594        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2595      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2596        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + uiCurrPartNumQ + ui] = uiParameter;
     2597
     2598    }
     2599    else if ( uiPUIdx == 1 )
     2600    {
     2601      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2602        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2603      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 1); ui++)
     2604        puhBaseLCU[uiCUAddr + uiCurrPartNumQ + ui] = uiParameter;
     2605
     2606    }
     2607    else
     2608    {
     2609      assert(0);
     2610    }
     2611    break;
     2612  case SIZE_nLx2N:
     2613    if ( uiPUIdx == 0 )
     2614    {
     2615      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2616        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2617      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2618        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2619      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2620        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter;
     2621      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2622        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2623
     2624    }
     2625    else if ( uiPUIdx == 1 )
     2626    {
     2627      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2628        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2629      for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++)
     2630        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2631      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2632        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter;
     2633      for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++)
     2634        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2635
     2636    }
     2637    else
     2638    {
     2639      assert(0);
     2640    }
     2641    break;
     2642  case SIZE_nRx2N:
     2643    if ( uiPUIdx == 0 )
     2644    {
     2645      for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++)
     2646        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2647      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2648        puhBaseLCU[uiCUAddr + uiCurrPartNumQ + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2649      for (UInt ui = 0; ui < (uiCurrPartNumQ + (uiCurrPartNumQ >> 2)); ui++)
     2650        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter;
     2651      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2652        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + uiCurrPartNumQ + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2653
     2654    }
     2655    else if ( uiPUIdx == 1 )
     2656    {
     2657      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2658        puhBaseLCU[uiCUAddr + ui] = uiParameter;
     2659      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2660        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2661      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2662        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + ui] = uiParameter;
     2663      for (UInt ui = 0; ui < (uiCurrPartNumQ >> 2); ui++)
     2664        puhBaseLCU[uiCUAddr + (uiCurrPartNumQ << 1) + (uiCurrPartNumQ >> 1) + ui] = uiParameter;
     2665
     2666    }
     2667    else
     2668    {
     2669      assert(0);
     2670    }
     2671    break;
     2672  default:
     2673    assert( 0 );
     2674  }
     2675
     2676}
     2677#endif
    25302678#if MTK_VSP_FIX_E0172
    25312679Void TComDataCU::setVSPDirSubParts ( Char iVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth )
     
    30073155  Int  iRefListIdY = 0;
    30083156  Int  i;
     3157#if MTK_VSP_FIX_ALIGN_WD_E0172
     3158  Int currViewId = m_pcSlice->getViewId();
     3159  Int derivedViewId = -1;
     3160  Int otherViewId = -1;
     3161#endif
    30093162#if MTK_VSP_FIX_E0172
    30103163  Int currViewId = m_pcSlice->getViewId();
     
    30223175        refViewAvailFlag = true;
    30233176        predFlag[iRefListIdX] = 1;
     3177#if MTK_VSP_FIX_ALIGN_WD_E0172
     3178        derivedViewId = m_pcSlice->getRefPic(eRefPicList, i)->getViewId();
     3179#endif
    30243180#if MTK_VSP_FIX_E0172
    30253181        vspDir[iCount] = iRefListIdX;
     
    30503206        refViewAvailFlag = true;
    30513207        predFlag[iRefListIdY] = 1;
    3052 #if MTK_VSP_FIX_E0172
     3208#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    30533209#if H_3D_BVSP_FIX
    30543210        TComMv  cMv = pDInfo->m_acNBDV;
     
    32053361#if H_3D_VSP
    32063362      , Int* vspFlag
     3363#if MTK_VSP_FIX_ALIGN_WD_E0172
     3364      , InheritedVSPDisInfo*  inheritedVSPDisInfo
     3365#endif
    32073366#if MTK_VSP_FIX_E0172
    32083367      , Int* vspDir
     
    32653424  cDisInfo.m_acNBDV = getDvInfo(uiAbsPartIdx).m_acNBDV;
    32663425  cDisInfo.m_aVIdxCan = getDvInfo(uiAbsPartIdx).m_aVIdxCan;
    3267 
     3426#if MTK_VSP_FIX_ALIGN_WD_E0172
     3427  for(Int i = 0; i < MRG_MAX_NUM_CANDS_MEM; i++)
     3428  {
     3429    inheritedVSPDisInfo[i].m_acDvInfo = cDisInfo;
     3430  }
     3431#endif
    32683432  if( m_pcSlice->getIsDepth())
    32693433  {
     
    34493613#if H_3D_VSP
    34503614      if (pcCULeft->getVSPFlag(uiLeftPartIdx) == 1)
    3451 #if MTK_VSP_FIX_E0172
     3615#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    34523616      {
    34533617#endif
    34543618        vspFlag[iCount] = 1;
     3619#if MTK_VSP_FIX_ALIGN_WD_E0172
     3620        xInheritVSPDisInfo(pcCULeft,uiLeftPartIdx,iCount,inheritedVSPDisInfo);
     3621      }
     3622#endif
    34553623#if MTK_VSP_FIX_E0172
    34563624        vspDir[iCount] = pcCULeft->getVSPDir( uiLeftPartIdx );
     
    35243692#if H_3D_VSP
    35253693      if (pcCUAbove->getVSPFlag(uiAbovePartIdx) == 1)
    3526 #if MTK_VSP_FIX_E0172
     3694#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    35273695      {
    35283696#endif
    35293697        vspFlag[iCount] = 1;
     3698#if MTK_VSP_FIX_ALIGN_WD_E0172
     3699        xInheritVSPDisInfo(pcCUAbove,uiAbovePartIdx,iCount,inheritedVSPDisInfo);
     3700      }
     3701#endif
    35303702#if MTK_VSP_FIX_E0172
    35313703        vspDir[iCount] = pcCUAbove->getVSPDir( uiAbovePartIdx );
     
    35773749#if H_3D_VSP
    35783750    if (pcCUAboveRight->getVSPFlag(uiAboveRightPartIdx) == 1)
    3579 #if MTK_VSP_FIX_E0172
     3751#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    35803752    {
    35813753#endif
    35823754      vspFlag[iCount] = 1;
     3755#if MTK_VSP_FIX_ALIGN_WD_E0172
     3756      xInheritVSPDisInfo(pcCUAboveRight,uiAboveRightPartIdx,iCount,inheritedVSPDisInfo);
     3757    }
     3758#endif
    35833759#if MTK_VSP_FIX_E0172
    35843760      vspDir[iCount] = pcCUAboveRight->getVSPDir( uiAboveRightPartIdx);
     
    36883864#if H_3D_VSP
    36893865    if (pcCULeftBottom->getVSPFlag(uiLeftBottomPartIdx) == 1)
    3690 #if MTK_VSP_FIX_E0172
     3866#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    36913867    {
    36923868#endif
    36933869      vspFlag[iCount] = 1;
     3870#if MTK_VSP_FIX_ALIGN_WD_E0172
     3871      xInheritVSPDisInfo(pcCULeftBottom,uiLeftBottomPartIdx,iCount,inheritedVSPDisInfo);
     3872    }
     3873#endif
    36943874#if MTK_VSP_FIX_E0172
    36953875      vspDir[iCount] = pcCULeftBottom->getVSPDir( uiLeftBottomPartIdx);
     
    37353915#if H_3D_VSP
    37363916      if (pcCUAboveLeft->getVSPFlag(uiAboveLeftPartIdx) == 1)
    3737 #if MTK_VSP_FIX_E0172
     3917#if MTK_VSP_FIX_E0172 || MTK_VSP_FIX_ALIGN_WD_E0172
    37383918      {
    37393919#endif
    37403920        vspFlag[iCount] = 1;
     3921#if MTK_VSP_FIX_ALIGN_WD_E0172
     3922        xInheritVSPDisInfo(pcCUAboveLeft,uiAboveLeftPartIdx,iCount,inheritedVSPDisInfo);
     3923      }
     3924#endif
    37413925#if MTK_VSP_FIX_E0172
    37423926        vspDir[iCount] = pcCUAboveLeft->getVSPDir( uiAboveLeftPartIdx);
     
    39514135  numValidMergeCand = uiArrayAddr;
    39524136}
    3953 
     4137#if MTK_VSP_FIX_ALIGN_WD_E0172
     4138inline Void TComDataCU::xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo*  inheritedVSPDisInfo)
     4139{
     4140  inheritedVSPDisInfo[iCount].m_acDvInfo.m_acNBDV   = pcCURef->getDvInfo(uiAbsPartIdx).m_acNBDV;
     4141  inheritedVSPDisInfo[iCount].m_acDvInfo.m_aVIdxCan = pcCURef->getDvInfo(uiAbsPartIdx).m_aVIdxCan;
     4142}
     4143#endif
    39544144/** Check whether the current PU and a spatial neighboring PU are in a same ME region.
    39554145 * \param xN, xN   location of the upper-left corner pixel of a neighboring PU
     
    55755765  }
    55765766}
     5767#if MTK_VSP_FIX_ALIGN_WD_E0172
     5768Void TComDataCU::setDvInfoSubParts( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth )
     5769{
     5770  setSubPartT<DisInfo>( cDvInfo, m_pDvInfo, uiAbsPartIdx, uiDepth, uiPUIdx );
     5771}
     5772#endif
    55775773#if MTK_NBDV_TN_FIX_E0172
    55785774Bool TComDataCU::xGetColDisMV( Int currCandPic, RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv , Int & iTargetViewIdx, Int & iStartViewIdx )
  • branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComDataCU.h

    r587 r596  
    435435  template <typename T>
    436436  Void          setSubPart            ( T bParameter, T* pbBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx );
    437 
     437#if MTK_VSP_FIX_ALIGN_WD_E0172
     438  template<typename T>
     439  Void          setSubPartT           ( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx );
     440#endif
    438441#if AMP_MRG
    439442  Void          setMergeAMP( Bool b )      { m_bIsMergeAMP = b; }
     
    461464#if H_3D_NBDV
    462465  Void          setDvInfoSubParts     ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiDepth );
     466#if MTK_VSP_FIX_ALIGN_WD_E0172
     467  Void          setDvInfoSubParts     ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth);
     468#endif
    463469  DisInfo*      getDvInfo             ()                        { return m_pDvInfo;                 }
    464470  DisInfo       getDvInfo             (UInt uiIdx)              { return m_pDvInfo[uiIdx];          }
     
    649655#if H_3D_VSP
    650656                                            , Int* vspFlag
     657#if MTK_VSP_FIX_ALIGN_WD_E0172
     658                                            , InheritedVSPDisInfo*  inheritedVSPDisInfo
     659#endif
    651660#if MTK_VSP_FIX_E0172
    652661                                            , Int* vspDir
     
    654663#endif
    655664                                            , Int& numValidMergeCand, Int mrgCandIdx = -1 );
     665#if MTK_VSP_FIX_ALIGN_WD_E0172
     666  inline Void xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount,  InheritedVSPDisInfo*  inheritedVSPDisInfo);
     667#endif
    656668#if H_3D_VSP
    657669  Char*         getVSPFlag        ()                        { return m_piVSPFlag;          }
  • branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComMotionInfo.h

    r478 r596  
    7676  Bool   m_bFound;                               
    7777} IDVInfo;
     78#endif
     79#if MTK_VSP_FIX_ALIGN_WD_E0172
     80typedef struct _InheritedVSPDisCand
     81{
     82  DisInfo m_acDvInfo;
     83} InheritedVSPDisInfo;
    7884#endif
    7985// ====================================================================================================================
  • branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TComPrediction.cpp

    r578 r596  
    729729
    730730  // Do compensation
    731 #if MTK_VSP_FIX_E0172
     731#if MTK_VSP_FIX_ALIGN_WD_E0172
     732  TComMv cDv  = pcCU->getDvInfo(uiPartAddr).m_acNBDV;
     733#else
     734#if MTK_VSP_FIX_E0172
    732735  TComMv cDv  = pcCU->getCUMvField( privateRefPicList )->getMv( uiPartAddr );
    733736#else
    734737  TComMv cDv  = pcCU->getCUMvField( eRefPicList )->getMv( uiPartAddr ); // cDv is the disparity vector derived from the neighbors
    735738#endif
     739#endif // end of MTK_VSP_FIX_ALIGN_WD_E0172
    736740  pcCU->clipMv(cDv);
    737741
  • branches/HTM-DEV-2.0-dev1-Fix/source/Lib/TLibCommon/TypeDef.h

    r593 r596  
    106106#if MTK_RVS_BUGFIX_E0172
    107107#define MTK_DVMCP_FIX_E0172                  1 // fix the mismatch between software and WD for DV derivation from DVMCP blocks, issue 2 in JCT3V-E0172
     108#define MTK_VSP_FIX_ALIGN_WD_E0172           1 // fix the issues related to VSP merge candidate, issue 3, 4 in JCT3V-E0172, using an implementation aligned with WD
     109#if !MTK_VSP_FIX_ALIGN_WD_E0172
    108110#define MTK_VSP_FIX_E0172                    1 // fix the issues related to VSP merge candidate, issue 3, 4 in JCT3V-E0172
     111#endif
    109112#define MTK_DIVMC_FIX_E0172                  1 // fix the issue of derivation of disparity inter-view merge candidate, issue 5 in JCT3V-E0172
    110113#define MTK_NBDV_TN_FIX_E0172                1 // fix the issue of DV derivation from the temporal neighboring blocks, issue 7 in JCT3V-E0172
Note: See TracChangeset for help on using the changeset viewer.