Ignore:
Timestamp:
18 May 2012, 09:38:25 (12 years ago)
Author:
lg
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-3.0-LG/source/Lib/TLibCommon/TComDataCU.cpp

    r56 r62  
    28832883}
    28842884
     2885#if LG_RESTRICTEDRESPRED_M24766
     2886Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx, Bool bLCU)
     2887{
     2888        UInt uiNumPartition  = bLCU ? (getWidth(uiAbsPartIdx)*getHeight(uiAbsPartIdx) >> 4) : m_uiNumPartition;
     2889        UInt uiTmpAbsPartIdx = bLCU ? uiAbsPartIdx : 0;
     2890
     2891        switch ( m_pePartSize[uiTmpAbsPartIdx] )
     2892        {
     2893        case SIZE_2NxN:
     2894                riWidth = getWidth(uiTmpAbsPartIdx);      riHeight = getHeight(uiTmpAbsPartIdx) >> 1; ruiPartAddr = ( uiPartIdx == 0 )? 0 : uiNumPartition >> 1;
     2895                break;
     2896        case SIZE_Nx2N:
     2897                riWidth = getWidth(uiTmpAbsPartIdx) >> 1; riHeight = getHeight(uiTmpAbsPartIdx);      ruiPartAddr = ( uiPartIdx == 0 )? 0 : uiNumPartition >> 2;
     2898                break;
     2899        case SIZE_NxN:
     2900                riWidth = getWidth(uiTmpAbsPartIdx) >> 1; riHeight = getHeight(uiTmpAbsPartIdx) >> 1; ruiPartAddr = ( uiNumPartition >> 2 ) * uiPartIdx;
     2901                break;
     2902        case SIZE_2NxnU:
     2903                riWidth     = getWidth(uiTmpAbsPartIdx);
     2904                riHeight    = ( uiPartIdx == 0 ) ?  getHeight(uiTmpAbsPartIdx) >> 2 : ( getHeight(uiTmpAbsPartIdx) >> 2 ) + ( getHeight(uiTmpAbsPartIdx) >> 1 );
     2905                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : uiNumPartition >> 3;
     2906                break;
     2907        case SIZE_2NxnD:
     2908                riWidth     = getWidth(uiTmpAbsPartIdx);
     2909                riHeight    = ( uiPartIdx == 0 ) ?  ( getHeight(uiTmpAbsPartIdx) >> 2 ) + ( getHeight(uiTmpAbsPartIdx) >> 1 ) : getHeight(uiTmpAbsPartIdx) >> 2;
     2910                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : (uiNumPartition >> 1) + (uiNumPartition >> 3);
     2911                break;
     2912        case SIZE_nLx2N:
     2913                riWidth     = ( uiPartIdx == 0 ) ? getWidth(uiTmpAbsPartIdx) >> 2 : ( getWidth(uiTmpAbsPartIdx) >> 2 ) + ( getWidth(uiTmpAbsPartIdx) >> 1 );
     2914                riHeight    = getHeight(uiTmpAbsPartIdx);
     2915                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : uiNumPartition >> 4;
     2916                break;
     2917        case SIZE_nRx2N:
     2918                riWidth     = ( uiPartIdx == 0 ) ? ( getWidth(uiTmpAbsPartIdx) >> 2 ) + ( getWidth(uiTmpAbsPartIdx) >> 1 ) : getWidth(uiTmpAbsPartIdx) >> 2;
     2919                riHeight    = getHeight(uiTmpAbsPartIdx);
     2920                ruiPartAddr = ( uiPartIdx == 0 ) ? 0 : (uiNumPartition >> 2) + (uiNumPartition >> 4);
     2921                break;
     2922        default:
     2923                assert ( m_pePartSize[0] == SIZE_2Nx2N );
     2924                riWidth = getWidth(uiTmpAbsPartIdx);      riHeight = getHeight(uiTmpAbsPartIdx);      ruiPartAddr = 0;
     2925                break;
     2926        }
     2927}
     2928#else
    28852929Void TComDataCU::getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight )
    28862930{
     
    29222966  }
    29232967}
    2924 
     2968#endif
     2969
     2970#if LG_RESTRICTEDRESPRED_M24766
     2971Int TComDataCU::getResiPredMode(UInt uiPartAddr)
     2972{
     2973        Int iAddResiShift = -1;
     2974
     2975        for(UInt uiRefIdx = 0; uiRefIdx < 2; uiRefIdx++)
     2976        {
     2977                RefPicList eRefList = uiRefIdx ? REF_PIC_LIST_1 : REF_PIC_LIST_0;
     2978                Int iBestRefIdx = getCUMvField(eRefList)->getRefIdx(uiPartAddr);
     2979                if(iBestRefIdx >= 0 && getSlice()->getViewId() == getSlice()->getRefViewId(eRefList, iBestRefIdx))
     2980                        iAddResiShift++;
     2981        }
     2982
     2983        return iAddResiShift;
     2984}
     2985
     2986Void TComDataCU::getPUResiPredShift(Int *iPUResiPredShift, UInt uiAbsPartIndex)
     2987{
     2988        UInt uiPartSize = getPartitionSize(uiAbsPartIndex);
     2989        UInt uiPartAddr;
     2990        Int iWidth, iHeight;
     2991        Int iAddResiShift;
     2992
     2993        if(uiPartSize == SIZE_2Nx2N)
     2994        {
     2995                iAddResiShift = getResiPredMode(uiAbsPartIndex);
     2996                for(UInt i = 0; i < 4; i++)
     2997                        iPUResiPredShift[i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiAbsPartIndex) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     2998                return;
     2999        }
     3000
     3001        if(uiPartSize == SIZE_2NxN || uiPartSize == SIZE_2NxnU || uiPartSize == SIZE_2NxnD)
     3002        {
     3003                for(UInt i = 0; i < 2; i++)
     3004                {
     3005                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3006                        uiPartAddr += uiAbsPartIndex;
     3007                        iAddResiShift = getResiPredMode(uiPartAddr);
     3008                        iPUResiPredShift[2*i] = iPUResiPredShift[2*i+1] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3009                }
     3010                return;
     3011        }
     3012
     3013        if(uiPartSize == SIZE_Nx2N || uiPartSize == SIZE_nLx2N || uiPartSize == SIZE_nRx2N)
     3014        {
     3015                for(UInt i = 0; i < 2; i++)
     3016                {
     3017                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3018                        uiPartAddr += uiAbsPartIndex;
     3019                        iAddResiShift = getResiPredMode(uiPartAddr);
     3020                        iPUResiPredShift[i] = iPUResiPredShift[2+i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3021                }
     3022                return;
     3023        }
     3024
     3025        if(uiPartSize == SIZE_NxN)
     3026        {
     3027                for(UInt i = 0; i < 4; i++)
     3028                {
     3029                        getPartIndexAndSize(i, uiPartAddr, iWidth, iHeight, uiAbsPartIndex, true);
     3030                        uiPartAddr += uiAbsPartIndex;
     3031                        iAddResiShift = getResiPredMode(uiPartAddr);
     3032                        iPUResiPredShift[i] = (getSlice()->getPPS()->getUseWP() || getInterDir(uiPartAddr) != 3) ? (iAddResiShift >= 0 ? 0 : -1) : (iAddResiShift >= 0 ? 1-iAddResiShift : -1);
     3033                }
     3034        }
     3035
     3036}
     3037#endif
    29253038
    29263039Void TComDataCU::getMvField ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField )
Note: See TracChangeset for help on using the changeset viewer.