Changeset 608 in 3DVCSoftware for trunk/source/Lib/TLibCommon/TComDataCU.h


Ignore:
Timestamp:
1 Sep 2013, 22:47:26 (11 years ago)
Author:
tech
Message:

Merged DEV-2.0-dev0@604.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibCommon/TComDataCU.h

    r443 r608  
    44 * granted under this license. 
    55 *
    6  * Copyright (c) 2010-2012, ITU/ISO/IEC
     6 * Copyright (c) 2010-2013, ITU/ISO/IEC
    77 * All rights reserved.
    88 *
     
    4949#include "TComPattern.h"
    5050
    51 #if H3D_IVRP
     51#if H_3D_ARP
    5252#include "TComYuv.h"
    5353#endif
     
    128128  UChar*        m_puhDepth;           ///< array of depths
    129129  Int           m_unitSize;           ///< size of a "minimum partition"
    130 #if HHI_MPI
    131   Int*          m_piTextureModeDepth; ///< at which depth are prediction data inherited from texture picture ( -1 : none )
    132 #endif
    133130 
    134131  // -------------------------------------------------------------------------------------------------------------------
    135132  // CU data
    136133  // -------------------------------------------------------------------------------------------------------------------
    137  
     134  Bool*         m_skipFlag;           ///< array of skip flags
    138135  Char*         m_pePartSize;         ///< array of partition sizes
    139 #if HHI_INTERVIEW_SKIP
    140   Bool*         m_pbRenderable;        ///< array of merge flags
    141 #endif
    142136  Char*         m_pePredMode;         ///< array of prediction modes
     137  Bool*         m_CUTransquantBypass;   ///< array of cu_transquant_bypass flags
    143138  Char*         m_phQP;               ///< array of QP values
    144139  UChar*        m_puhTrIdx;           ///< array of transform indices
    145   UChar*        m_nsqtPartIdx;        ///< array of absPartIdx mapping table, map zigzag to NSQT
     140  UChar*        m_puhTransformSkip[3];///< array of transform skipping flags
    146141  UChar*        m_puhCbf[3];          ///< array of coded block flags (CBF)
    147142  TComCUMvField m_acCUMvField[2];     ///< array of motion vectors
     
    158153  static Int*   m_pcGlbArlCoeffCb;    ///< ARL coefficient buffer (Cb)
    159154  static Int*   m_pcGlbArlCoeffCr;    ///< ARL coefficient buffer (Cr)
    160 
    161155#endif
    162156 
     
    187181 
    188182  Bool*         m_pbMergeFlag;        ///< array of merge flags
    189 #if LGE_ILLUCOMP_B0045
    190   Bool*         m_pbICFlag;           ///< array of IC flags
    191 #endif
    192183  UChar*        m_puhMergeIndex;      ///< array of merge candidate indices
    193 #if MERL_VSP_C0152
    194   Char*         m_piVSPIndex;         ///< array of VSP flags to indicate the current block uses synthetic predictor or not
    195                                       ///< value 0: non-VSP, value 1: VSP
    196 #endif
    197 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    198   Char*         m_piVSPDir;           ///< 0: LIST0; 1: LIST1
    199 #endif
    200184#if AMP_MRG
    201185  Bool          m_bIsMergeAMP;
     
    206190  Char*         m_apiMVPIdx[2];       ///< array of motion vector predictor candidates
    207191  Char*         m_apiMVPNum[2];       ///< array of number of possible motion vectors predictors
    208   Bool*         m_puiAlfCtrlFlag;     ///< array of ALF flags
    209   Bool*         m_puiTmpAlfCtrlFlag;  ///< temporal array of ALF flags
    210  
    211192  Bool*         m_pbIPCMFlag;         ///< array of intra_pcm flags
    212 
    213   Int           m_numSucIPCM;         ///< the number of succesive IPCM blocks associated with the current log2CUSize
    214   Bool          m_lastCUSucIPCMFlag;  ///< True indicates that the last CU is IPCM and shares the same root as the current CU. 
    215 #if H3D_IVRP
    216   Bool*         m_pbResPredAvailable; ///< array of residual prediction available flags
    217   Bool*         m_pbResPredFlag;      ///< array of residual prediction flags
    218 #endif
    219 #if QC_ARP_D0177
     193#if H_3D_NBDV
     194  DisInfo*      m_pDvInfo;
     195#endif
     196#if H_3D_VSP
     197  Char*         m_piVSPFlag;          ///< array of VSP flags to indicate whehter a block uses VSP or not
     198                                      ///< 0: non-VSP; 1: VSP
     199#if MTK_VSP_FIX_E0172
     200  Char*         m_piVSPDir;           ///< 0: LIST0; 1: LIST1
     201#endif
     202#endif
     203#if H_3D_ARP
    220204  UChar*        m_puhARPW;
    221205#endif
    222 #if LGE_EDGE_INTRA_A0070
     206#if H_3D_IC
     207  Bool*         m_pbICFlag;           ///< array of IC flags
     208#endif
     209#if H_3D_DIM
     210  Pel*          m_dimDeltaDC[DIM_NUM_TYPE][2];
     211#if H_3D_DIM_DMM
     212  UInt*         m_dmmWedgeTabIdx[DMM_NUM_TYPE];
     213#if !SEC_DMM2_E0146
     214  Int*          m_dmm2DeltaEnd;
     215#endif
     216  UInt*         m_dmm3IntraTabIdx;
     217#endif
     218#if H_3D_DIM_RBC
    223219  UChar*        m_pucEdgeCode;          ///< array of edge code
    224220  UChar*        m_pucEdgeNumber;        ///< total number of edge
     
    226222  Bool*         m_pbEdgeLeftFirst;      ///< true if edge should be checked in left boundary first
    227223  Bool*         m_pbEdgePartition;      ///< true if it belongs to region 1, otherwise, region 0
    228 #if LGE_EDGE_INTRA_DELTA_DC
    229   Int*          m_piEdgeDeltaDC0;
    230   Int*          m_piEdgeDeltaDC1;
    231 #endif
     224#endif
     225#if H_3D_DIM_SDC
     226  Bool*         m_pbSDCFlag;
     227  Pel*          m_apSegmentDCOffset[2];
     228#endif
     229#endif
     230#if LGE_INTER_SDC_E0156
     231  Bool*         m_pbInterSDCFlag;
     232  Int*          m_apSegmentInterDCOffset[4];
     233  UChar*        m_pucInterSDCMask;
    232234#endif
    233235
     
    238240  Bool          m_bDecSubCu;          ///< indicates decoder-mode
    239241  Double        m_dTotalCost;         ///< sum of partition RD costs
     242#if H_3D_VSO
    240243  Dist          m_uiTotalDistortion;  ///< sum of partition distortion
     244#else
     245  UInt          m_uiTotalDistortion;  ///< sum of partition distortion
     246#endif
    241247  UInt          m_uiTotalBits;        ///< sum of partition bits
    242248  UInt          m_uiTotalBins;       ///< sum of partition bins
    243   UInt*         m_uiSliceStartCU;    ///< Start CU address of current slice
    244   UInt*         m_uiEntropySliceStartCU; ///< Start CU address of current slice
    245  
    246   // -------------------------------------------------------------------------------------------------------------------
    247   // depth model mode data
    248   // -------------------------------------------------------------------------------------------------------------------
    249 #if HHI_DMM_WEDGE_INTRA
    250   UInt*         m_puiWedgeFullTabIdx;
    251   Int*          m_piWedgeFullDeltaDC1;
    252   Int*          m_piWedgeFullDeltaDC2;
    253 
    254   UInt*         m_puiWedgePredDirTabIdx;
    255   Int*          m_piWedgePredDirDeltaDC1;
    256   Int*          m_piWedgePredDirDeltaDC2;
    257   Int*          m_piWedgePredDirDeltaEnd;
    258 #endif
    259 #if HHI_DMM_PRED_TEX
    260   UInt*         m_puiWedgePredTexTabIdx;
    261 #if LGE_DMM3_SIMP_C0044
    262   UInt*         m_puiWedgePredTexIntraTabIdx;
    263 #endif
    264   Int*          m_piWedgePredTexDeltaDC1;
    265   Int*          m_piWedgePredTexDeltaDC2;
    266 
    267   Int*          m_piContourPredTexDeltaDC1;
    268   Int*          m_piContourPredTexDeltaDC2;
    269 #endif
    270  
    271 #if RWTH_SDC_DLT_B0036
    272   Bool*         m_pbSDCFlag;
    273   Pel*          m_apSegmentDCOffset[2];
    274 #endif
    275 #if QC_CU_NBDV_D0181
    276   DisInfo*      m_pDvInfo;
    277 #endif
     249  UInt*         m_sliceStartCU;    ///< Start CU address of current slice
     250  UInt*         m_sliceSegmentStartCU; ///< Start CU address of current slice
     251  Char          m_codedQP;
    278252protected:
    279253 
     
    281255  Bool          xAddMVPCand           ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir );
    282256  Bool          xAddMVPCandOrder      ( AMVPInfo* pInfo, RefPicList eRefPicList, Int iRefIdx, UInt uiPartUnitIdx, MVP_DIR eDir );
    283 #if MERL_VSP_C0152
    284   inline Bool   xAddVspMergeCand      (
    285  UChar ucVspMergePos,
    286 #if !LGE_VSP_INHERIT_D0092
    287  Int vspIdx,
    288  Bool* bVspMvZeroDone,
    289 #endif
    290  UInt uiDepth,
    291  Bool* abCandIsInter,
    292  Int& iCount,
    293  UChar* puhInterDirNeighbours,
    294  TComMvField* pcMvFieldNeighbours,
    295  Int* iVSPIndexTrue,
    296  Int mrgCandIdx,
    297  DisInfo* pDisInfo
    298 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    299  , Int*   iVspDirTrue = NULL
    300 #endif
    301                                         );
    302   inline Void   xInheritVspMode       ( TComDataCU* pcCURef, UInt uiIdx, Bool* bVspMvZeroDone, Int iCount, Int* iVSPIndexTrue, TComMvField* pcMvFieldNeighbours, DisInfo* pDInfo
    303 #if QC_BVSP_CleanUP_D0191
    304    ,UChar *puhInterDirNeighbours
    305 #endif
    306 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    307                                       , Int *iVSPDirTrue
    308 #endif
    309     ) ;
    310 #endif
    311   Void          deriveRightBottomIdx        ( PartSize eCUMode, UInt uiPartIdx, UInt& ruiPartIdxRB );
     257#if H_3D_VSP
     258#if MTK_VSP_FIX_E0172
     259  Bool          xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount,
     260                             Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag, Int* vspDir );
     261#else
     262  Bool          xAddVspCand( UChar ucVspMergePos, Int mrgCandIdx, DisInfo* pDInfo, Int& iCount,
     263                             Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int* vspFlag );
     264#endif
     265#endif
     266#if QC_INRIA_MTK_MRG_E0126
     267  Bool          xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Bool* abCandIsInter, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, Int*   iPdmDir, TComMv* acPdmMv,
     268                               Int* aiPdmRefIdx, Int iPosDmv, Int* vspFlag );
     269  Bool          xFirstDmvAvai( Int& iCount, TComMvField* pcMvFieldNeighbours, Int*  iPdmDir, Int iPosDmv, Int* vspFlag, Int& iFirDispCand );
     270#endif
     271
     272  Void          deriveRightBottomIdx        ( UInt uiPartIdx, UInt& ruiPartIdxRB );
    312273  Bool          xGetColMVP( RefPicList eRefPicList, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int& riRefIdx
    313 #if QC_TMVP_MRG_REFIDX_C0047
     274#if H_3D_TMVP
    314275  ,
    315   Bool bMRG = 0
     276  Bool bMRG = true
    316277#endif
    317278  );
    318 #if H3D_NBDV
    319   Void          xDeriveRightBottomNbIdx( PartSize eCUMode, UInt uiPartIdx, Int &uiLCUIdxRBNb, Int &uiPartIdxRBNb );
    320   Bool          xCheckSpatialNBDV( TComDataCU* pcTmpCU, UInt uiIdx, UInt uiPartIdx, UInt uiPartAddr, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, McpDisInfo* paMvpDvInfo, UInt uiMvpDvPos, Bool bDepthRefine );
    321   Bool          xGetColDisMV( RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int & iTargetViewIdx, Int & iStartViewIdx );
    322 #endif
    323  
    324 
    325   Void xCheckCornerCand( TComDataCU* pcCorner, UInt uiCornerIdx, UInt uiIter, Bool& rbValidCand );
     279 
    326280  /// compute required bits to encode MVD (used in AMVP)
    327281  UInt          xGetMvdBits           ( TComMv cMvd );
     
    329283 
    330284  /// compute scaling factor from POC difference
    331 #if !QC_ARP_D0177
     285#if !H_3D_ARP
    332286  Int           xGetDistScaleFactor   ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC );
    333287#endif
    334   Void xDeriveCenterIdx( PartSize eCUMode, UInt uiPartIdx, UInt& ruiPartIdxCenter );
    335   Bool xGetCenterCol( UInt uiPartIdx, RefPicList eRefPicList, int iRefIdx, TComMv *pcMv );
    336  
    337   Void xCheckDuplicateCand(TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours, bool* pbCandIsInter, UInt& ruiArrayAddr);
    338 
     288
     289  Void xDeriveCenterIdx( UInt uiPartIdx, UInt& ruiPartIdxCenter );
    339290
    340291public:
     
    345296  // create / destroy / initialize / copy
    346297  // -------------------------------------------------------------------------------------------------------------------
    347 #if QC_ARP_D0177
     298#if H_3D_ARP
    348299  Int           xGetDistScaleFactor   ( Int iCurrPOC, Int iCurrRefPOC, Int iColPOC, Int iColRefPOC );
    349 #endif 
    350 
     300#endif
    351301  Void          create                ( UInt uiNumPartition, UInt uiWidth, UInt uiHeight, Bool bDecSubCu, Int unitSize
    352302#if ADAPTIVE_QP_SELECTION
     
    360310  Void          initSubCU             ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth, Int qp );
    361311  Void          setOutsideCUPart      ( UInt uiAbsPartIdx, UInt uiDepth );
    362 #if QC_CU_NBDV_D0181
     312#if H_3D_NBDV
    363313  Void          copyDVInfoFrom (TComDataCU* pcCU, UInt uiAbsPartIdx);
    364314#endif
    365315  Void          copySubCU             ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth );
    366   Void          copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList 
    367 #if QC_CU_NBDV_D0181
     316  Void          copyInterPredInfoFrom ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList
     317#if H_3D_NBDV
    368318  , Bool bNBDV = false
    369319#endif
    370320  );
    371   Void          copyPartFrom          ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth
    372 #if QC_ARP_D0177
    373       ,
    374       Bool bRP = false
    375 #endif
    376   );
     321  Void          copyPartFrom          ( TComDataCU* pcCU, UInt uiPartUnitIdx, UInt uiDepth );
    377322 
    378323  Void          copyToPic             ( UChar uiDepth );
     
    397342 
    398343  Void          setDepthSubParts      ( UInt uiDepth, UInt uiAbsPartIdx );
     344#if H_3D
    399345  Void          getPosInPic           ( UInt uiAbsPartIndex, Int& riPosX, Int& riPosY );
    400 #if HHI_MPI
    401   Int*          getTextureModeDepth   ()                        { return m_piTextureModeDepth; }
    402   Int           getTextureModeDepth   ( UInt uiIdx )            { return m_piTextureModeDepth[uiIdx]; }
    403   Void          setTextureModeDepth   ( UInt uiIdx, Int iTextureModeDepth ){ m_piTextureModeDepth[uiIdx] = iTextureModeDepth; }
    404   Void          setTextureModeDepthSubParts( Int iTextureModeDepth, UInt uiAbsPartIdx, UInt uiDepth );
    405   Void          copyTextureMotionDataFrom( TComDataCU* pcCU, UInt uiDepth, UInt uiAbsPartIdxSrc, UInt uiAbsPartIdxDst = 0 );
    406 #endif
    407 
    408    // -------------------------------------------------------------------------------------------------------------------
     346#endif
     347 
     348  // -------------------------------------------------------------------------------------------------------------------
    409349  // member functions for CU data
    410350  // -------------------------------------------------------------------------------------------------------------------
     
    414354  Void          setPartitionSize      ( UInt uiIdx, PartSize uh){ m_pePartSize[uiIdx] = uh;   }
    415355  Void          setPartSizeSubParts   ( PartSize eMode, UInt uiAbsPartIdx, UInt uiDepth );
    416  
    417 #if HHI_INTERVIEW_SKIP
    418   Bool*         getRenderable          ()                        { return m_pbRenderable;               }
    419     Bool          getRenderable          ( UInt uiIdx )            { return m_pbRenderable[uiIdx];        }
    420     Void          setRenderable          ( UInt uiIdx, Bool b )    { m_pbRenderable[uiIdx] = b;           }
    421     Void          setRenderableSubParts  ( Bool bRenderable, UInt uiAbsPartIdx, UInt uiDepth );
    422 #endif
    423  
     356  Void          setCUTransquantBypassSubParts( Bool flag, UInt uiAbsPartIdx, UInt uiDepth );
     357 
     358  Bool*        getSkipFlag            ()                        { return m_skipFlag;          }
     359  Bool         getSkipFlag            (UInt idx)                { return m_skipFlag[idx];     }
     360  Void         setSkipFlag           ( UInt idx, Bool skip)     { m_skipFlag[idx] = skip;   }
     361  Void         setSkipFlagSubParts   ( Bool skip, UInt absPartIdx, UInt depth );
     362
    424363  Char*         getPredictionMode     ()                        { return m_pePredMode;        }
    425364  PredMode      getPredictionMode     ( UInt uiIdx )            { return static_cast<PredMode>( m_pePredMode[uiIdx] ); }
     365  Bool*         getCUTransquantBypass ()                        { return m_CUTransquantBypass;        }
     366  Bool          getCUTransquantBypass( UInt uiIdx )             { return m_CUTransquantBypass[uiIdx]; }
    426367  Void          setPredictionMode     ( UInt uiIdx, PredMode uh){ m_pePredMode[uiIdx] = uh;   }
    427368  Void          setPredModeSubParts   ( PredMode eMode, UInt uiAbsPartIdx, UInt uiDepth );
     
    443384  Int           getLastValidPartIdx   ( Int iAbsPartIdx );
    444385  Char          getLastCodedQP        ( UInt uiAbsPartIdx );
    445 
    446 #if LOSSLESS_CODING
     386  Void          setQPSubCUs           ( Int qp, TComDataCU* pcCU, UInt absPartIdx, UInt depth, Bool &foundNonZeroCbf );
     387  Void          setCodedQP            ( Char qp )               { m_codedQP = qp;             }
     388  Char          getCodedQP            ()                        { return m_codedQP;           }
     389
    447390  Bool          isLosslessCoded(UInt absPartIdx);
    448 #endif
    449   UChar*        getNSQTPartIdx        ()                        { return m_nsqtPartIdx;        }
    450   UChar         getNSQTPartIdx        ( UInt idx )              { return m_nsqtPartIdx[idx];   }
    451   Void          setNSQTIdxSubParts    ( UInt absPartIdx, UInt depth );
    452   Void          setNSQTIdxSubParts    ( UInt log2TrafoSize, UInt absPartIdx, UInt absTUPartIdx, UInt trMode );
    453391 
    454392  UChar*        getTransformIdx       ()                        { return m_puhTrIdx;          }
    455393  UChar         getTransformIdx       ( UInt uiIdx )            { return m_puhTrIdx[uiIdx];   }
    456394  Void          setTrIdxSubParts      ( UInt uiTrIdx, UInt uiAbsPartIdx, UInt uiDepth );
    457  
     395
     396  UChar*        getTransformSkip      ( TextType eType)    { return m_puhTransformSkip[g_aucConvertTxtTypeToIdx[eType]];}
     397  UChar         getTransformSkip      ( UInt uiIdx,TextType eType)    { return m_puhTransformSkip[g_aucConvertTxtTypeToIdx[eType]][uiIdx];}
     398  Void          setTransformSkipSubParts  ( UInt useTransformSkip, TextType eType, UInt uiAbsPartIdx, UInt uiDepth);
     399  Void          setTransformSkipSubParts  ( UInt useTransformSkipY, UInt useTransformSkipU, UInt useTransformSkipV, UInt uiAbsPartIdx, UInt uiDepth );
     400
    458401  UInt          getQuadtreeTULog2MinSizeInCU( UInt absPartIdx );
    459402 
     
    497440  Void          setMergeIndex         ( UInt uiIdx, UInt uiMergeIndex ) { m_puhMergeIndex[uiIdx] = uiMergeIndex;  }
    498441  Void          setMergeIndexSubParts ( UInt uiMergeIndex, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    499 
    500 #if MERL_VSP_C0152
    501   Char*         getVSPIndex        ()                        { return m_piVSPIndex;        }
    502   Char          getVSPIndex        ( UInt uiIdx )            { return m_piVSPIndex[uiIdx]; }
    503   Void          setVSPIndex        ( UInt uiIdx, Int n )     { m_piVSPIndex[uiIdx] = n;    }
    504   Void          setVSPIndexSubParts( Char bVSPIndex, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    505 #endif
    506 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    507   Char*         getVSPDir          ()                        { return m_piVSPDir;                           }
    508   Char          getVSPDir          ( UInt uiIdx )            { return m_piVSPDir[uiIdx];                  }
    509   Void          setVSPDir          ( UInt uiIdx, Int n )     { m_piVSPDir[uiIdx] = n;  }
    510   Void          setVSPDirSubParts  ( Char bVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    511   Bool          getRefListAndRefFrmIdx(Int targetRefViewIdx, RefPicList& eRefPicList, Int& refFrmIdx);
    512 #endif
    513 
    514442  template <typename T>
    515443  Void          setSubPart            ( T bParameter, T* pbBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx );
    516 
    517 #if LGE_ILLUCOMP_B0045
    518   Bool*         getICFlag             ()                        { return m_pbICFlag;               }
    519   Bool          getICFlag             ( UInt uiIdx )            { return m_pbICFlag[uiIdx];        }
    520   Void          setICFlag             ( UInt uiIdx, Bool  uh )  { m_pbICFlag[uiIdx] = uh;          }
    521   Void          setICFlagSubParts     ( Bool bICFlag,  UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    522 #if LGE_ILLUCOMP_DEPTH_C0046
    523   Bool          isICFlagRequired      (UInt uiAbsPartIdx, UInt uiDepth); //This modification is not needed after integrating JCT3V-C0137
    524 #else
    525   Bool          isICFlagRequired      (UInt uiAbsPartIdx);
    526 #endif
    527 #endif
    528 #if QC_CU_NBDV_D0181
    529   DisInfo*      getDvInfo             ()                        { return m_pDvInfo;                }
    530   DisInfo       getDvInfo             (UInt uiIdx)              { return m_pDvInfo[uiIdx];         }
    531   Void          setDvInfoSubParts( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiDepth );
    532 #endif
    533 
     444#if MTK_VSP_FIX_ALIGN_WD_E0172
     445  template<typename T>
     446  Void          setSubPartT           ( T uiParameter, T* puhBaseLCU, UInt uiCUAddr, UInt uiCUDepth, UInt uiPUIdx );
     447#endif
    534448#if AMP_MRG
    535449  Void          setMergeAMP( Bool b )      { m_bIsMergeAMP = b; }
     
    551465  Void          setInterDir           ( UInt uiIdx, UChar  uh ) { m_puhInterDir[uiIdx] = uh;          }
    552466  Void          setInterDirSubParts   ( UInt uiDir,  UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    553  
    554   Bool*         getAlfCtrlFlag        ()                        { return m_puiAlfCtrlFlag;            }
    555   Bool          getAlfCtrlFlag        ( UInt uiIdx )            { return m_puiAlfCtrlFlag[uiIdx];     }
    556   Void          setAlfCtrlFlag        ( UInt uiIdx, Bool uiFlag){ m_puiAlfCtrlFlag[uiIdx] = uiFlag;   }
    557   Void          setAlfCtrlFlagSubParts( Bool uiFlag, UInt uiAbsPartIdx, UInt uiDepth );
    558  
    559   Void          createTmpAlfCtrlFlag  ();
    560   Void          destroyTmpAlfCtrlFlag ();
    561   Void          copyAlfCtrlFlagToTmp  ();
    562   Void          copyAlfCtrlFlagFromTmp();
    563  
    564467  Bool*         getIPCMFlag           ()                        { return m_pbIPCMFlag;               }
    565468  Bool          getIPCMFlag           (UInt uiIdx )             { return m_pbIPCMFlag[uiIdx];        }
    566469  Void          setIPCMFlag           (UInt uiIdx, Bool b )     { m_pbIPCMFlag[uiIdx] = b;           }
    567470  Void          setIPCMFlagSubParts   (Bool bIpcmFlag, UInt uiAbsPartIdx, UInt uiDepth);
    568 
    569   Int           getNumSucIPCM         ()                        { return m_numSucIPCM;             }
    570   Void          setNumSucIPCM         ( Int num )               { m_numSucIPCM = num;              }
    571   Bool          getLastCUSucIPCMFlag  ()                        { return m_lastCUSucIPCMFlag;        }
    572   Void          setLastCUSucIPCMFlag  ( Bool flg )              { m_lastCUSucIPCMFlag = flg;         }
    573 
     471#if H_3D_NBDV
     472  Void          setDvInfoSubParts     ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiDepth );
     473#if MTK_VSP_FIX_ALIGN_WD_E0172
     474  Void          setDvInfoSubParts     ( DisInfo cDvInfo, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth);
     475#endif
     476  DisInfo*      getDvInfo             ()                        { return m_pDvInfo;                 }
     477  DisInfo       getDvInfo             (UInt uiIdx)              { return m_pDvInfo[uiIdx];          }
     478#endif
    574479  /// get slice ID for SU
    575480  Int           getSUSliceID          (UInt uiIdx)              {return m_piSliceSUMap[uiIdx];      }
     
    583488  std::vector<NDBFBlockInfo>* getNDBFilterBlocks()      {return &m_vNDFBlock;}
    584489  Void setNDBFilterBlockBorderAvailability(UInt numLCUInPicWidth, UInt numLCUInPicHeight, UInt numSUInLCUWidth, UInt numSUInLCUHeight, UInt picWidth, UInt picHeight
    585                                           ,Bool bIndependentSliceBoundaryEnabled
     490                                          ,std::vector<Bool>& LFCrossSliceBoundary
    586491                                          ,Bool bTopTileBoundary, Bool bDownTileBoundary, Bool bLeftTileBoundary, Bool bRightTileBoundary
    587492                                          ,Bool bIndependentTileBoundaryEnabled );
    588 
    589 #if H3D_IVMP
    590 #if !H3D_NBDV
    591   Int           getPdmMergeCandidate      ( UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv );
    592   Bool          getPdmMvPred              ( UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMv, Bool bMerge = false );
    593 #else //!H3D_NBDV
    594   Bool          getUnifiedMvPredCan       ( UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* iPdm, Bool bMerge );
    595   Void          getDisMvpCand        ( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo );
    596 #if QC_CU_NBDV_D0181
    597   Bool          getDisMvpCandNBDV( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo , Bool bParMerg = false
     493#if H_3D_NBDV
     494  Void          xDeriveRightBottomNbIdx(Int &uiLCUIdxRBNb, Int &uiPartIdxRBNb );
     495  Bool          xCheckSpatialNBDV (TComDataCU* pcTmpCU, UInt uiIdx, DisInfo* pNbDvInfo, Bool bSearchForMvpDv, IDVInfo* paMvpDvInfo,
     496                                   UInt uiMvpDvPos
     497#if H_3D_NBDV_REF
     498  , Bool bDepthRefine = false
     499#endif
     500  );
     501#if MTK_NBDV_TN_FIX_E0172
     502  Bool          xGetColDisMV      ( Int currCandPic, RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int & iTargetViewIdx, Int & iStartViewIdx );
    598503#else
    599   Void          getDisMvpCandNBDV( UInt uiPartIdx, UInt uiPartAddr, DisInfo* pDInfo , Bool bParMerg = false
    600 #endif
    601 #if MERL_VSP_C0152
    602                               , Bool bDepthRefine = false
    603 #endif //MERL_VSP_C0152
    604     );
    605 #endif // !H3D_NBDV
    606 
    607 
    608 
    609 #if MERL_VSP_C0152
    610   Pel           getMcpFromDM(TComPicYuv* pcBaseViewDepthPicYuv, TComMv* mv, Int iBlkX, Int iBlkY, Int iWidth, Int iHeight, Int* aiShiftLUT, Int iShiftPrec, Bool bSimpleDvpRefine = false);
    611   Void          estimateDVFromDM(
    612 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    613                 Int refViewIdx,
    614 #endif
    615                 UInt uiPartIdx, TComPic* picDepth, UInt uiPartAddr, TComMv* cMvPred, Bool bSimpleDvpRefine = false);
    616 #endif
    617   Bool          getIViewOrgDepthMvPred( UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, TComMv& rcMv );
    618 #endif //  H3D_IVMP
    619 #if H3D_IVRP
    620   Bool*         getResPredAvail         ()                        { return m_pbResPredAvailable;        }
    621   Bool          getResPredAvail         ( UInt uiIdx )            { return m_pbResPredAvailable[uiIdx]; }
    622   Void          setResPredAvail         ( UInt uiIdx, Bool b )    { m_pbResPredAvailable[uiIdx] = b;    }
    623   Void          setResPredAvailSubParts ( Bool b, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    624 
    625   Bool*         getResPredFlag          ()                        { return m_pbResPredFlag;        }
    626   Bool          getResPredFlag          ( UInt uiIdx )            { return m_pbResPredFlag[uiIdx]; }
    627   Void          setResPredFlag          ( UInt uiIdx, Bool b )    { m_pbResPredFlag[uiIdx] = b;    }
    628   Void          setResPredFlagSubParts  ( Bool b, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    629 
    630   Void          setResPredIndicator     ( Bool bAv, Bool bRP )    { m_pbResPredAvailable[0] = bAv; m_pbResPredFlag[0] = bRP; }
    631 #endif
    632 #if H3D_IVRP
    633   Bool          getResidualSamples( UInt uiPartIdx, Bool bRecon, TComYuv* pcYuv = 0 );
    634 #endif
    635 #if QC_ARP_D0177
    636   UChar*        getARPW          ()                        { return m_puhARPW;               }
    637   UChar         getARPW          ( UInt uiIdx )            { return m_puhARPW[uiIdx];        }
    638   Void          setARPW          ( UInt uiIdx, UChar w )   { m_puhARPW[uiIdx] = w;           }
    639   Void          setARPWSubParts  ( UChar w, UInt uiAbsPartIdx, UInt uiDepth );
    640   Double        getARPWFactor    ( UInt uiIdx );
    641 #endif
     504  Bool          xGetColDisMV      ( RefPicList eRefPicList, Int refidx, Int uiCUAddr, Int uiPartUnitIdx, TComMv& rcMv, Int & iTargetViewIdx, Int & iStartViewIdx );
     505#endif
     506  Bool          getDisMvpCandNBDV ( DisInfo* pDInfo
     507#if H_3D_NBDV_REF
     508   , Bool bDepthRefine = false
     509#endif
     510   );
     511   
     512#if H_3D_NBDV_REF
     513  Pel           getMcpFromDM(TComPicYuv* pcBaseViewDepthPicYuv, TComMv* mv, Int iBlkX, Int iBlkY, Int iWidth, Int iHeight, Int* aiShiftLUT );
     514  Void          estimateDVFromDM(Int refViewIdx, UInt uiPartIdx, TComPic* picDepth, UInt uiPartAddr, TComMv* cMvPred );
     515#endif //H_3D_NBDV_REF
     516#endif
     517#if  MTK_FAST_TEXTURE_ENCODING_E0173
     518  Void          getIVNStatus       ( UInt uiPartIdx,  DisInfo* pDInfo, Bool& bIVFMerge,  Int& iIVFMaxD);
     519#endif
     520#if H_3D_IV_MERGE
     521  Bool          getInterViewMergeCands          ( UInt uiPartIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDInfo, Int* availableMcDc );   
     522#endif
     523#if H_3D_ARP
     524  UChar*        getARPW            ()                        { return m_puhARPW;               }
     525  UChar         getARPW            ( UInt uiIdx )            { return m_puhARPW[uiIdx];        }
     526  Void          setARPW            ( UInt uiIdx, UChar w )   { m_puhARPW[uiIdx] = w;           }
     527  Void          setARPWSubParts    ( UChar w, UInt uiAbsPartIdx, UInt uiDepth );
     528  Double        getARPWFactor      ( UInt uiIdx );
     529#endif
     530#if H_3D_IC
     531  Bool*         getICFlag          ()                        { return m_pbICFlag;               }
     532  Bool          getICFlag          ( UInt uiIdx )            { return m_pbICFlag[uiIdx];        }
     533  Void          setICFlag          ( UInt uiIdx, Bool  uh )  { m_pbICFlag[uiIdx] = uh;          }
     534  Void          setICFlagSubParts  ( Bool bICFlag,  UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
     535  Bool          isICFlagRequired   ( UInt uiAbsPartIdx );
     536  Void          getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false);
     537#else
    642538  // -------------------------------------------------------------------------------------------------------------------
    643539  // member functions for accessing partition information
    644540  // -------------------------------------------------------------------------------------------------------------------
    645 #if H3D_IVRP
    646   Void          getPartIndexAndSize( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight, UInt uiAbsPartIdx = 0, Bool bLCU = false);
     541 
     542  Void          getPartIndexAndSize   ( UInt uiPartIdx, UInt& ruiPartAddr, Int& riWidth, Int& riHeight );
    647543#endif
    648544  UChar         getNumPartInter       ();
    649545  Bool          isFirstAbsZorderIdxInDepth (UInt uiAbsPartIdx, UInt uiDepth);
     546
     547#if H_3D_DIM
     548  Pel*  getDimDeltaDC                 ( UInt dimType, UInt segId )                      { return m_dimDeltaDC[dimType][segId];        }
     549  Pel   getDimDeltaDC                 ( UInt dimType, UInt segId, UInt uiIdx )          { return m_dimDeltaDC[dimType][segId][uiIdx]; }
     550  Void  setDimDeltaDC                 ( UInt dimType, UInt segId, UInt uiIdx, Pel val ) { m_dimDeltaDC[dimType][segId][uiIdx] = val;  }
     551#if H_3D_DIM_DMM
     552  UInt* getDmmWedgeTabIdx             ( UInt dmmType )                          { return m_dmmWedgeTabIdx[dmmType];          }       
     553  UInt  getDmmWedgeTabIdx             ( UInt dmmType, UInt uiIdx )              { return m_dmmWedgeTabIdx[dmmType][uiIdx];   }
     554  Void  setDmmWedgeTabIdx             ( UInt dmmType, UInt uiIdx, UInt tabIdx ) { m_dmmWedgeTabIdx[dmmType][uiIdx] = tabIdx; }
     555  Void  setDmmWedgeTabIdxSubParts     ( UInt tabIdx, UInt dmmType, UInt uiAbsPartIdx, UInt uiDepth );
     556
     557#if !SEC_DMM2_E0146
     558  Int*  getDmm2DeltaEnd               ()                      { return m_dmm2DeltaEnd;        }
     559  Int   getDmm2DeltaEnd               ( UInt uiIdx )          { return m_dmm2DeltaEnd[uiIdx]; }
     560  Void  setDmm2DeltaEnd               ( UInt uiIdx, Int iD )  { m_dmm2DeltaEnd[uiIdx] = iD;   }
     561  Void  setDmm2DeltaEndSubParts       ( Int iDelta, UInt uiAbsPartIdx, UInt uiDepth );
     562#endif
     563
     564  UInt* getDmm3IntraTabIdx            ()                      { return m_dmm3IntraTabIdx;        }
     565  UInt  getDmm3IntraTabIdx            ( UInt uiIdx )          { return m_dmm3IntraTabIdx[uiIdx]; }
     566  Void  setDmm3IntraTabIdx            ( UInt uiIdx, UInt uh ) { m_dmm3IntraTabIdx[uiIdx] = uh;   }
     567  Void  setDmm3IntraTabIdxSubParts    ( UInt uiTIdx, UInt uiAbsPartIdx, UInt uiDepth );
     568#endif
     569#if H_3D_DIM_RBC
     570  UChar* getEdgeCode( UInt uiIdx )                 { return &m_pucEdgeCode[uiIdx * RBC_MAX_EDGE_NUM_PER_4x4]; }
     571
     572  UChar* getEdgeNumber( )                          { return m_pucEdgeNumber;           }
     573  UChar  getEdgeNumber( UInt uiIdx )               { return m_pucEdgeNumber[uiIdx];    }
     574  Void   setEdgeNumber( UInt uiIdx, UChar val )    { m_pucEdgeNumber[uiIdx] = val;     }
     575
     576  UChar* getEdgeStartPos( )                        { return m_pucEdgeStartPos;         }
     577  UChar  getEdgeStartPos( UInt uiIdx )             { return m_pucEdgeStartPos[uiIdx];  }
     578  Void   setEdgeStartPos( UInt uiIdx, UChar val )  { m_pucEdgeStartPos[uiIdx] = val;   }
     579
     580  Bool*  getEdgeLeftFirst( )                       { return m_pbEdgeLeftFirst;         }
     581  Bool   getEdgeLeftFirst( UInt uiIdx )            { return m_pbEdgeLeftFirst[uiIdx];  }
     582  Void   setEdgeLeftFirst( UInt uiIdx, Bool val )  { m_pbEdgeLeftFirst[uiIdx] = val;   }
     583
     584  Bool*  getEdgePartition( UInt uiIdx )            { return &m_pbEdgePartition[uiIdx * 16]; }
     585
     586  Void   reconPartition( UInt uiAbsPartIdx, UInt uiDepth, Bool bLeft, UChar ucStartPos, UChar ucNumEdge, UChar* pucEdgeCode, Bool* pbRegion );
     587#endif
     588#if H_3D_DIM_SDC
     589  Bool*         getSDCFlag          ()                        { return m_pbSDCFlag;               }
     590  Bool          getSDCFlag          ( UInt uiIdx )            { return m_pbSDCFlag[uiIdx];        }
     591  Void          setSDCFlagSubParts  ( Bool bSDCFlag, UInt uiAbsPartIdx, UInt uiDepth );
     592 
     593  Bool          getSDCAvailable             ( UInt uiAbsPartIdx );
     594 
     595  Pel*          getSDCSegmentDCOffset( UInt uiSeg ) { return m_apSegmentDCOffset[uiSeg]; }
     596  Pel           getSDCSegmentDCOffset( UInt uiSeg, UInt uiPartIdx ) { return m_apSegmentDCOffset[uiSeg][uiPartIdx]; }
     597  Void          setSDCSegmentDCOffset( Pel pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentDCOffset[uiSeg][uiPartIdx] = pOffset; }
     598#endif
     599#endif
     600#if LGE_INTER_SDC_E0156
     601  Bool*         getInterSDCFlag     ()                        { return m_pbInterSDCFlag;               }
     602  Bool          getInterSDCFlag     ( UInt uiIdx )            { return m_pbInterSDCFlag[uiIdx];        }
     603  Void          setInterSDCFlagSubParts ( Bool bInterSDCFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
     604  UInt          getCtxInterSDCFlag  ( UInt uiAbsPartIdx );
     605  Int*          getInterSDCSegmentDCOffset( UInt uiSeg ) { return m_apSegmentInterDCOffset[uiSeg]; }
     606  Int           getInterSDCSegmentDCOffset( UInt uiSeg, UInt uiPartIdx ) { return m_apSegmentInterDCOffset[uiSeg][uiPartIdx]; }
     607  Void          setInterSDCSegmentDCOffset( Int pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentInterDCOffset[uiSeg][uiPartIdx] = pOffset; }
     608
     609  Void          xSetInterSDCCUMask( TComDataCU *pcCU, UChar *pMask );
     610
     611  UChar*        getInterSDCMask     ()                        { return m_pucInterSDCMask;              }
     612#endif
    650613 
    651614  // -------------------------------------------------------------------------------------------------------------------
     
    655618  Void          getMvField            ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefPicList, TComMvField& rcMvField );
    656619 
    657   AMVP_MODE     getAMVPMode           ( UInt uiIdx );
    658 #if H3D_IVMP
    659   Void          fillMvpCandBase       ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo );
    660   Void          fillMvpCand           ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo , Int iMVPIdx=-1);
    661 #endif
     620  Void          fillMvpCand           ( UInt uiPartIdx, UInt uiPartAddr, RefPicList eRefPicList, Int iRefIdx, AMVPInfo* pInfo );
    662621  Bool          isDiffMER             ( Int xN, Int yN, Int xP, Int yP);
    663622  Void          getPartPosition       ( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH);
     
    677636  Void          getMvPredAbove        ( TComMv&     rcMvPred )   { rcMvPred = m_cMvFieldB.getMv(); }
    678637  Void          getMvPredAboveRight   ( TComMv&     rcMvPred )   { rcMvPred = m_cMvFieldC.getMv(); }
    679  
     638#if MTK_SONY_PROGRESSIVE_MV_COMPRESSION_E0170
     639  Void          compressMV            (int scale);
     640#else           
    680641  Void          compressMV            ();
    681  
     642#endif 
    682643  // -------------------------------------------------------------------------------------------------------------------
    683644  // utility functions for neighbouring information
     
    691652
    692653
    693   TComDataCU*   getPULeft                   ( UInt&  uiLPartUnitIdx , UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true
    694                                             , Bool bEnforceTileRestriction=true
    695                                             );
    696 
    697   TComDataCU*   getPUAbove                  ( UInt&  uiAPartUnitIdx , UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true, Bool MotionDataCompresssion = false
    698                                             , Bool planarAtLCUBoundary = false
    699                                             , Bool bEnforceTileRestriction=true
    700                                             );
    701 
    702   TComDataCU*   getPUAboveLeft              ( UInt&  uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true, Bool MotionDataCompresssion = false );
    703   TComDataCU*   getPUAboveRight             ( UInt&  uiARPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true, Bool MotionDataCompresssion = false );
    704   TComDataCU*   getPUBelowLeft              ( UInt& uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true );
    705 
    706   TComDataCU*   getQpMinCuLeft              ( UInt&  uiLPartUnitIdx , UInt uiCurrAbsIdxInLCU, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true );
    707   TComDataCU*   getQpMinCuAbove             ( UInt&  aPartUnitIdx , UInt currAbsIdxInLCU, Bool enforceSliceRestriction=true, Bool enforceEntropySliceRestriction=true );
     654  TComDataCU*   getPULeft                   ( UInt&  uiLPartUnitIdx,
     655                                              UInt uiCurrPartUnitIdx,
     656                                              Bool bEnforceSliceRestriction=true,
     657                                              Bool bEnforceTileRestriction=true );
     658  TComDataCU*   getPUAbove                  ( UInt&  uiAPartUnitIdx,
     659                                              UInt uiCurrPartUnitIdx,
     660                                              Bool bEnforceSliceRestriction=true,
     661                                              Bool planarAtLCUBoundary = false,
     662                                              Bool bEnforceTileRestriction=true );
     663  TComDataCU*   getPUAboveLeft              ( UInt&  uiALPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true );
     664  TComDataCU*   getPUAboveRight             ( UInt&  uiARPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true );
     665  TComDataCU*   getPUBelowLeft              ( UInt&  uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, Bool bEnforceSliceRestriction=true );
     666
     667  TComDataCU*   getQpMinCuLeft              ( UInt&  uiLPartUnitIdx , UInt uiCurrAbsIdxInLCU );
     668  TComDataCU*   getQpMinCuAbove             ( UInt&  aPartUnitIdx , UInt currAbsIdxInLCU );
    708669  Char          getRefQP                    ( UInt   uiCurrAbsIdxInLCU                       );
    709670
    710   TComDataCU*   getPUAboveRightAdi          ( UInt&  uiARPartUnitIdx, UInt uiPuWidth, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true );
    711   TComDataCU*   getPUBelowLeftAdi           ( UInt& uiBLPartUnitIdx, UInt uiPuHeight, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true, Bool bEnforceEntropySliceRestriction=true );
    712  
    713   Void          deriveLeftRightTopIdx       ( PartSize eCUMode, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT );
    714   Void          deriveLeftBottomIdx         ( PartSize eCUMode, UInt uiPartIdx, UInt& ruiPartIdxLB );
     671  TComDataCU*   getPUAboveRightAdi          ( UInt&  uiARPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true );
     672  TComDataCU*   getPUBelowLeftAdi           ( UInt&  uiBLPartUnitIdx, UInt uiCurrPartUnitIdx, UInt uiPartUnitOffset = 1, Bool bEnforceSliceRestriction=true );
     673 
     674  Void          deriveLeftRightTopIdx       ( UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT );
     675  Void          deriveLeftBottomIdx         ( UInt uiPartIdx, UInt& ruiPartIdxLB );
    715676 
    716677  Void          deriveLeftRightTopIdxAdi    ( UInt& ruiPartIdxLT, UInt& ruiPartIdxRT, UInt uiPartOffset, UInt uiPartDepth );
     
    718679 
    719680  Bool          hasEqualMotion              ( UInt uiAbsPartIdx, TComDataCU* pcCandCU, UInt uiCandAbsPartIdx );
    720 #if MERL_VSP_C0152
    721   Void          getInterMergeCandidates     ( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int* uiVSPIndexTrue,
    722 #if MERL_VSP_NBDV_RefVId_Fix_D0166
    723                 Int* iVSPDir,
    724 #endif
    725                 Int mrgCandIdx = -1 );
    726 #else
    727   Void          getInterMergeCandidates     ( UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours, Int& numValidMergeCand, Int mrgCandIdx = -1 );
    728 #endif
    729   Void          deriveLeftRightTopIdxGeneral( PartSize eCUMode, UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT );
    730   Void          deriveLeftBottomIdxGeneral  ( PartSize eCUMode, UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB );
     681  Void          getInterMergeCandidates     ( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours
     682#if H_3D_VSP
     683                                            , Int* vspFlag
     684#if MTK_VSP_FIX_ALIGN_WD_E0172
     685                                            , InheritedVSPDisInfo*  inheritedVSPDisInfo
     686#endif
     687#if MTK_VSP_FIX_E0172
     688                                            , Int* vspDir
     689#endif
     690#endif
     691                                            , Int& numValidMergeCand, Int mrgCandIdx = -1 );
     692#if MTK_VSP_FIX_ALIGN_WD_E0172
     693  inline Void xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount,  InheritedVSPDisInfo*  inheritedVSPDisInfo);
     694#endif
     695#if H_3D_VSP
     696  Char*         getVSPFlag        ()                        { return m_piVSPFlag;          }
     697  Char          getVSPFlag        ( UInt uiIdx )            { return m_piVSPFlag[uiIdx];   }
     698  Void          setVSPFlag        ( UInt uiIdx, Int n )     { m_piVSPFlag[uiIdx] = n;      }
     699  Void          setVSPFlagSubParts( Char iVSPFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
     700#if MTK_VSP_FIX_E0172
     701  Char*         getVSPDir          ()                        { return m_piVSPDir;                           }
     702  Char          getVSPDir          ( UInt uiIdx )            { return m_piVSPDir[uiIdx];                  }
     703  Void          setVSPDir          ( UInt uiIdx, Int n )     { m_piVSPDir[uiIdx] = n;  }
     704  Void          setVSPDirSubParts  ( Char iVSPDir, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
     705#endif
     706#endif
     707  Void          deriveLeftRightTopIdxGeneral  ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLT, UInt& ruiPartIdxRT );
     708  Void          deriveLeftBottomIdxGeneral    ( UInt uiAbsPartIdx, UInt uiPartIdx, UInt& ruiPartIdxLB );
    731709 
    732710 
     
    737715  Bool          isIntra   ( UInt uiPartIdx )  { return m_pePredMode[ uiPartIdx ] == MODE_INTRA; }
    738716  Bool          isSkipped ( UInt uiPartIdx );                                                     ///< SKIP (no residual)
    739  
     717  Bool          isBipredRestriction( UInt puIdx );
     718
    740719  // -------------------------------------------------------------------------------------------------------------------
    741720  // member functions for symbol prediction (most probable / mode conversion)
     
    743722 
    744723  UInt          getIntraSizeIdx                 ( UInt uiAbsPartIdx                                       );
    745   Void          convertTransIdx                 ( UInt uiAbsPartIdx, UInt uiTrIdx, UInt& ruiLumaTrMode, UInt& ruiChromaTrMode );
    746724 
    747725  Void          getAllowedChromaDir             ( UInt uiAbsPartIdx, UInt* uiModeList );
     
    753731 
    754732  UInt          getCtxSplitFlag                 ( UInt   uiAbsPartIdx, UInt uiDepth                   );
    755   UInt          getCtxQtCbf                     ( UInt   uiAbsPartIdx, TextType eType, UInt uiTrDepth );
     733  UInt          getCtxQtCbf                     ( TextType eType, UInt uiTrDepth );
    756734
    757735  UInt          getCtxSkipFlag                  ( UInt   uiAbsPartIdx                                 );
    758 #if LGE_ILLUCOMP_B0045
     736  UInt          getCtxInterDir                  ( UInt   uiAbsPartIdx                                 );
     737 
     738#if H_3D_ARP
     739  UInt          getCTXARPWFlag                  ( UInt   uiAbsPartIdx                                 );
     740#endif 
     741#if H_3D_IC
    759742  UInt          getCtxICFlag                    ( UInt   uiAbsPartIdx                                 );
    760743#endif
    761   UInt          getCtxInterDir                  ( UInt   uiAbsPartIdx                                 );
    762 
    763 #if H3D_IVRP
    764   UInt          getCtxResPredFlag               ( UInt   uiAbsPartIdx                                 );
    765 #endif
    766 #if QC_ARP_D0177
    767   UInt          getCTXARPWFlag                 ( UInt   uiAbsPartIdx                                 );
    768 #endif 
    769   UInt          getSliceStartCU         ( UInt pos )                  { return m_uiSliceStartCU[pos-m_uiAbsIdxInLCU];                                                                                          }
    770   UInt          getEntropySliceStartCU  ( UInt pos )                  { return m_uiEntropySliceStartCU[pos-m_uiAbsIdxInLCU];                                                                                   }
     744  UInt          getSliceStartCU         ( UInt pos )                  { return m_sliceStartCU[pos-m_uiAbsIdxInLCU];                                                                                          }
     745  UInt          getSliceSegmentStartCU  ( UInt pos )                  { return m_sliceSegmentStartCU[pos-m_uiAbsIdxInLCU];                                                                                   }
    771746  UInt&         getTotalBins            ()                            { return m_uiTotalBins;                                                                                                  }
    772 
    773 #if LGE_EDGE_INTRA_A0070
    774   UInt          getCtxEdgeIntra ( UInt uiAbsPartIdx );
    775 #endif
    776 
    777747  // -------------------------------------------------------------------------------------------------------------------
    778748  // member functions for RD cost storage
     
    780750 
    781751  Double&       getTotalCost()                  { return m_dTotalCost;        }
     752#if H_3D_VSO
    782753  Dist&         getTotalDistortion()            { return m_uiTotalDistortion; }
     754#else
     755  UInt&         getTotalDistortion()            { return m_uiTotalDistortion; }
     756#endif
    783757  UInt&         getTotalBits()                  { return m_uiTotalBits;       }
    784758  UInt&         getTotalNumPart()               { return m_uiNumPartition;    }
     
    786760  UInt          getCoefScanIdx(UInt uiAbsPartIdx, UInt uiWidth, Bool bIsLuma, Bool bIsIntra);
    787761
    788   Bool          useNonSquareTrans( UInt uiTrMode, Int absPartIdx );
    789   Void          getNSQTSize(Int trMode, Int absPartIdx, Int &trWidth, Int &trHeight);
    790   Bool          useNonSquarePU   ( UInt absPartIdx);
    791   UInt          getInterTUSplitDirection ( Int width, Int height, Int trLastWidth, Int trLastHeight );
    792   UInt          getNSAbsPartIdx  ( UInt log2TrafoSize, UInt absPartIdx, UInt absTUPartIdx, UInt innerQuadIdx, UInt trMode );
    793   UInt          getNSAddrChroma   ( UInt uiLog2TrSizeC, UInt uiTrModeC, UInt uiQuadrant, UInt absTUPartIdx );
    794  
    795 // -------------------------------------------------------------------------------------------------------------------
    796   // member functions for depth model modes
    797   // -------------------------------------------------------------------------------------------------------------------
    798 #if HHI_DMM_WEDGE_INTRA
    799   UInt* getWedgeFullTabIdx                ()                      { return m_puiWedgeFullTabIdx;              }
    800   UInt  getWedgeFullTabIdx                ( UInt uiIdx )          { return m_puiWedgeFullTabIdx[uiIdx];       }
    801   Void  setWedgeFullTabIdx                ( UInt uiIdx, UInt uh ) { m_puiWedgeFullTabIdx[uiIdx] = uh;         }
    802   Void  setWedgeFullTabIdxSubParts        ( UInt uiTIdx, UInt uiAbsPartIdx, UInt uiDepth );
    803   Int*  getWedgeFullDeltaDC1              ()                      { return m_piWedgeFullDeltaDC1;             }
    804   Int   getWedgeFullDeltaDC1              ( UInt uiIdx )          { return m_piWedgeFullDeltaDC1[uiIdx];      }
    805   Void  setWedgeFullDeltaDC1              ( UInt uiIdx, Int i )   { m_piWedgeFullDeltaDC1[uiIdx] = i;         }
    806   Void  setWedgeFullDeltaDC1SubParts      ( Int iDC1, UInt uiAbsPartIdx, UInt uiDepth );
    807   Int*  getWedgeFullDeltaDC2              ()                      { return m_piWedgeFullDeltaDC2;             }
    808   Int   getWedgeFullDeltaDC2              ( UInt uiIdx )          { return m_piWedgeFullDeltaDC2[uiIdx];      }
    809   Void  setWedgeFullDeltaDC2              ( UInt uiIdx, Int i )   { m_piWedgeFullDeltaDC2[uiIdx] = i;         }
    810   Void  setWedgeFullDeltaDC2SubParts      ( Int iDC2, UInt uiAbsPartIdx, UInt uiDepth );
    811 
    812   UInt* getWedgePredDirTabIdx             ()                      { return m_puiWedgePredDirTabIdx;           }
    813   UInt  getWedgePredDirTabIdx             ( UInt uiIdx )          { return m_puiWedgePredDirTabIdx[uiIdx];    }
    814   Void  setWedgePredDirTabIdx             ( UInt uiIdx, UInt uh ) { m_puiWedgePredDirTabIdx[uiIdx] = uh;      }
    815   Void  setWedgePredDirTabIdxSubParts     ( UInt uiTIdx, UInt uiAbsPartIdx, UInt uiDepth );
    816   Int*  getWedgePredDirDeltaDC1           ()                      { return m_piWedgePredDirDeltaDC1;          }
    817   Int   getWedgePredDirDeltaDC1           ( UInt uiIdx )          { return m_piWedgePredDirDeltaDC1[uiIdx];   }
    818   Void  setWedgePredDirDeltaDC1           ( UInt uiIdx, Int i )   { m_piWedgePredDirDeltaDC1[uiIdx] = i;      }
    819   Void  setWedgePredDirDeltaDC1SubParts   ( Int iDC1, UInt uiAbsPartIdx, UInt uiDepth );
    820   Int*  getWedgePredDirDeltaDC2           ()                      { return m_piWedgePredDirDeltaDC2;          }
    821   Int   getWedgePredDirDeltaDC2           ( UInt uiIdx )          { return m_piWedgePredDirDeltaDC2[uiIdx];   }
    822   Void  setWedgePredDirDeltaDC2           ( UInt uiIdx, Int i )   { m_piWedgePredDirDeltaDC2[uiIdx] = i;      }
    823   Void  setWedgePredDirDeltaDC2SubParts   ( Int iDC2, UInt uiAbsPartIdx, UInt uiDepth );
    824   Int*  getWedgePredDirDeltaEnd           ()                      { return m_piWedgePredDirDeltaEnd;          }
    825   Int   getWedgePredDirDeltaEnd           ( UInt uiIdx )          { return m_piWedgePredDirDeltaEnd[uiIdx];   }
    826   Void  setWedgePredDirDeltaEnd           ( UInt uiIdx, Int iD )  { m_piWedgePredDirDeltaEnd[uiIdx] = iD;     }
    827   Void  setWedgePredDirDeltaEndSubParts   ( Int iDelta, UInt uiAbsPartIdx, UInt uiDepth );
    828 #endif
    829 #if HHI_DMM_PRED_TEX
    830   UInt* getWedgePredTexTabIdx             ()                      { return m_puiWedgePredTexTabIdx;           }
    831   UInt  getWedgePredTexTabIdx             ( UInt uiIdx )          { return m_puiWedgePredTexTabIdx[uiIdx];    }
    832   Void  setWedgePredTexTabIdx             ( UInt uiIdx, UInt uh ) { m_puiWedgePredTexTabIdx[uiIdx] = uh;      }
    833   Void  setWedgePredTexTabIdxSubParts     ( UInt uiTIdx, UInt uiAbsPartIdx, UInt uiDepth );
    834 #if LGE_DMM3_SIMP_C0044
    835   UInt* getWedgePredTexIntraTabIdx             ()                      { return m_puiWedgePredTexIntraTabIdx;           }
    836   UInt  getWedgePredTexIntraTabIdx             ( UInt uiIdx )          { return m_puiWedgePredTexIntraTabIdx[uiIdx];    }
    837   Void  setWedgePredTexIntraTabIdx             ( UInt uiIdx, UInt uh ) { m_puiWedgePredTexIntraTabIdx[uiIdx] = uh;      }
    838   Void  setWedgePredTexIntraTabIdxSubParts     ( UInt uiTIdx, UInt uiAbsPartIdx, UInt uiDepth );
    839 #endif
    840   Int*  getWedgePredTexDeltaDC1           ()                      { return m_piWedgePredTexDeltaDC1;          }
    841   Int   getWedgePredTexDeltaDC1           ( UInt uiIdx )          { return m_piWedgePredTexDeltaDC1[uiIdx];   }
    842   Void  setWedgePredTexDeltaDC1           ( UInt uiIdx, Int i )   { m_piWedgePredTexDeltaDC1[uiIdx] = i;      }
    843   Void  setWedgePredTexDeltaDC1SubParts   ( Int iDC1, UInt uiAbsPartIdx, UInt uiDepth );
    844   Int*  getWedgePredTexDeltaDC2           ()                      { return m_piWedgePredTexDeltaDC2;          }
    845   Int   getWedgePredTexDeltaDC2           ( UInt uiIdx )          { return m_piWedgePredTexDeltaDC2[uiIdx];   }
    846   Void  setWedgePredTexDeltaDC2           ( UInt uiIdx, Int i )   { m_piWedgePredTexDeltaDC2[uiIdx] = i;      }
    847   Void  setWedgePredTexDeltaDC2SubParts   ( Int iDC2, UInt uiAbsPartIdx, UInt uiDepth );
    848 
    849   Int*  getContourPredTexDeltaDC1         ()                      { return m_piContourPredTexDeltaDC1;        }
    850   Int   getContourPredTexDeltaDC1         ( UInt uiIdx )          { return m_piContourPredTexDeltaDC1[uiIdx]; }
    851   Void  setContourPredTexDeltaDC1         ( UInt uiIdx, Int i )   { m_piContourPredTexDeltaDC1[uiIdx] = i;    }
    852   Void  setContourPredTexDeltaDC1SubParts ( Int iDC1, UInt uiAbsPartIdx, UInt uiDepth );
    853   Int*  getContourPredTexDeltaDC2         ()                      { return m_piContourPredTexDeltaDC2;        }
    854   Int   getContourPredTexDeltaDC2         ( UInt uiIdx )          { return m_piContourPredTexDeltaDC2[uiIdx]; }
    855   Void  setContourPredTexDeltaDC2         ( UInt uiIdx, Int i )   { m_piContourPredTexDeltaDC2[uiIdx] = i;    }
    856   Void  setContourPredTexDeltaDC2SubParts ( Int iDC2, UInt uiAbsPartIdx, UInt uiDepth );
    857 #endif
    858 
    859 #if LGE_EDGE_INTRA_A0070
    860   UChar*        getEdgeCode( UInt uiIdx )                 { return &m_pucEdgeCode[uiIdx * LGE_EDGE_INTRA_MAX_EDGE_NUM_PER_4x4]; }
    861   UChar*        getEdgeNumber( )                          { return m_pucEdgeNumber;           }
    862   UChar         getEdgeNumber( UInt uiIdx )               { return m_pucEdgeNumber[uiIdx];    }
    863   Void          setEdgeNumber( UInt uiIdx, UChar val )    { m_pucEdgeNumber[uiIdx] = val;     }
    864   UChar*        getEdgeStartPos( )                        { return m_pucEdgeStartPos;         }
    865   UChar         getEdgeStartPos( UInt uiIdx )             { return m_pucEdgeStartPos[uiIdx];  }
    866   Void          setEdgeStartPos( UInt uiIdx, UChar val )  { m_pucEdgeStartPos[uiIdx] = val;   }
    867   Bool*         getEdgeLeftFirst( )                       { return m_pbEdgeLeftFirst;         }
    868   Bool          getEdgeLeftFirst( UInt uiIdx )            { return m_pbEdgeLeftFirst[uiIdx];  }
    869   Void          setEdgeLeftFirst( UInt uiIdx, Bool val )  { m_pbEdgeLeftFirst[uiIdx] = val;   }
    870   Bool*         getEdgePartition( UInt uiIdx )              { return &m_pbEdgePartition[uiIdx * 16]; }
    871   Void          reconPartition( UInt uiAbsPartIdx, UInt uiDepth, Bool bLeft, UChar ucStartPos, UChar ucNumEdge, UChar* pucEdgeCode, Bool* pbRegion );
    872 
    873 #if LGE_EDGE_INTRA_DELTA_DC
    874   Int*          getEdgeDeltaDC0( )                          { return m_piEdgeDeltaDC0; }
    875   Int*          getEdgeDeltaDC1( )                          { return m_piEdgeDeltaDC1; }
    876   Int           getEdgeDeltaDC0( UInt uiIdx )               { return m_piEdgeDeltaDC0[uiIdx]; }
    877   Int           getEdgeDeltaDC1( UInt uiIdx )               { return m_piEdgeDeltaDC1[uiIdx]; }
    878   Void          setEdgeDeltaDC0( UInt uiIdx, Int val )      { m_piEdgeDeltaDC0[uiIdx] = val;  }
    879   Void          setEdgeDeltaDC1( UInt uiIdx, Int val )      { m_piEdgeDeltaDC1[uiIdx] = val;  }
    880 #endif
    881 #endif
    882  
    883 #if RWTH_SDC_DLT_B0036
    884   Bool*         getSDCFlag          ()                        { return m_pbSDCFlag;               }
    885   Bool          getSDCFlag          ( UInt uiIdx )            { return m_pbSDCFlag[uiIdx];        }
    886   Void          setSDCFlagSubParts  ( Bool bSDCFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth );
    887  
    888 #if !PKU_QC_DEPTH_INTRA_UNI_D0195
    889   UInt          getCtxSDCFlag              ( UInt uiAbsPartIdx );
    890 #endif
    891  
    892   Bool          getSDCAvailable             ( UInt uiAbsPartIdx );
    893  
    894   Pel*          getSDCSegmentDCOffset( UInt uiSeg ) { return m_apSegmentDCOffset[uiSeg]; }
    895   Pel           getSDCSegmentDCOffset( UInt uiSeg, UInt uiPartIdx ) { return m_apSegmentDCOffset[uiSeg][uiPartIdx]; }
    896   Void          setSDCSegmentDCOffset( Pel pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentDCOffset[uiSeg][uiPartIdx] = pOffset; }
    897  
    898 
    899 #endif
    900762};
    901763
Note: See TracChangeset for help on using the changeset viewer.