Changeset 1039 in 3DVCSoftware for trunk/source/Lib/TLibCommon


Ignore:
Timestamp:
4 Aug 2014, 11:36:05 (10 years ago)
Author:
tech
Message:

Merged 11.2-dev0@1038.

Location:
trunk/source/Lib/TLibCommon
Files:
14 edited

Legend:

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

    r976 r1039  
    5151#define NUM_SPLIT_FLAG_CTX            3       ///< number of context models for split flag
    5252#define NUM_SKIP_FLAG_CTX             3       ///< number of context models for skip flag
    53 
     53#if MTK_SINGLE_DEPTH_MODE_I0095
     54#define NUM_SINGLEDEPTH_FLAG_CTX                     1
     55#define NUM_SINGLE_DEPTH_VALUE_DATA_CTX              1       
     56#endif
    5457#define NUM_MERGE_FLAG_EXT_CTX        1       ///< number of context models for merge flag of merge extended
    5558#define NUM_MERGE_IDX_EXT_CTX         1       ///< number of context models for merge index of merge extended
     
    150153  { CNU,  CNU,  CNU, },
    151154};
    152 
     155#if MTK_SINGLE_DEPTH_MODE_I0095
     156static const UChar
     157INIT_SINGLEDEPTH_FLAG[3][NUM_SINGLEDEPTH_FLAG_CTX] = 
     158{
     159  { 185 },
     160  { 185 },
     161  { 185 },
     162};
     163static const UChar
     164INIT_SINGLE_DEPTH_VALUE_DATA[3][NUM_SINGLE_DEPTH_VALUE_DATA_CTX] =
     165{
     166  { 137 },
     167  { 137 },
     168  { 137 },
     169};
     170#endif
    153171static const UChar
    154172INIT_MERGE_FLAG_EXT[3][NUM_MERGE_FLAG_EXT_CTX] =
     
    432450static const UChar INIT_DBBP_FLAG[3][DBBP_NUM_FLAG_CTX] =
    433451{
     452#if SEC_DBBP_EXPLICIT_SIG_I0077
     453  { CNU },
     454  { CNU },
     455  { CNU },
     456#else
    434457  { 161 },
    435458  { 161 },
    436459  { 161 },
    437 };
    438 #endif
    439 
    440 #endif
     460#endif
     461};
     462#endif
     463
     464#endif
  • trunk/source/Lib/TLibCommon/TComDataCU.cpp

    r976 r1039  
    6060 
    6161  m_skipFlag           = NULL;
    62 
     62#if MTK_SINGLE_DEPTH_MODE_I0095
     63  m_singleDepthFlag     = NULL;
     64  m_apSingleDepthValue  = NULL;
     65#endif 
    6366  m_pePartSize         = NULL;
    6467  m_pePredMode         = NULL;
     
    182185
    183186    m_skipFlag           = new Bool[ uiNumPartition ];
    184 
     187#if MTK_SINGLE_DEPTH_MODE_I0095
     188    m_singleDepthFlag     = new Bool[ uiNumPartition ];
     189    m_apSingleDepthValue  = (Pel*)xMalloc(Pel, uiNumPartition);
     190#endif
    185191    m_pePartSize         = new Char[ uiNumPartition ];
    186192    memset( m_pePartSize, SIZE_NONE,uiNumPartition * sizeof( *m_pePartSize ) );
     
    329335
    330336    if ( m_skipFlag           ) { delete[] m_skipFlag;          m_skipFlag          = NULL; }
    331 
     337#if MTK_SINGLE_DEPTH_MODE_I0095
     338    if ( m_singleDepthFlag    ) { delete[] m_singleDepthFlag;   m_singleDepthFlag     = NULL; }
     339    if ( m_apSingleDepthValue ) { xFree(m_apSingleDepthValue);  m_apSingleDepthValue  = NULL; }
     340#endif
    332341    if ( m_pePartSize         ) { delete[] m_pePartSize;        m_pePartSize        = NULL; }
    333342    if ( m_pePredMode         ) { delete[] m_pePredMode;        m_pePredMode        = NULL; }
     
    494503    TComDataCU * pcFrom = pcPic->getCU(getAddr());
    495504    m_skipFlag[ui]   = pcFrom->getSkipFlag(ui);
     505#if MTK_SINGLE_DEPTH_MODE_I0095
     506    m_singleDepthFlag[ui]    = pcFrom->getSingleDepthFlag(ui);
     507    m_apSingleDepthValue[ui] = pcFrom->getSingleDepthValue(ui);
     508#endif
    496509    m_pePartSize[ui] = pcFrom->getPartitionSize(ui);
    497510    m_pePredMode[ui] = pcFrom->getPredictionMode(ui);
     
    550563  {
    551564    memset( m_skipFlag          + firstElement, false,                    numElements * sizeof( *m_skipFlag ) );
    552 
     565#if MTK_SINGLE_DEPTH_MODE_I0095
     566    memset( m_singleDepthFlag     + firstElement, false,                  numElements * sizeof( *m_singleDepthFlag ) );
     567    memset( m_apSingleDepthValue  + firstElement,     0,                  numElements * sizeof( *m_apSingleDepthValue ) );
     568#endif
    553569    memset( m_pePartSize        + firstElement, SIZE_NONE,                numElements * sizeof( *m_pePartSize ) );
    554570    memset( m_pePredMode        + firstElement, MODE_NONE,                numElements * sizeof( *m_pePredMode ) );
     
    738754      m_puhTransformSkip[2][ui] = 0;
    739755      m_skipFlag[ui]   = false;
     756#if MTK_SINGLE_DEPTH_MODE_I0095
     757      m_singleDepthFlag[ui]     = false;
     758      m_apSingleDepthValue[ui]  = 0;
     759#endif
    740760      m_pePartSize[ui] = SIZE_NONE;
    741761      m_pePredMode[ui] = MODE_NONE;
     
    913933  {
    914934    m_skipFlag[ui]   = false;
     935#if MTK_SINGLE_DEPTH_MODE_I0095
     936    m_singleDepthFlag[ui]   = false;
     937    m_apSingleDepthValue[ui]= 0;
     938#endif
    915939    m_pePartSize[ui] = SIZE_NONE;
    916940    m_pePredMode[ui] = MODE_NONE;
     
    934958      m_puhTransformSkip[2][ui] = pcCU->getTransformSkip(uiPartOffset+ui,TEXT_CHROMA_V);
    935959      m_skipFlag[ui]   = pcCU->getSkipFlag(uiPartOffset+ui);
     960#if MTK_SINGLE_DEPTH_MODE_I0095
     961      m_singleDepthFlag[ui]    = pcCU->getSingleDepthFlag(uiPartOffset+ui);
     962      m_apSingleDepthValue[ui] = pcCU->getSingleDepthValue(uiPartOffset+ui);
     963#endif
    936964      m_pePartSize[ui] = pcCU->getPartitionSize(uiPartOffset+ui);
    937965      m_pePredMode[ui] = pcCU->getPredictionMode(uiPartOffset+ui);
     
    10831111 
    10841112  m_skipFlag=pcCU->getSkipFlag()          + uiPart;
    1085 
     1113#if MTK_SINGLE_DEPTH_MODE_I0095
     1114  m_singleDepthFlag     = pcCU->getSingleDepthFlag()   + uiPart;
     1115  m_apSingleDepthValue  = pcCU->getSingleDepthValue()  + uiPart;
     1116#endif 
    10861117  m_phQP=pcCU->getQP()                    + uiPart;
    10871118  m_pePartSize = pcCU->getPartitionSize() + uiPart;
     
    12211252 
    12221253  m_skipFlag           = pcCU->getSkipFlag ()             + uiAbsPartIdx;
    1223 
     1254#if MTK_SINGLE_DEPTH_MODE_I0095
     1255  m_singleDepthFlag     = pcCU->getSingleDepthFlag ()             + uiAbsPartIdx;
     1256  m_apSingleDepthValue  = pcCU->getSingleDepthValue ()            + uiAbsPartIdx;
     1257#endif 
    12241258  m_pePartSize         = pcCU->getPartitionSize ()        + uiAbsPartIdx;
    12251259#if H_3D_NBDV
     
    12971331  Int sizeInChar  = sizeof( Char ) * uiNumPartition;
    12981332  memcpy( m_skipFlag   + uiOffset, pcCU->getSkipFlag(),       sizeof( *m_skipFlag )   * uiNumPartition );
     1333#if MTK_SINGLE_DEPTH_MODE_I0095
     1334  memcpy( m_singleDepthFlag     + uiOffset, pcCU->getSingleDepthFlag(),       sizeof( *m_singleDepthFlag )   * uiNumPartition );
     1335  memcpy( m_apSingleDepthValue  + uiOffset, pcCU->getSingleDepthValue(),      sizeof( *m_apSingleDepthValue ) * uiNumPartition);
     1336#endif
    12991337  memcpy( m_phQP       + uiOffset, pcCU->getQP(),             sizeInChar                        );
    13001338  memcpy( m_pePartSize + uiOffset, pcCU->getPartitionSize(),  sizeof( *m_pePartSize ) * uiNumPartition );
     
    14171455
    14181456  memcpy( rpcCU->getSkipFlag() + m_uiAbsIdxInLCU, m_skipFlag, sizeof( *m_skipFlag ) * m_uiNumPartition );
    1419 
     1457#if MTK_SINGLE_DEPTH_MODE_I0095
     1458  memcpy( rpcCU->getSingleDepthFlag()  + m_uiAbsIdxInLCU, m_singleDepthFlag,    sizeof( *m_singleDepthFlag ) * m_uiNumPartition );
     1459  memcpy( rpcCU->getSingleDepthValue() + m_uiAbsIdxInLCU, m_apSingleDepthValue, sizeof( *m_apSingleDepthValue ) * m_uiNumPartition);
     1460#endif
    14201461  memcpy( rpcCU->getQP() + m_uiAbsIdxInLCU, m_phQP, sizeInChar  );
    14211462#if H_3D_NBDV
     
    15331574  Int sizeInChar  = sizeof( Char ) * uiQNumPart;
    15341575  memcpy( rpcCU->getSkipFlag()       + uiPartOffset, m_skipFlag,   sizeof( *m_skipFlag )   * uiQNumPart );
    1535 
     1576#if MTK_SINGLE_DEPTH_MODE_I0095
     1577  memcpy( rpcCU->getSingleDepthFlag()  + uiPartOffset, m_singleDepthFlag,    sizeof( *m_singleDepthFlag )   * uiQNumPart );
     1578  memcpy( rpcCU->getSingleDepthValue() + uiPartOffset, m_apSingleDepthValue, sizeof( *m_apSingleDepthValue ) * uiQNumPart);
     1579#endif
    15361580  memcpy( rpcCU->getQP() + uiPartOffset, m_phQP, sizeInChar );
    15371581  memcpy( rpcCU->getPartitionSize()  + uiPartOffset, m_pePartSize, sizeof( *m_pePartSize ) * uiQNumPart );
     
    24532497  memset( m_skipFlag + absPartIdx, skip, m_pcPic->getNumPartInCU() >> ( 2 * depth ) );
    24542498}
    2455 
     2499#if MTK_SINGLE_DEPTH_MODE_I0095
     2500Void TComDataCU::setSingleDepthFlagSubParts( Bool singleDepth, UInt absPartIdx, UInt depth )
     2501{
     2502  assert( sizeof( *m_singleDepthFlag) == 1 );
     2503  memset( m_singleDepthFlag + absPartIdx, singleDepth, m_pcPic->getNumPartInCU() >> ( 2 * depth ) );
     2504}
     2505
     2506Void TComDataCU::setSingleDepthValueSubParts(Pel singleDepthValue, UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth )
     2507{
     2508  setSubPartT<Pel>( singleDepthValue, m_apSingleDepthValue, uiAbsPartIdx, uiDepth, uiPUIdx );
     2509}
     2510#endif
    24562511Void TComDataCU::setPredModeSubParts( PredMode eMode, UInt uiAbsPartIdx, UInt uiDepth )
    24572512{
     
    26222677  }
    26232678
     2679#if HS_DMM_SIGNALLING_I0120
     2680  if( isDimMode( getLumaIntraDir( uiAbsPartIdx ) ) )
     2681#else
    26242682  if( isDimMode( getLumaIntraDir( uiAbsPartIdx ) ) && !isDimDeltaDC( getLumaIntraDir( uiAbsPartIdx ) ) )
     2683#endif
    26252684  {
    26262685    return true;
     
    26352694  // check prediction mode
    26362695  UInt uiLumaPredMode = getLumaIntraDir( uiAbsPartIdx ); 
     2696#if HS_DMM_SIGNALLING_I0120
     2697  if( uiLumaPredMode == PLANAR_IDX || ( getDimType( uiLumaPredMode ) == DMM1_IDX  ) )
     2698#else
    26372699  if( uiLumaPredMode == PLANAR_IDX || ( getDimType( uiLumaPredMode ) == DMM1_IDX && !isDimDeltaDC( uiLumaPredMode ) ) )
     2700#endif
    26382701    return true;
    26392702 
     
    33103373  for(Int iLoop = 0; iLoop < 2; iLoop ++ )
    33113374  {
     3375#if !SEC_SIMP_SHIFTED_DV_I0086
    33123376    // IvDcShift (Derived from spatial Iv neighboring blocks)
    33133377    if( iLoop == 1 )
     
    33433407      }
    33443408    }
     3409#endif
    33453410
    33463411    /// iLoop = 0 --> IvMCShift
     
    33903455}
    33913456
     3457#if !SEC_SIMP_SHIFTED_DV_I0086
    33923458inline Bool TComDataCU::xGetPosFirstAvailDmvCand(Int iCount, Int& posFirstAvailDmvCand )
    33933459{
     
    34063472  return false; 
    34073473}
     3474#endif
    34083475                                     
    34093476#endif
     
    38543921Void TComDataCU::getInterMergeCandidates( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMvFieldNeighbours, UChar* puhInterDirNeighbours
    38553922#endif
    3856 #if H_3D_VSP
     3923#if H_3D_VSP && !FIX_TICKET_79
    38573924      , InheritedVSPDisInfo*  inheritedVSPDisInfo
    38583925#endif
     
    38843951  //////////////////////////////////
    38853952  DisInfo cDisInfo = getDvInfo(uiAbsPartIdx);
     3953#if !FIX_TICKET_79
    38863954  for(Int i = 0; i < MRG_MAX_NUM_CANDS_MEM; i++)
    38873955  {
    38883956    inheritedVSPDisInfo[i].m_acDvInfo = cDisInfo;   // To prevent run-time error, this code must be executed always for merging process.
    38893957  }
     3958#endif
    38903959  m_cDefaultDisInfo = cDisInfo;
    38913960
     
    41784247                TComMv cMv = cDefaultMvField.getMv() + cMvRounding;
    41794248                cMv >>= 2;
     4249#if !FIX_TICKET_68
    41804250                clipMv( cMv );
     4251#endif
    41814252                cMvFieldSaved[eCurrRefPicList].setMvField(cMv, iRefPicList) ;
    41824253                break;
     
    52505321#endif
    52515322
    5252 
     5323#if !FIX_TICKET_76
    52535324#if H_3D_VSP
    52545325inline Void TComDataCU::xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount, InheritedVSPDisInfo*  inheritedVSPDisInfo)
     
    52575328  inheritedVSPDisInfo[iCount].m_acDvInfo.m_aVIdxCan = pcCURef->getDvInfo(uiAbsPartIdx).m_aVIdxCan;
    52585329}
     5330#endif
    52595331#endif
    52605332/** Check whether the current PU and a spatial neighboring PU are in a same ME region.
     
    59005972    Int iColRefViewId  = pColCU->getSlice()->getRefPic( eColRefPicList, pColCU->getCUMvField(eColRefPicList)->getRefIdx(uiAbsPartAddr))->getViewIndex();
    59015973    iScale = xGetDistScaleFactor( iCurrViewId, iCurrRefViewId, iColViewId, iColRefViewId );
     5974#if SEC_HLS_CLEANUP_I0100
     5975    if ( iScale != 4096 && m_pcSlice->getVPS()->getIvMvScalingFlag(getSlice()->getLayerIdInVps()) )
     5976#else
    59025977    if ( iScale != 4096 && m_pcSlice->getVPS()->getIvMvScalingFlag() )
     5978#endif
    59035979    {
    59045980      rcMv = cColMv.scaleMv( iScale );
     
    60836159
    60846160  TComMv cMv;
     6161#if MTK_I0093
     6162  Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[ 1 << ( getSlice()->getSPS()->getBitDepthY() - 1 ) ];
     6163#else
    60856164  Int iDisp     = getSlice()->getDepthToDisparityB( 0 )[ 128 ];
     6165#endif
    60866166  cMv.setHor(iDisp);
    60876167  cMv.setVer(0);
     
    60916171  return true;
    60926172}
     6173#endif
     6174
     6175#if MTK_SINGLE_DEPTH_MODE_I0095
     6176Bool TComDataCU::getNeighDepth (UInt uiPartIdx, UInt uiPartAddr, Pel* pNeighDepth, Int index)
     6177{
     6178
     6179  Bool bDepAvail = false;
     6180  Pel *pDepth  = this->getPic()->getPicYuvRec()->getLumaAddr();
     6181  Int iDepStride =  this->getPic()->getPicYuvRec()->getStride();
     6182
     6183  Int xP, yP, nPSW, nPSH;
     6184  this->getPartPosition(uiPartIdx, xP, yP, nPSW, nPSH);
     6185  UInt PicHeight=this->getPic()->getPicYuvRec()->getHeight();
     6186  UInt PicWidth=this->getPic()->getPicYuvRec()->getWidth();
     6187  switch(index)
     6188  {
     6189  case 0: // Mid Left
     6190    if( ( xP != 0 ) && ( ( yP + ( nPSH >> 1 ) ) < PicHeight ) )
     6191    {
     6192      *pNeighDepth = pDepth[ (yP+(nPSH>>1)) * iDepStride + (xP-1) ];
     6193      bDepAvail = true;
     6194    }
     6195    break;
     6196  case 1: // Mid Above
     6197    if( ( yP != 0 ) && ( ( xP + ( nPSW >> 1 ) ) < PicWidth ) )
     6198    {
     6199      *pNeighDepth = pDepth[ (yP-1) * iDepStride + (xP + (nPSW>>1)) ];
     6200      bDepAvail = true;
     6201    }
     6202    break;
     6203  case 2: // Above
     6204    if(yP != 0)
     6205    {
     6206      *pNeighDepth = pDepth[ (yP-1) * iDepStride + (xP) ];
     6207      bDepAvail = true;
     6208    }
     6209    break;
     6210  case 3: // Left
     6211    if(xP != 0)
     6212    {
     6213      *pNeighDepth = pDepth[ (yP) * iDepStride + (xP-1) ];
     6214      bDepAvail = true;
     6215    }
     6216    break;
     6217  case 4: // Above_Left
     6218    if(xP != 0 && yP != 0)
     6219    {
     6220      *pNeighDepth = pDepth[ (yP-1) * iDepStride + (xP-1) ];
     6221      bDepAvail = true;
     6222    }
     6223    break;
     6224  default:
     6225      break;
     6226  }
     6227  return bDepAvail;
     6228}
     6229
    60936230#endif
    60946231#if H_3D_NBDV
     
    66506787  if( getSlice()->getIsDepth() )
    66516788  {
     6789#if MTK_I0099_VPS_EX2
     6790    iSubPUSize = 1<<getSlice()->getVPS()->getSubPUMPILog2Size(getSlice()->getLayerId());
     6791#else
    66526792    iSubPUSize = 1 << getSlice()->getVPS()->getSubPUMPILog2Size();
     6793#endif
    66536794  }
    66546795
  • trunk/source/Lib/TLibCommon/TComDataCU.h

    r976 r1039  
    110110  // -------------------------------------------------------------------------------------------------------------------
    111111  Bool*         m_skipFlag;           ///< array of skip flags
     112#if MTK_SINGLE_DEPTH_MODE_I0095
     113  Bool*         m_singleDepthFlag;           ///< array of single depth flags
     114  Pel*          m_apSingleDepthValue;
     115#endif
    112116  Char*         m_pePartSize;         ///< array of partition sizes
    113117  Char*         m_pePredMode;         ///< array of prediction modes
     
    246250#if H_3D_IV_MERGE
    247251  Bool          xAddIvMRGCand( Int mrgCandIdx, Int& iCount, Int*   ivCandDir, TComMv* ivCandMv, Int* ivCandRefIdx );
     252#if! SEC_SIMP_SHIFTED_DV_I0086
    248253  Bool          xGetPosFirstAvailDmvCand( Int iCount, Int& iFirDispCand );
     254#endif
    249255#endif
    250256
     
    347353  Void         setSkipFlag           ( UInt idx, Bool skip)     { m_skipFlag[idx] = skip;   }
    348354  Void         setSkipFlagSubParts   ( Bool skip, UInt absPartIdx, UInt depth );
    349 
     355#if MTK_SINGLE_DEPTH_MODE_I0095
     356  Bool*        getSingleDepthFlag            ()                        { return m_singleDepthFlag;          }
     357  Bool         getSingleDepthFlag            (UInt idx)                { return m_singleDepthFlag[idx];     }
     358  Void         setSingleDepthFlag           ( UInt idx, Bool singleDepth)     { m_singleDepthFlag[idx] = singleDepth;   }
     359  Void         setSingleDepthFlagSubParts   ( Bool singleDepth, UInt absPartIdx, UInt depth );
     360
     361  Pel*         getSingleDepthValue( ) { return m_apSingleDepthValue; }
     362  Pel          getSingleDepthValue            (UInt idx)                { return m_apSingleDepthValue[idx];     }
     363  Void         setSingleDepthValue           ( UInt idx, Pel pDepthValue)     { m_apSingleDepthValue[idx] = pDepthValue;   }
     364  Void         setSingleDepthValueSubParts   (Pel singleDepthValue, UInt uiAbsPartIdx, UInt uiPUIdx, UInt uiDepth );
     365#endif 
    350366  Char*         getPredictionMode     ()                        { return m_pePredMode;        }
    351367  PredMode      getPredictionMode     ( UInt uiIdx )            { return static_cast<PredMode>( m_pePredMode[uiIdx] ); }
     
    489505  Bool          getDispMvPredCan(UInt uiPartIdx, RefPicList eRefPicList, Int iRefIdx, Int* paiPdmRefIdx, TComMv* pacPdmMv, DisInfo* pDis, Int* iPdm );
    490506#endif
    491 
     507#if MTK_SINGLE_DEPTH_MODE_I0095
     508   Bool          getNeighDepth (UInt uiPartIdx, UInt uiPartAddr, Pel* pNeighDepth, Int index);
     509#endif
    492510#if H_3D_NBDV_REF
    493511  Pel           getMcpFromDM(TComPicYuv* pcBaseViewDepthPicYuv, TComMv* mv, Int iBlkX, Int iBlkY, Int iWidth, Int iHeight, Int* aiShiftLUT );
     
    652670  Void          getInterMergeCandidates ( UInt uiAbsPartIdx, UInt uiPUIdx, TComMvField* pcMFieldNeighbours, UChar* puhInterDirNeighbours
    653671#endif
    654 #if H_3D_VSP
     672#if H_3D_VSP && !FIX_TICKET_79
    655673                                            , InheritedVSPDisInfo*  inheritedVSPDisInfo
    656674#endif
     
    662680
    663681#if H_3D_VSP
     682#if !FIX_TICKET_76
    664683  inline Void   xInheritVSPDisInfo(TComDataCU* pcCURef, UInt uiAbsPartIdx, Int iCount,  InheritedVSPDisInfo*  inheritedVSPDisInfo);
     684#endif
    665685
    666686#if H_3D_SPIVMP
     
    750770
    751771#endif
     772
     773#if SHARP_DMM1_I0110
     774  Bool         isDMM1UpscaleMode       ( UInt uiWidth ){ Bool bDMM1UpsampleModeFlag = true; UInt uiBaseWidth = 16; if( uiBaseWidth >= uiWidth ){ bDMM1UpsampleModeFlag = false; } return bDMM1UpsampleModeFlag; };
     775  UInt         getDMM1BasePatternWidth ( UInt uiWidth ){ UInt uiBaseWidth = 16; if( uiBaseWidth >= uiWidth ){ uiBaseWidth =  uiWidth; } return uiBaseWidth; }
     776#endif
     777
    752778};
    753779
  • trunk/source/Lib/TLibCommon/TComMotionInfo.h

    r976 r1039  
    7979} IDVInfo;
    8080#endif
    81 #if H_3D_VSP
     81#if H_3D_VSP && !FIX_TICKET_79
    8282typedef struct _InheritedVSPDisCand
    8383{
  • trunk/source/Lib/TLibCommon/TComPrediction.cpp

    r976 r1039  
    423423
    424424  UInt dimType    = getDimType  ( uiIntraMode );
    425   Bool dimDeltaDC = isDimDeltaDC( uiIntraMode );   
     425#if !HS_DMM_SIGNALLING_I0120
     426  Bool dimDeltaDC = isDimDeltaDC( uiIntraMode );
     427#endif
    426428  Bool isDmmMode  = (dimType <  DMM_NUM_TYPE);
    427429
     
    438440    case( DMM1_IDX ):
    439441      {
     442#if SHARP_DMM1_I0110
     443        dmmSegmentation = pcCU->isDMM1UpscaleMode((UInt)iWidth) ?
     444            &(g_dmmWedgeLists[ g_aucConvertToBit[pcCU->getDMM1BasePatternWidth((UInt)iWidth)] ][ pcCU->getDmmWedgeTabIdx( dimType, uiAbsPartIdx ) ]) :
     445            &(g_dmmWedgeLists[ g_aucConvertToBit[iWidth] ][ pcCU->getDmmWedgeTabIdx( dimType, uiAbsPartIdx ) ]);
     446#else
    440447        dmmSegmentation = &(g_dmmWedgeLists[ g_aucConvertToBit[iWidth] ][ pcCU->getDmmWedgeTabIdx( dimType, uiAbsPartIdx ) ]);
     448#endif
    441449      } break;
    442450    case( DMM4_IDX ):
     
    456464    }
    457465    assert( dmmSegmentation );
     466#if SHARP_DMM1_I0110
     467    if( dimType == DMM1_IDX && pcCU->isDMM1UpscaleMode((UInt)iWidth) )
     468    {
     469        biSegPattern = dmmSegmentation->getScaledPattern((UInt)iWidth);
     470        patternStride = iWidth;
     471    }
     472    else
     473    {
     474        biSegPattern  = dmmSegmentation->getPattern();
     475        patternStride = dmmSegmentation->getStride ();
     476    }
     477#else
    458478    biSegPattern  = dmmSegmentation->getPattern();
    459479    patternStride = dmmSegmentation->getStride ();
     480#endif
    460481  }
    461482#endif
     
    474495  Pel segDC1 = 0;
    475496  Pel segDC2 = 0;
     497#if HS_DMM_SIGNALLING_I0120
     498  if( !pcCU->getSDCFlag( uiAbsPartIdx ) )
     499#else
    476500  if( dimDeltaDC )
     501#endif
    477502  {
    478503    Pel deltaDC1 = pcCU->getDimDeltaDC( dimType, 0, uiAbsPartIdx );
     
    543568    pcCU->getSPAbsPartIdx(uiPartAddr, iSPWidth, iSPHeight, i, iNumSPInOneLine, uiSPAddr[i]);
    544569  }
     570#if SHARP_ARP_CHROMA_I0104
     571  if( pcCU->getARPW( uiPartAddr ) != 0 )
     572  {
     573    return;
     574  }
     575#endif
    545576  // horizontal sub-PU merge
    546577  for (Int i=0; i<iNumSP; i++)
     
    714745  Int uiMinDepth = MAX_INT;
    715746  Int uiMaxDepth = 0;
     747#if SEC_DBBP_DMM4_THRESHOLD_I0076
     748  iSumDepth  = pDepthPels[ 0 ];
     749  iSumDepth += pDepthPels[ uiWidth - 1 ];
     750  iSumDepth += pDepthPels[ uiDepthStride * (uiHeight - 1) ];
     751  iSumDepth += pDepthPels[ uiDepthStride * (uiHeight - 1) + uiWidth - 1 ];
     752
     753  uiMinDepth = pDepthPels[ 0 ];
     754  uiMinDepth = std::min( uiMinDepth, (Int)pDepthPels[ uiWidth - 1 ]);
     755  uiMinDepth = std::min( uiMinDepth, (Int)pDepthPels[ uiDepthStride * (uiHeight - 1) ]);
     756  uiMinDepth = std::min( uiMinDepth, (Int)pDepthPels[ uiDepthStride * (uiHeight - 1) + uiWidth - 1 ]);
     757
     758  uiMaxDepth = pDepthPels[ 0 ];
     759  uiMaxDepth = std::max( uiMaxDepth, (Int)pDepthPels[ uiWidth - 1 ]);
     760  uiMaxDepth = std::max( uiMaxDepth, (Int)pDepthPels[ uiDepthStride * (uiHeight - 1) ]);
     761  uiMaxDepth = std::max( uiMaxDepth, (Int)pDepthPels[ uiDepthStride * (uiHeight - 1) + uiWidth - 1 ]);
     762#else
    716763  for (Int y=0; y<uiHeight; y++)
    717764  {
     
    734781    pDepthPels += uiDepthStride;
    735782  }
     783#endif
    736784 
    737785  // don't generate mask for blocks with small depth range (encoder decision)
     
    742790 
    743791  AOF(uiWidth==uiHeight);
     792#if SEC_DBBP_DMM4_THRESHOLD_I0076
     793  Int iMean = iSumDepth >> 2;
     794#else
    744795  Int iSizeInBits = g_aucConvertToBit[uiWidth]+2;
    745796  Int iMean = iSumDepth >> iSizeInBits*2;       // iMean /= (uiWidth*uiHeight);
     797#endif
    746798 
    747799  // start again for segmentation
     
    790842}
    791843
     844#if SHARP_DBBP_SIMPLE_FLTER_I0109
     845Void TComPrediction::combineSegmentsWithMask( TComYuv* pInYuv[2], TComYuv* pOutYuv, Bool* pMask, UInt uiWidth, UInt uiHeight, UInt uiPartAddr, UInt partSize )
     846#else
    792847Void TComPrediction::combineSegmentsWithMask( TComYuv* pInYuv[2], TComYuv* pOutYuv, Bool* pMask, UInt uiWidth, UInt uiHeight, UInt uiPartAddr )
     848#endif
    793849{
    794850  Pel*  piSrc[2]    = {pInYuv[0]->getLumaAddr(uiPartAddr), pInYuv[1]->getLumaAddr(uiPartAddr)};
     
    798854 
    799855  UInt  uiMaskStride= MAX_CU_SIZE;
     856#if !SHARP_DBBP_SIMPLE_FLTER_I0109
    800857  Pel  filSrc = 0;
     858#endif
    801859  Pel* tmpTar = 0;
    802860  tmpTar = (Pel *)xMalloc(Pel, uiWidth*uiHeight);
     
    822880  }
    823881 
     882#if SHARP_DBBP_SIMPLE_FLTER_I0109
     883  if (partSize == SIZE_Nx2N)
     884  {
     885    for (Int y=0; y<uiHeight; y++)
     886    {
     887      for (Int x=0; x<uiWidth; x++)
     888      {
     889        Bool l = (x==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x-1];
     890        Bool r = (x==uiWidth-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[y*uiMaskStride+x+1];
     891       
     892        Pel left, right;
     893        left   = (x==0)          ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x-1];
     894        right  = (x==uiWidth-1)  ? tmpTar[y*uiWidth+x] : tmpTar[y*uiWidth+x+1];
     895       
     896        piDst[x] = (l!=r) ? ClipY( Pel(( left + (tmpTar[y*uiWidth+x] << 1) + right ) >> 2 )) : tmpTar[y*uiWidth+x];
     897      }
     898      piDst     += uiDstStride;
     899    }
     900  }
     901  else // SIZE_2NxN
     902  {
     903    for (Int y=0; y<uiHeight; y++)
     904    {
     905      for (Int x=0; x<uiWidth; x++)
     906      {
     907        Bool t = (y==0)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y-1)*uiMaskStride+x];
     908        Bool b = (y==uiHeight-1)?pMaskStart[y*uiMaskStride+x]:pMaskStart[(y+1)*uiMaskStride+x];
     909       
     910        Pel top, bottom;
     911        top    = (y==0)          ? tmpTar[y*uiWidth+x] : tmpTar[(y-1)*uiWidth+x];
     912        bottom = (y==uiHeight-1) ? tmpTar[y*uiWidth+x] : tmpTar[(y+1)*uiWidth+x];
     913       
     914        piDst[x] = (t!=b) ? ClipY( Pel(( top + (tmpTar[y*uiWidth+x] << 1) + bottom ) >> 2 )) : tmpTar[y*uiWidth+x];
     915      }
     916      piDst     += uiDstStride;
     917    }
     918  }
     919#else
    824920  for (Int y=0; y<uiHeight; y++)
    825921  {
     
    855951    piDst     += uiDstStride;
    856952  }
     953#endif
     954
    857955  if ( tmpTar    ) { xFree(tmpTar);             tmpTar        = NULL; }
    858956 
     
    891989  }
    892990
     991#if SHARP_DBBP_SIMPLE_FLTER_I0109
     992  if (partSize == SIZE_Nx2N)
     993  {
     994    for (Int y=0; y<uiHeightC; y++)
     995    {
     996      for (Int x=0; x<uiWidthC; x++)
     997      {
     998        Bool l = (x==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x-1)*2];
     999        Bool r = (x==uiWidthC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[y*2*uiMaskStride+(x+1)*2];
     1000
     1001        Pel leftU, rightU;
     1002        leftU   = (x==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x-1];
     1003        rightU  = (x==uiWidthC-1)  ? tmpTarU[y*uiWidthC+x] : tmpTarU[y*uiWidthC+x+1];
     1004        Pel leftV, rightV;
     1005        leftV   = (x==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x-1];
     1006        rightV  = (x==uiWidthC-1)  ? tmpTarV[y*uiWidthC+x] : tmpTarV[y*uiWidthC+x+1];
     1007
     1008        if (l!=r)
     1009        {
     1010          filSrcU = ClipC( Pel(( leftU + (tmpTarU[y*uiWidthC+x] << 1) + rightU ) >> 2 ));
     1011          filSrcV = ClipC( Pel(( leftV + (tmpTarV[y*uiWidthC+x] << 1) + rightV ) >> 2 ));
     1012        }
     1013        else
     1014        {
     1015          filSrcU = tmpTarU[y*uiWidthC+x];
     1016          filSrcV = tmpTarV[y*uiWidthC+x];
     1017        }
     1018        piDstU[x] = filSrcU;
     1019        piDstV[x] = filSrcV;
     1020      }
     1021      piDstU      += uiDstStrideC;
     1022      piDstV      += uiDstStrideC;
     1023    }
     1024  }
     1025  else
     1026  {
     1027    for (Int y=0; y<uiHeightC; y++)
     1028    {
     1029      for (Int x=0; x<uiWidthC; x++)
     1030      {
     1031        Bool t = (y==0)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y-1)*2*uiMaskStride+x*2];
     1032        Bool b = (y==uiHeightC-1)?pMaskStart[y*2*uiMaskStride+x*2]:pMaskStart[(y+1)*2*uiMaskStride+x*2];
     1033
     1034        Pel topU, bottomU;
     1035        topU    = (y==0)           ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y-1)*uiWidthC+x];
     1036        bottomU = (y==uiHeightC-1) ? tmpTarU[y*uiWidthC+x] : tmpTarU[(y+1)*uiWidthC+x];
     1037        Pel topV, bottomV;
     1038        topV    = (y==0)           ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y-1)*uiWidthC+x];
     1039        bottomV = (y==uiHeightC-1) ? tmpTarV[y*uiWidthC+x] : tmpTarV[(y+1)*uiWidthC+x];
     1040
     1041        if (t!=b)
     1042        {
     1043          filSrcU = ClipC( Pel(( topU + (tmpTarU[y*uiWidthC+x] << 1) + bottomU ) >> 2 ));
     1044          filSrcV = ClipC( Pel(( topV + (tmpTarV[y*uiWidthC+x] << 1) + bottomV ) >> 2 ));
     1045        }
     1046        else
     1047        {
     1048          filSrcU = tmpTarU[y*uiWidthC+x];
     1049          filSrcV = tmpTarV[y*uiWidthC+x];
     1050        }
     1051        piDstU[x] = filSrcU;
     1052        piDstV[x] = filSrcV;
     1053      }
     1054      piDstU      += uiDstStrideC;
     1055      piDstV      += uiDstStrideC;
     1056    }
     1057  }
     1058#else
    8931059  for (Int y=0; y<uiHeightC; y++)
    8941060  {
     
    9361102    piDstV      += uiDstStrideC;
    9371103  }
     1104#endif
    9381105  if ( tmpTarU    ) { xFree(tmpTarU);             tmpTarU        = NULL; }
    9391106  if ( tmpTarV    ) { xFree(tmpTarV);             tmpTarV        = NULL; }
     
    13081475  pcCU->clipMv(cMv);
    13091476  TComPicYuv* pcPicYuvRef = pcCU->getSlice()->getRefPic( eRefPicList, iRefIdx )->getPicYuvRec();
     1477#if QC_I0129_ARP_FIX
     1478  xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi || ( dW > 0 ), true );
     1479  xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi || ( dW > 0 ), true );
     1480#else
    13101481  xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, true );
    13111482  xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMv, iWidth, iHeight, rpcYuvPred, bi, true );
    1312 
     1483#endif
    13131484  if( dW > 0 )
    13141485  {
     
    13181489    TComMv cMVwithDisparity = cMv + cDistparity.m_acNBDV;
    13191490    pcCU->clipMv(cMVwithDisparity);
     1491#if SHARP_ARP_CHROMA_I0104
     1492    if (iWidth <= 8)
     1493    {
     1494      pYuvB0->clear(); pYuvB1->clear();
     1495    }
     1496#endif
    13201497
    13211498    assert ( cDistparity.bDV );
     
    13261503   
    13271504    pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec();
     1505#if QC_I0129_ARP_FIX
     1506    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, true, true );
     1507#if SHARP_ARP_CHROMA_I0104
     1508    if (iWidth > 8)
     1509#endif
     1510    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, true, true );
     1511#else
    13281512    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true );
    13291513    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cNBDV, iWidth, iHeight, pYuvB0, bi, true );
     1514#endif
    13301515#else
    13311516    pcPicYuvRef = pcPicYuvBaseCol->getPicYuvRec();
     
    13351520   
    13361521    pcPicYuvRef = pcPicYuvBaseRef->getPicYuvRec();
     1522#if QC_I0129_ARP_FIX
     1523    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, true, true );
     1524#if SHARP_ARP_CHROMA_I0104
     1525    if (iWidth > 8)
     1526#endif
     1527    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, true, true );
     1528#else
    13371529    xPredInterLumaBlk  ( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, bi, true );
    13381530    xPredInterChromaBlk( pcCU, pcPicYuvRef, uiPartAddr, &cMVwithDisparity, iWidth, iHeight, pYuvB1, bi, true );
    1339 
     1531#endif
    13401532    pYuvB0->subtractARP( pYuvB0 , pYuvB1 , uiPartAddr , iWidth , iHeight );
    13411533
     
    13471539  }
    13481540}
     1541
     1542#if QC_I0051_ARP_SIMP
     1543Bool TComPrediction::xCheckBiInterviewARP( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eBaseRefPicList, TComPic*& pcPicYuvCurrTRef, TComMv& cBaseTMV, Int& iCurrTRefPoc )
     1544{
     1545  Int         iRefIdx       = pcCU->getCUMvField( eBaseRefPicList )->getRefIdx( uiPartAddr );
     1546  TComMv      cDMv          = pcCU->getCUMvField( eBaseRefPicList )->getMv( uiPartAddr );
     1547  TComPic* pcPicYuvBaseCol  = pcCU->getSlice()->getRefPic( eBaseRefPicList, iRefIdx ); 
     1548  TComPicYuv* pcYuvBaseCol  = pcPicYuvBaseCol->getPicYuvRec();
     1549  Int uiLCUAddr,uiAbsPartAddr;
     1550  Int irefPUX = pcCU->getCUPelX() + g_auiRasterToPelX[g_auiZscanToRaster[uiPartAddr]] + iWidth/2  + ((cDMv.getHor() + 2)>>2);
     1551  Int irefPUY = pcCU->getCUPelY() + g_auiRasterToPelY[g_auiZscanToRaster[uiPartAddr]] + iHeight/2 + ((cDMv.getVer() + 2)>>2);
     1552
     1553  irefPUX = (Int)Clip3<Int>(0, pcCU->getSlice()->getSPS()-> getPicWidthInLumaSamples()-1, irefPUX);
     1554  irefPUY = (Int)Clip3<Int>(0, pcCU->getSlice()->getSPS()->getPicHeightInLumaSamples()-1, irefPUY); 
     1555  pcYuvBaseCol->getCUAddrAndPartIdx( irefPUX, irefPUY, uiLCUAddr, uiAbsPartAddr);
     1556  TComDataCU *pColCU = pcPicYuvBaseCol->getCU( uiLCUAddr );
     1557
     1558  TComPic* pcPicYuvBaseTRef = NULL;
     1559  pcPicYuvCurrTRef = NULL;
     1560
     1561  //If there is available motion in base reference list, use it
     1562  if(!pColCU->isIntra(uiAbsPartAddr))
     1563  {
     1564    for(Int iList = 0; iList < (pColCU->getSlice()->isInterB() ? 2: 1); iList ++)
     1565    {
     1566      RefPicList eRefPicListCurr = RefPicList(iList);
     1567      Int iRef = pColCU->getCUMvField(eRefPicListCurr)->getRefIdx(uiAbsPartAddr);
     1568      if( iRef != -1)
     1569      {
     1570        pcPicYuvBaseTRef = pColCU->getSlice()->getRefPic(eRefPicListCurr, iRef); 
     1571        Int  iCurrPOC    = pColCU->getSlice()->getPOC();
     1572        Int  iCurrRefPOC = pcPicYuvBaseTRef->getPOC();
     1573        Int  iCurrRef    = pcCU->getSlice()->getFirstTRefIdx(eRefPicListCurr);
     1574#if MTK_I0072_IVARP_SCALING_FIX
     1575        if( iCurrRef >= 0 && iCurrPOC != iCurrRefPOC)
     1576#else
     1577        if( iCurrRef >= 0)
     1578#endif
     1579        {
     1580          pcPicYuvCurrTRef =  pcCU->getSlice()->getRefPic(eRefPicListCurr,iCurrRef); 
     1581          Int iTargetPOC = pcPicYuvCurrTRef->getPOC();
     1582          pcPicYuvBaseTRef =  pcCU->getSlice()->getBaseViewRefPic(iTargetPOC,  pcPicYuvBaseCol->getViewIndex() ); 
     1583          if(pcPicYuvBaseTRef)
     1584          {
     1585            cBaseTMV = pColCU->getCUMvField(eRefPicListCurr)->getMv(uiAbsPartAddr);
     1586            Int iScale = pcCU-> xGetDistScaleFactor(iCurrPOC, iTargetPOC, iCurrPOC, iCurrRefPOC);
     1587            if ( iScale != 4096 )
     1588            {
     1589              cBaseTMV = cBaseTMV.scaleMv( iScale );
     1590            }
     1591            iCurrTRefPoc = iTargetPOC;
     1592            return true;
     1593          }
     1594        }
     1595      }
     1596    }
     1597  }
     1598
     1599  //If there is no available motion in base reference list, use ( 0, 0 )
     1600  if( pcCU->getSlice()->getFirstTRefIdx( eBaseRefPicList ) >= 0 )
     1601  {
     1602    cBaseTMV.set( 0, 0 );
     1603    pcPicYuvCurrTRef = pcCU->getSlice()->getRefPic( eBaseRefPicList,  pcCU->getSlice()->getFirstTRefIdx( eBaseRefPicList ) );
     1604    iCurrTRefPoc = pcPicYuvCurrTRef->getPOC();
     1605    return true;
     1606  }
     1607
     1608  return false;
     1609}
     1610#endif
     1611
    13491612Void TComPrediction::xPredInterUniARPviewRef( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, TComMvField * pNewMvFiled )
    13501613{
     
    13801643  pcYuvBaseCol->getCUAddrAndPartIdx( irefPUX, irefPUY, uiLCUAddr, uiAbsPartAddr);
    13811644  TComDataCU *pColCU = pcPicYuvBaseCol->getCU( uiLCUAddr );
    1382 
     1645#if QC_I0051_ARP_SIMP
     1646  if( pcCU->getSlice()->isInterB() && !pcCU->getSlice()->getIsDepth() )
     1647  {
     1648    RefPicList eOtherRefList = ( eRefPicList == REF_PIC_LIST_0 ) ? REF_PIC_LIST_1 : REF_PIC_LIST_0;
     1649    Int iOtherRefIdx = pcCU->getCUMvField( eOtherRefList )->getRefIdx( uiPartAddr );
     1650    //The other prediction direction is temporal ARP
     1651    if( iOtherRefIdx >= 0 && pcCU->getSlice()->getViewIndex() == pcCU->getSlice()->getRefPic( eOtherRefList, iOtherRefIdx )->getViewIndex() )
     1652    {
     1653      bTMVAvai = true;
     1654      pcPicYuvBaseTRef = pcCU->getSlice()->getRefPic( eOtherRefList, iOtherRefIdx );
     1655      Int  iCurrPOC    = pcCU->getSlice()->getPOC();
     1656      Int  iCurrRefPOC = pcPicYuvBaseTRef->getPOC();
     1657      Int  iCurrRef    = pcCU->getSlice()->getFirstTRefIdx( eOtherRefList );
     1658     
     1659      if( iCurrRef >= 0 )
     1660      {
     1661        pcPicYuvCurrTRef =  pcCU->getSlice()->getRefPic( eOtherRefList,iCurrRef ); 
     1662        Int iTargetPOC = pcPicYuvCurrTRef->getPOC();
     1663        pcPicYuvBaseTRef =  pcCU->getSlice()->getBaseViewRefPic( iTargetPOC,  pcPicYuvBaseCol->getViewIndex() );
     1664        if( pcPicYuvBaseTRef )
     1665        {
     1666          cBaseTMV = pcCU->getCUMvField( eOtherRefList )->getMv( uiPartAddr );
     1667          Int iScale = pcCU-> xGetDistScaleFactor( iCurrPOC, iTargetPOC, iCurrPOC, iCurrRefPOC );
     1668          if ( iScale != 4096 )
     1669          {
     1670            cBaseTMV = cBaseTMV.scaleMv( iScale );
     1671          }
     1672        }
     1673        else
     1674        {
     1675          dW = 0;
     1676        }
     1677      }
     1678      else
     1679      {
     1680        dW = 0;
     1681      }
     1682    }
     1683
     1684    //Both prediction directions are inter-view ARP
     1685    if ( iOtherRefIdx >= 0 && !bTMVAvai )
     1686    {
     1687      RefPicList eBaseList = REF_PIC_LIST_0;
     1688      Int iCurrTRefPoc;
     1689      bTMVAvai = ( eBaseList != eRefPicList ) && ( pcCU->getSlice()->getViewIndex() != pcCU->getSlice()->getRefPic( eOtherRefList, iOtherRefIdx )->getViewIndex() );
     1690
     1691      if ( bTMVAvai )
     1692      {
     1693        if( xCheckBiInterviewARP( pcCU, uiPartAddr, iWidth, iHeight, eBaseList, pcPicYuvCurrTRef, cBaseTMV, iCurrTRefPoc ) )
     1694        {
     1695          pcPicYuvBaseTRef = pcCU->getSlice()->getBaseViewRefPic( iCurrTRefPoc,  pcPicYuvBaseCol->getViewIndex() );
     1696          if ( pcPicYuvBaseTRef == NULL )
     1697          {
     1698            dW = 0;
     1699          }
     1700        }
     1701        else
     1702        {
     1703          dW = 0;
     1704        }
     1705      }
     1706    }
     1707  }
     1708
     1709  if( !pColCU->isIntra( uiAbsPartAddr ) && !bTMVAvai )
     1710#else
    13831711  if(!pColCU->isIntra(uiAbsPartAddr))
     1712#endif
    13841713  {
    13851714    TComMvField puMVField;
     
    13941723        Int  iCurrRefPOC = pcPicYuvBaseTRef->getPOC();
    13951724        Int  iCurrRef    = pcCU->getSlice()->getFirstTRefIdx(eRefPicListCurr);
     1725#if MTK_I0072_IVARP_SCALING_FIX
     1726        if (iCurrRef >= 0 && iCurrRefPOC != iCurrPOC)
     1727#else
    13961728        if( iCurrRef >= 0)
     1729#endif
    13971730        {
    13981731          pcPicYuvCurrTRef =  pcCU->getSlice()->getRefPic(eRefPicListCurr,iCurrRef); 
     
    14211754    pcPicYuvCurrTRef =  pcCU->getSlice()->getRefPic  (eRefPicList,  pcCU->getSlice()->getFirstTRefIdx(eRefPicList));     
    14221755  }
    1423 
     1756#if QC_I0129_ARP_FIX
     1757  xPredInterLumaBlk  ( pcCU, pcYuvBaseCol, uiPartAddr, &cTempDMv, iWidth, iHeight, rpcYuvPred, bi || ( dW > 0 && bTMVAvai ),        bTMVAvai);
     1758  xPredInterChromaBlk( pcCU, pcYuvBaseCol, uiPartAddr, &cTempDMv, iWidth, iHeight, rpcYuvPred, bi || ( dW > 0 && bTMVAvai ),        bTMVAvai);
     1759#else
    14241760  xPredInterLumaBlk  ( pcCU, pcYuvBaseCol, uiPartAddr, &cTempDMv, iWidth, iHeight, rpcYuvPred, bi,        bTMVAvai);
    14251761  xPredInterChromaBlk( pcCU, pcYuvBaseCol, uiPartAddr, &cTempDMv, iWidth, iHeight, rpcYuvPred, bi,        bTMVAvai);
    1426 
     1762#endif
    14271763  if( dW > 0 && bTMVAvai )
    14281764  {
     
    14351771    pcCU->clipMv(cBaseTMV);
    14361772    pcCU->clipMv(cTempMv);
    1437 
     1773#if SHARP_ARP_CHROMA_I0104
     1774    if (iWidth <= 8)
     1775    {
     1776      pYuvCurrTRef->clear(); pYuvBaseTRef->clear();
     1777    }
     1778#endif
     1779#if QC_I0129_ARP_FIX
     1780    xPredInterLumaBlk  ( pcCU, pcYuvCurrTref, uiPartAddr, &cBaseTMV, iWidth, iHeight, pYuvCurrTRef, true,   true);
     1781#if SHARP_ARP_CHROMA_I0104
     1782    if (iWidth > 8)
     1783#endif
     1784    xPredInterChromaBlk( pcCU, pcYuvCurrTref, uiPartAddr, &cBaseTMV, iWidth, iHeight, pYuvCurrTRef, true,   true);
     1785    xPredInterLumaBlk  ( pcCU, pcYuvBaseTref, uiPartAddr, &cTempMv,  iWidth, iHeight, pYuvBaseTRef, true,   true);
     1786#if SHARP_ARP_CHROMA_I0104
     1787    if (iWidth > 8)
     1788#endif
     1789    xPredInterChromaBlk( pcCU, pcYuvBaseTref, uiPartAddr, &cTempMv,  iWidth, iHeight, pYuvBaseTRef, true,   true);
     1790#else
    14381791    xPredInterLumaBlk  ( pcCU, pcYuvCurrTref, uiPartAddr, &cBaseTMV, iWidth, iHeight, pYuvCurrTRef, bi,   true);
    14391792    xPredInterChromaBlk( pcCU, pcYuvCurrTref, uiPartAddr, &cBaseTMV, iWidth, iHeight, pYuvCurrTRef, bi,   true);
     
    14411794    xPredInterChromaBlk( pcCU, pcYuvBaseTref, uiPartAddr, &cTempMv,  iWidth, iHeight, pYuvBaseTRef, bi,   true);
    14421795
     1796#endif
    14431797    pYuvCurrTRef->subtractARP( pYuvCurrTRef , pYuvBaseTRef , uiPartAddr , iWidth , iHeight ); 
    14441798    if(dW == 2)
     
    19742328  Int iRecStride = ( eType == TEXT_LUMA ) ? pRecPic->getStride() : pRecPic->getCStride();
    19752329  Int iRefStride = ( eType == TEXT_LUMA ) ? pRefPic->getStride() : pRefPic->getCStride();
     2330#if SEC_IC_NEIGHBOR_CLIP_I0080
     2331  Int iRefOffset, iHor, iVer;
     2332#else
    19762333  Int iCUPelX, iCUPelY, iRefX, iRefY, iRefOffset, iHor, iVer;
    19772334
    19782335  iCUPelX = pcCU->getCUPelX() + g_auiRasterToPelX[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
    19792336  iCUPelY = pcCU->getCUPelY() + g_auiRasterToPelY[g_auiZscanToRaster[pcCU->getZorderIdxInCU()]];
     2337#endif
    19802338  iHor = pcCU->getSlice()->getIsDepth() ? pMv->getHor() : ( ( pMv->getHor() + 2 ) >> 2 );
    19812339  iVer = pcCU->getSlice()->getIsDepth() ? pMv->getVer() : ( ( pMv->getVer() + 2 ) >> 2 );
     2340#if !SEC_IC_NEIGHBOR_CLIP_I0080
    19822341  iRefX   = iCUPelX + iHor;
    19832342  iRefY   = iCUPelY + iVer;
     2343#endif
    19842344  if( eType != TEXT_LUMA )
    19852345  {
     
    19972357  Int precShift = std::max(0, (( eType == TEXT_LUMA ) ? g_bitDepthY : g_bitDepthC) - 12);
    19982358
     2359#if SEC_IC_NEIGHBOR_CLIP_I0080
     2360  if( pcCU->getPUAbove( uiTmpPartIdx, pcCU->getZorderIdxInCU() ) )
     2361#else
    19992362  if( pcCU->getPUAbove( uiTmpPartIdx, pcCU->getZorderIdxInCU() ) && iCUPelY > 0 && iRefY > 0 )
     2363#endif
    20002364  {
    20012365    iRefOffset = iHor + iVer * iRefStride - iRefStride;
     
    20272391  }
    20282392
    2029 
     2393#if SEC_IC_NEIGHBOR_CLIP_I0080
     2394  if( pcCU->getPULeft( uiTmpPartIdx, pcCU->getZorderIdxInCU() ) )
     2395#else
    20302396  if( pcCU->getPULeft( uiTmpPartIdx, pcCU->getZorderIdxInCU() ) && iCUPelX > 0 && iRefX > 0 )
     2397#endif
    20312398  {
    20322399    iRefOffset = iHor + iVer * iRefStride - 1;
     
    20612428    iCountShift += iCountShift > 0 ? 1 : ( g_aucConvertToBit[ uiWidth ] + 1 );
    20622429  }
     2430
     2431#if FIX_TICKET_71
     2432  if( iCountShift == 0 )
     2433  {
     2434    a = ( 1 << IC_CONST_SHIFT );
     2435    b = 0;
     2436    return;
     2437  }
     2438#endif
    20632439
    20642440  xy += xx >> IC_REG_COST_SHIFT;
     
    21772553  // find contour for texture luma block
    21782554  UInt iDC = 0;
     2555#if SEC_DBBP_DMM4_THRESHOLD_I0076
     2556  iDC  = piRefBlkY[ 0 ];
     2557  iDC += piRefBlkY[ uiWidth - 1 ];
     2558  iDC += piRefBlkY[ uiWidth * (uiHeight - 1) ];
     2559  iDC += piRefBlkY[ uiWidth * (uiHeight - 1) + uiWidth - 1 ];
     2560  iDC = iDC >> 2;
     2561#else
    21792562  for( UInt k = 0; k < (uiWidth*uiHeight); k++ )
    21802563  {
     
    21842567  Int cuMaxLog2Size = g_aucConvertToBit[g_uiMaxCUWidth]+2;   //
    21852568  iDC = iDC >> (cuMaxLog2Size - pcCU->getDepth(0))*2;        //  iDC /= (uiWidth*uiHeight);
     2569#endif
    21862570
    21872571  piRefBlkY = cTempYuv.getLumaAddr();
  • trunk/source/Lib/TLibCommon/TComPrediction.h

    r884 r1039  
    9090#if H_3D_ARP
    9191  Void xPredInterUniARP         ( TComDataCU* pcCU,                          UInt uiPartAddr,               Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi=false, TComMvField * pNewMvFiled = NULL );
     92#if QC_I0051_ARP_SIMP
     93  Bool xCheckBiInterviewARP     ( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eBaseRefPicList, TComPic*& pcPicYuvCurrTRef, TComMv& cBaseTMV, Int& iCurrTRefPoc );
     94#endif
    9295  Void xPredInterUniARPviewRef( TComDataCU* pcCU, UInt uiPartAddr, Int iWidth, Int iHeight, RefPicList eRefPicList, TComYuv*& rpcYuvPred, Bool bi, TComMvField * pNewMvFiled = NULL );
    9396#endif
     
    176179  PartSize      getPartitionSizeFromDepth(Pel* pDepthPels, UInt uiDepthStride, UInt uiSize);
    177180  Bool          getSegmentMaskFromDepth( Pel* pDepthPels, UInt uiDepthStride, UInt uiWidth, UInt uiHeight, Bool* pMask );
     181#if SHARP_DBBP_SIMPLE_FLTER_I0109
     182  Void          combineSegmentsWithMask( TComYuv* pInYuv[2], TComYuv* pOutYuv, Bool* pMask, UInt uiWidth, UInt uiHeight, UInt uiPartAddr, UInt partSize );
     183#else
    178184  Void          combineSegmentsWithMask( TComYuv* pInYuv[2], TComYuv* pOutYuv, Bool* pMask, UInt uiWidth, UInt uiHeight, UInt uiPartAddr = 0 );
     185#endif
    179186#endif
    180187
  • trunk/source/Lib/TLibCommon/TComRom.cpp

    r976 r1039  
    336336  HALF_PEL,    //   8x8
    337337  FULL_PEL,    //  16x16
     338#if SHARP_DMM1_I0110
     339  FULL_PEL,    //  32x32
     340  FULL_PEL,    //  64x64
     341  FULL_PEL     // 128x128
     342#else
    338343  DOUBLE_PEL,  //  32x32
    339344  DOUBLE_PEL,  //  64x64
    340345  DOUBLE_PEL   // 128x128
     346#endif
    341347};
    342348
     
    348354{ //2x2   4x4   8x8 16x16 32x32 64x64
    349355     0,    4,    7,    8,    8,    0 };
     356
     357#if SHARP_DMM1_I0110
     358Bool g_wedgePattern[32*32];
     359#endif
    350360
    351361extern std::vector< std::vector<TComWedgelet> >   g_dmmWedgeLists;
     
    646656  if( !g_dmmWedgeLists.empty() ) return;
    647657
     658#if SHARP_DMM1_I0110
     659  for( UInt ui = g_aucConvertToBit[DIM_MIN_SIZE]; ui < (g_aucConvertToBit[DIM_MAX_SIZE]); ui++ )
     660#else
    648661  for( UInt ui = g_aucConvertToBit[DIM_MIN_SIZE]; ui < (g_aucConvertToBit[DIM_MAX_SIZE]+1); ui++ )
     662#endif
    649663  {
    650664    UInt uiWedgeBlockSize = ((UInt)DIM_MIN_SIZE)<<ui;
     
    730744  switch( eWedgeRes )
    731745  {
     746#if !SHARP_DMM1_I0110
    732747  case( DOUBLE_PEL ): { uiBlockSize = (uiWidth>>1); break; }
     748#endif
    733749  case(   FULL_PEL ): { uiBlockSize =  uiWidth;     break; }
    734750  case(   HALF_PEL ): { uiBlockSize = (uiWidth<<1); break; }
  • trunk/source/Lib/TLibCommon/TComRom.h

    r976 r1039  
    166166extern const UChar                                           g_dmm3IntraTabIdxBits[6];
    167167
     168#if SHARP_DMM1_I0110
     169extern Bool                                                  g_wedgePattern[32*32];
     170#endif
     171
    168172extern       std::vector< std::vector<TComWedgelet> >        g_dmmWedgeLists;
    169173extern       std::vector< std::vector<TComWedgeRef> >        g_dmmWedgeRefLists;
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r976 r1039  
    139139, m_depthToDisparityF             ( NULL )
    140140#endif
     141#if MTK_SINGLE_DEPTH_MODE_I0095
     142, m_bApplySingleDepthMode         (false)
     143#endif
    141144#endif
    142145{
     
    644647 
    645648  TComPic**             refPicSetStCurr    [2] = { RefPicSetStCurr0, RefPicSetStCurr1 };
     649#if FIX_WARNING
     650  Int numPocStCurr[2] = { (Int)NumPocStCurr0, (Int)NumPocStCurr1 };
     651#else
    646652  Int numPocStCurr[2] = { NumPocStCurr0, NumPocStCurr1 };
     653#endif
    647654
    648655  for (Int li = 0; li < ((m_eSliceType==B_SLICE) ? 2 : 1); li++)
     
    10911098    m_interLayerPredLayerIdc[ layer ] = pSrc->m_interLayerPredLayerIdc[ layer ];
    10921099  }
     1100#endif
     1101#if MTK_SINGLE_DEPTH_MODE_I0095
     1102  m_bApplySingleDepthMode = pSrc->m_bApplySingleDepthMode;
    10931103#endif
    10941104#if H_3D_IC
     
    19421952    m_viewIndex         [i] = -1;
    19431953    m_vpsDepthModesFlag [i] = false;
     1954#if SEC_HLS_CLEANUP_I0100
     1955    m_ivMvScalingFlag[i] = true;
     1956#else
    19441957    m_ivMvScalingFlag = true;
     1958#endif
     1959#if SEPARATE_FLAG_I0085
     1960    m_bIVPFlag [i]      = false;
     1961#endif
    19451962#endif
    19461963
     
    19741991#endif
    19751992#endif
     1993#if MTK_I0099_VPS_EX2
     1994    m_bLimQtPredFlag       [ i ] = false;
     1995#endif
    19761996#if H_3D_VSP
    19771997    m_viewSynthesisPredFlag[ i ] = false;
     
    19822002#if H_3D_INTER_SDC
    19832003    m_bInterSDCFlag        [ i ] = false;
     2004#endif
     2005#if SEPARATE_FLAG_I0085
     2006    m_bIVPFlag             [ i ] = false;
    19842007#endif
    19852008#if H_3D_DBBP
     
    25022525, m_pcmLog2MaxSize            (  5)
    25032526, m_uiPCMLog2MinSize          (  7)
     2527#if !MTK_I0099_VPS_EX2
    25042528#if H_3D_QTLPC
    25052529, m_bUseQTL                   (false)
    25062530, m_bUsePC                    (false)
     2531#endif
    25072532#endif
    25082533, m_bitDepthY                 (  8)
     
    27742799    // allocate some memory and initialize with default mapping
    27752800    m_iNumDepthmapValues[i] = ((1 << m_uiDepthViewBitDepth)-1)+1;
     2801#if !FIX_TICKET_77
    27762802    m_iBitsPerDepthValue[i] = numBitsForValue(m_iNumDepthmapValues[i]);
    2777 
     2803#endif
    27782804    m_iDepthValue2Idx[i]    = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]);
    27792805    m_iIdx2DepthValue[i]    = (Int*) xMalloc(Int, m_iNumDepthmapValues[i]);
     
    28642890  // update DLT variables
    28652891  m_iNumDepthmapValues[layerIdInVps] = iNumDepthValues;
     2892#if !FIX_TICKET_77
    28662893  m_iBitsPerDepthValue[layerIdInVps] = numBitsForValue(m_iNumDepthmapValues[layerIdInVps]);
     2894#endif
    28672895}
    28682896
  • trunk/source/Lib/TLibCommon/TComSlice.h

    r976 r1039  
    798798#if H_3D_IV_MERGE
    799799  Bool        m_ivMvPredFlag             [ MAX_NUM_LAYERS ];
     800#if SEC_HLS_CLEANUP_I0100
     801  Bool        m_ivMvScalingFlag          [ MAX_NUM_LAYERS ];
     802#endif
    800803#if H_3D_SPIVMP
    801804  Int         m_iSubPULog2Size           [MAX_NUM_LAYERS   ];
     805#if MTK_I0099_VPS_EX2
     806  Int         m_iSubPUMPILog2Size        [MAX_NUM_LAYERS   ];
     807#else
    802808  Int         m_iSubPUMPILog2Size;
    803809#endif
     810#endif
     811#endif
     812#if MTK_I0099_VPS_EX2
     813  Bool        m_bLimQtPredFlag           [ MAX_NUM_LAYERS ];
    804814#endif
    805815#if H_3D_VSP
     
    810820#endif
    811821  Bool        m_vpsDepthModesFlag        [MAX_NUM_LAYERS   ];
     822#if SEPARATE_FLAG_I0085
     823  Bool        m_bIVPFlag                 [MAX_NUM_LAYERS   ];
     824#endif
    812825
    813826#if H_3D
     
    817830  Int         ***m_aaaiCodedScale ;
    818831  Int         ***m_aaaiCodedOffset;
     832
     833#if !SEC_HLS_CLEANUP_I0100
    819834  Bool        m_ivMvScalingFlag;
     835#endif
     836
    820837#endif
    821838#if H_3D_INTER_SDC
     
    11301147  Int     getSubPULog2Size(Int layerIdInVps)           { return m_iSubPULog2Size[layerIdInVps]; }
    11311148  Void    setSubPULog2Size(Int layerIdInVps, Int u)    { m_iSubPULog2Size[layerIdInVps] = u;}
     1149#if MTK_I0099_VPS_EX2
     1150  Int     getSubPUMPILog2Size(Int layerIdInVps)           { return m_iSubPUMPILog2Size[layerIdInVps]; }
     1151  Void    setSubPUMPILog2Size(Int layerIdInVps, Int u)    { m_iSubPUMPILog2Size[layerIdInVps] = u;}
     1152#else
    11321153  Int     getSubPUMPILog2Size( )           { return m_iSubPUMPILog2Size; }
    11331154  Void    setSubPUMPILog2Size( Int u )     { m_iSubPUMPILog2Size = u;    }
    11341155#endif
     1156#endif
     1157#endif
     1158#if MTK_I0099_VPS_EX2
     1159  Void    setLimQtPredFlag    ( Int layerIdInVps, Bool val )  { m_bLimQtPredFlag[ layerIdInVps ] = val; }
     1160  Bool    getLimQtPredFlag    ( Int layerIdInVps ) { return m_bLimQtPredFlag[layerIdInVps];}
    11351161#endif
    11361162#if H_3D_VSP
     
    11441170  Void    setVpsDepthModesFlag( Int layerIdInVps, Bool val )               { m_vpsDepthModesFlag[ layerIdInVps ] = val; }
    11451171  Bool    getVpsDepthModesFlag( Int layerIdInVps )                         { return m_vpsDepthModesFlag[ layerIdInVps ]; }
    1146 
     1172#if SEPARATE_FLAG_I0085
     1173  Void    setIVPFlag( Int layerIdInVps, Bool val )                    { m_bIVPFlag[ layerIdInVps ] = val; }
     1174  Bool    getIVPFlag( Int layerIdInVps )                              { return m_bIVPFlag[ layerIdInVps ]; }
     1175#endif
     1176
     1177#if SEC_HLS_CLEANUP_I0100
     1178  Bool    getIvMvScalingFlag   ( Int layerIdInVps )                        { return m_ivMvScalingFlag[ layerIdInVps ]; }
     1179  Void    setIvMvScalingFlag   (Int layerIdInVps, Bool b )                 { m_ivMvScalingFlag[ layerIdInVps ] = b;    } 
     1180#else
    11471181  Bool    getIvMvScalingFlag   (  )                       { return m_ivMvScalingFlag; }
    11481182  Void    setIvMvScalingFlag   ( Bool b )                 { m_ivMvScalingFlag = b;    } 
     1183#endif
     1184
    11491185#if H_3D_INTER_SDC
    11501186  Bool    getInterSDCFlag      ( Int layerIdInVps )           { return m_bInterSDCFlag[layerIdInVps]; }
     
    11711207  Bool        m_bInterViewDltPredEnableFlag[ MAX_NUM_LAYERS ];
    11721208
     1209#if !FIX_TICKET_77
    11731210  Int         m_iBitsPerDepthValue       [ MAX_NUM_LAYERS ];
     1211#endif
    11741212  Int         m_iNumDepthmapValues       [ MAX_NUM_LAYERS ];
    11751213  Int*        m_iDepthValue2Idx          [ MAX_NUM_LAYERS ];
     
    11981236  UInt    getDepthViewBitDepth()                          { return m_uiDepthViewBitDepth; }
    11991237
     1238#if !FIX_TICKET_77
    12001239  Int     getBitsPerDepthValue( Int layerIdInVps )        { return getUseDLTFlag(layerIdInVps)?m_iBitsPerDepthValue[layerIdInVps]:g_bitDepthY; }
     1240#endif
    12011241  Int     getNumDepthValues( Int layerIdInVps )           { return getUseDLTFlag(layerIdInVps)?m_iNumDepthmapValues[layerIdInVps]:((1 << g_bitDepthY)-1); }
    12021242  Int     depthValue2idx( Int layerIdInVps, Pel value )   { return getUseDLTFlag(layerIdInVps)?m_iDepthValue2Idx[layerIdInVps][value]:value; }
     1243#if RWTH_DLT_CLIP_I0057
     1244  Pel     idx2DepthValue( Int layerIdInVps, UInt uiIdx )  { return getUseDLTFlag(layerIdInVps)?m_iIdx2DepthValue[layerIdInVps][ClipY(uiIdx)]:uiIdx; }
     1245#else
    12031246  Pel     idx2DepthValue( Int layerIdInVps, UInt uiIdx )  { return getUseDLTFlag(layerIdInVps)?m_iIdx2DepthValue[layerIdInVps][uiIdx]:uiIdx; }
     1247#endif
    12041248  Void    setDepthLUTs( Int layerIdInVps, Int* idx2DepthValue = NULL, Int iNumDepthValues = 0 );
    12051249#if H_3D_DELTA_DLT
     
    14661510  Bool        m_useAMP;
    14671511
     1512#if !MTK_I0099_VPS_EX2
    14681513#if H_3D_QTLPC
    14691514  Bool        m_bUseQTL;
    14701515  Bool        m_bUsePC;
     1516#endif
    14711517#endif
    14721518  // Parameter
     
    17321778
    17331779#endif
     1780#if !MTK_I0099_VPS_EX2
    17341781#if H_3D_QTLPC
    17351782  Void setUseQTL( Bool b ) { m_bUseQTL = b;    }
     
    17371784  Void setUsePC ( Bool b ) { m_bUsePC  = b;    }
    17381785  Bool getUsePC ()         { return m_bUsePC;  }
     1786#endif
    17391787#endif
    17401788#if H_MV
     
    22052253  UInt         m_aiDDDShift    [MAX_NUM_LAYERS];
    22062254#endif
    2207 
     2255#if MTK_SINGLE_DEPTH_MODE_I0095
     2256  Bool      m_bApplySingleDepthMode;
     2257#endif
    22082258public:
    22092259  TComSlice();
     
    22752325#if H_3D
    22762326  TComPic*  getTexturePic       ()                              { return  m_ivPicsCurrPoc[0][ m_viewIndex ]; }
     2327#endif
     2328#if MTK_SINGLE_DEPTH_MODE_I0095
     2329  Void      setApplySingleDepthMode( Bool b )                                { m_bApplySingleDepthMode = b; }
     2330  Bool      getApplySingleDepthMode()                                        { return m_bApplySingleDepthMode; }
    22772331#endif
    22782332#if H_3D_IC
     
    25092563  Int* getDepthToDisparityF( Int refViewIdx ) { return m_depthToDisparityF[ refViewIdx ]; };
    25102564  Bool getVpsDepthModesFlag  ()  { return getVPS()->getVpsDepthModesFlag( getVPS()->getLayerIdInVps( m_layerId ) ); }
    2511 
     2565#if SEPARATE_FLAG_I0085
     2566  Bool getIVPFlag       ()  { return getVPS()->getIVPFlag( getVPS()->getLayerIdInVps( m_layerId ) ); }
     2567#endif
    25122568#endif
    25132569#if H_MV
  • trunk/source/Lib/TLibCommon/TComWedgelet.cpp

    r655 r1039  
    6868                                                            m_uiHeight ( rcWedge.m_uiHeight  ),
    6969                                                            m_pbPattern( (Bool*)xMalloc( Bool, (m_uiWidth * m_uiHeight) ) )
     70#if SHARP_DMM1_I0110
     71                                                            ,m_pbScaledPattern( g_wedgePattern )
     72#endif
    7073{
    7174  ::memcpy( m_pbPattern, rcWedge.m_pbPattern, sizeof(Bool) * (m_uiWidth * m_uiHeight));
     
    8588
    8689  m_pbPattern = (Bool*)xMalloc( Bool, (m_uiWidth * m_uiHeight) );
     90#if SHARP_DMM1_I0110
     91  m_pbScaledPattern = g_wedgePattern;
     92#endif
    8793}
    8894
     
    181187  switch( m_eWedgeRes )
    182188  {
     189#if !SHARP_DMM1_I0110
    183190  case( DOUBLE_PEL ): { uiTempBlockSize =  m_uiWidth;     uhXs = (m_uhXs<<1); uhYs = (m_uhYs<<1); uhXe = (m_uhXe<<1); uhYe = (m_uhYe<<1); } break;
     191#endif
    184192  case(   FULL_PEL ): { uiTempBlockSize =  m_uiWidth;     uhXs =  m_uhXs;     uhYs =  m_uhYs;     uhXe =  m_uhXe;     uhYe =  m_uhYe;     } break;
    185193  case(   HALF_PEL ): { uiTempBlockSize = (m_uiWidth<<1); uhXs =  m_uhXs;     uhYs =  m_uhYs;     uhXe =  m_uhXe;     uhYe =  m_uhYe;     } break;
    186194  }
    187195
     196#if !SHARP_DMM1_I0110
    188197  if( m_eWedgeRes == DOUBLE_PEL) // adjust line-end for DOUBLE_PEL resolution
    189198  {
     
    194203    if( m_uhOri == 5 ) { uhXs = uiTempBlockSize-1; }
    195204  }
     205#endif
    196206
    197207  Bool* pbTempPattern = new Bool[ (uiTempBlockSize * uiTempBlockSize) ];
     
    223233  switch( m_eWedgeRes )
    224234  {
     235#if !SHARP_DMM1_I0110
    225236  case( DOUBLE_PEL ): { for( UInt k = 0; k < (m_uiWidth * m_uiHeight); k++ ) { m_pbPattern[k] = pbTempPattern[k]; }; } break;
     237#endif
    226238  case(   FULL_PEL ): { for( UInt k = 0; k < (m_uiWidth * m_uiHeight); k++ ) { m_pbPattern[k] = pbTempPattern[k]; }; } break;
    227239  case(   HALF_PEL ): // sub-sampling by factor 2
     
    315327}
    316328
     329#if SHARP_DMM1_I0110
     330Bool* TComWedgelet::getScaledPattern(UInt uiDstSize)
     331{
     332    Bool *pbSrcPat = this->getPattern();
     333    UInt uiSrcSize = this->getStride();
     334
     335    Int scale = (g_aucConvertToBit[uiDstSize] - g_aucConvertToBit[uiSrcSize]);
     336    assert(scale>=0);
     337    for (Int y=0; y<uiDstSize; y++)
     338    {
     339       for (Int x=0; x<uiDstSize; x++)
     340       {
     341           Int srcX = x>>scale;
     342           Int srcY = y>>scale;
     343           m_pbScaledPattern[y*uiDstSize + x] = pbSrcPat[ srcY*uiSrcSize + srcX ];
     344       }
     345   }
     346   return m_pbScaledPattern;
     347}
     348#endif
     349
    317350TComWedgeNode::TComWedgeNode()
    318351{
  • trunk/source/Lib/TLibCommon/TComWedgelet.h

    r773 r1039  
    5858#define DIM_NO_IDX     MAX_UINT
    5959
     60#if HS_DMM_SIGNALLING_I0120
     61__inline UInt getDimType  ( Int intraMode )
     62{
     63    Int dimType = intraMode-DIM_OFFSET;
     64    return (dimType >= 0 && dimType < DIM_NUM_TYPE) ? (UInt)dimType : DIM_NO_IDX;
     65}
     66#else
    6067__inline UInt getDimType  ( Int intraMode ) { Int dimType = (intraMode-DIM_OFFSET)/2; return (dimType >= 0 && dimType < DIM_NUM_TYPE) ? (UInt)dimType : DIM_NO_IDX; }
     68#endif
    6169__inline Bool isDimMode   ( Int intraMode ) { return (getDimType( intraMode ) < DIM_NUM_TYPE); }
     70#if !HS_DMM_SIGNALLING_I0120
    6271__inline Bool isDimDeltaDC( Int intraMode ) { return (isDimMode( intraMode ) && ((intraMode-DIM_OFFSET)%2) == 1); }
     72#endif
    6373#endif
    6474
     
    6979enum WedgeResolution
    7080{
     81#if !SHARP_DMM1_I0110
    7182  DOUBLE_PEL,
     83#endif
    7284  FULL_PEL,
    7385  HALF_PEL
     
    94106
    95107  Bool* m_pbPattern;
     108#if SHARP_DMM1_I0110
     109  Bool* m_pbScaledPattern;
     110#endif
    96111
    97112  Void  xGenerateWedgePattern();
     
    119134  Bool            getIsCoarse() { return m_bIsCoarse; }
    120135  UInt            getAng     () { return m_uiAng; }
     136#if SHARP_DMM1_I0110
     137  Bool*           getScaledPattern(UInt uiWidth);
     138#endif
    121139
    122140  Void  setWedgelet( UChar uhXs, UChar uhYs, UChar uhXe, UChar uhYe, UChar uhOri, WedgeResolution eWedgeRes, Bool bIsCoarse = false );
  • trunk/source/Lib/TLibCommon/TComYuv.cpp

    r872 r1039  
    689689  UInt iSrc1Stride = pcYuvSrc1->getStride();
    690690  UInt iDstStride  = getStride();
     691#if QC_I0129_ARP_FIX
     692  Int iIFshift = IF_INTERNAL_PREC - g_bitDepthY;
     693  Int iOffSet  = ( 1 << ( iIFshift - 1 ) ) + IF_INTERNAL_OFFS;
     694#endif
    691695  for ( y = uiHeight-1; y >= 0; y-- )
    692696  {
     
    696700      if( bClip )
    697701      {
     702#if QC_I0129_ARP_FIX
     703        pDst[x] = ClipY( ( pDst[x] + iOffSet ) >> iIFshift );
     704#else
    698705        pDst[x] = ClipY( pDst[x] );
     706#endif
    699707      }
    700708    }
     
    719727  UInt  iSrc1Stride = pcYuvSrc1->getCStride();
    720728  UInt  iDstStride  = getCStride();
     729#if QC_I0129_ARP_FIX
     730  Int iIFshift = IF_INTERNAL_PREC - g_bitDepthC;
     731  Int iOffSet  = ( 1 << ( iIFshift - 1 ) ) + IF_INTERNAL_OFFS;
     732#endif
    721733  for ( y = uiHeight-1; y >= 0; y-- )
    722734  {
     
    727739      if( bClip )
    728740      {
     741#if QC_I0129_ARP_FIX
     742        pDstU[x] = ClipC( ( pDstU[x] + iOffSet ) >> iIFshift );
     743        pDstV[x] = ClipC( ( pDstV[x] + iOffSet ) >> iIFshift );
     744#else
    729745        pDstU[x] = ClipC( pDstU[x] );
    730746        pDstV[x] = ClipC( pDstV[x] );
     747#endif
    731748      }
    732749    }
     
    744761{
    745762  subtractARPLuma  ( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth    , uiHeight    );
     763#if SHARP_ARP_CHROMA_I0104
     764  if (uiWidth > 8)
     765#endif
    746766  subtractARPChroma( pcYuvSrc0, pcYuvSrc1,  uiAbsPartIdx, uiWidth>>1 , uiHeight>>1 );
    747767}
     
    803823{
    804824  multiplyARPLuma( uiAbsPartIdx , uiWidth , uiHeight , dW );
     825#if SHARP_ARP_CHROMA_I0104
     826  if (uiWidth > 8)
     827#endif
    805828  multiplyARPChroma( uiAbsPartIdx , uiWidth >> 1 , uiHeight >> 1 , dW );
    806829}
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r976 r1039  
    6868#define BUG_FIX_TK65        1
    6969
     70#define MTK_I0093           1
    7071/////////////////////////////////////////////////////////////////////////////////////////
    7172///////////////////////////////////   MAJOR DEFINES   /////////////////////////////////// 
     
    123124                                              // MTK_LOW_LATENCY_IC_ENCODING_H0086  Low-latency IC encoding in JCT3V-H0086
    124125
     126#define SEC_IC_NEIGHBOR_CLIP_I0080        1   // Clipping of neighboring sample position, JCT3V-I0080
     127
    125128
    126129#if H_3D_NBDV
     
    172175                                              // MTK_DIS_SPBIP8X4_H0205        Disable bi-prediction for 8x4 and 4x8 sub PU and remove the SPIVMP 2Nx2N restriction
    173176                                              // SEC_ADAPT_DISABLE_IVMP        Disalbing IVMP merge candidates when IC is enabled, JCT3V-H0070
     177
     178#define SEC_SIMP_SHIFTED_DV_I0086         1   // Simplification of Shifted DV candidate, JCT3V-I0086
    174179
    175180#define H_3D_TMVP                         1   // QC_TMVP_C0047
     
    215220                                              // MTK_DLT_CODING_FIX_H0091
    216221
     222#define MTK_SINGLE_DEPTH_MODE_I0095       1   // Single depth mode proposed in JCT3V-I0095
     223#if MTK_SINGLE_DEPTH_MODE_I0095
     224#define MTK_SINGLE_DEPTH_MODE_CANDIDATE_LIST_SIZE            2 // size of the sample candidate list
     225#endif
    217226
    218227#define H_3D_INTER_SDC                    1   // INTER SDC, Inter simplified depth coding
     
    233242                                              // H_3D_FIX_DBBP_IVMP        Fix . Enable IVMP is always disabled, when DBBP is enabled. The original intention is to disable Sub-PU IVMP when DBBP is enabled, not to disable IVMP itself.
    234243
     244#define SEC_DBBP_EXPLICIT_SIG_I0077       1   // Remove the partition derivation and signal dbbp_flag only when the partion mode is 2NxN/Nx2N, JCT3V-I0077
     245#define SEC_DBBP_DISALLOW_8x8_I0078       1   // Disallow DBBP in 8x8 CU, JCT3V-I0078
     246#define SHARP_DBBP_SIMPLE_FLTER_I0109     1   // Simple condition and one dimensional dilter for DBBP
     247#define SEC_DBBP_DMM4_THRESHOLD_I0076     1   // Simplification of threshold derivation for DBBP and DMM4, JCT3V-I0076
     248
    235249
    236250#define H_3D_DDD                          1   // Disparity derived depth coding
     
    238252#define H_3D_FCO                          0   // Flexible coding order for 3D
    239253
    240 
     254#define SCU_HS_FAST_INTRA_SDC_I0123       1
    241255
    242256// OTHERS
     
    250264#endif
    251265
     266#define MTK_I0099_VPS_EX2                 1  ///< JCT3V-I0099, sub-PU size signaling and lim_qt_pred_flag in VPS extension 2
     267#define MTK_I0099_FIX                     1  ///< Fix the problem of removing encoder only QTL
     268
    252269// Rate Control
    253270#define KWU_FIX_URQ                       1
     
    255272#define KWU_RC_MADPRED_E0227              0  ///< JCT3V-E0227, inter-view MAD prediction
    256273
     274#define SEC_VPS_CLEANUP_I0090             1
     275#define SEC_HLS_CLEANUP_I0100             1
     276
    257277#endif // H_3D
    258278
     
    262282///////////////////////////////////   DERIVED DEFINES /////////////////////////////////// 
    263283/////////////////////////////////////////////////////////////////////////////////////////
     284
     285// Fixes
     286#define FIX_TICKET_79                     1    // Unused VSP code
     287#define FIX_TICKET_75                     1    // Bi-pred restriction bug in VSP
     288#define FIX_TICKET_68                     1    // MV clipping bug in the sub-PU MPI default MV generation
     289#define FIX_TICKET_71                     1    // IC parameters is meaningless in HTM when no training samples are available
     290#define FIX_TICKET_77                     1    // Unused variable m_iBitsPerDepthValue
     291#define FIX_TICKET_76                     1    // unused functions
     292#define FIX_TICKET_62                     1    // buffer overflow for print
     293#define FIX_TICKET_61                     1    // layerIdsInSets size check
    264294
    265295///// ***** VIEW SYNTHESIS OPTIMIZAION *********
     
    283313#if H_3D_ARP
    284314#define H_3D_ARP_WFNR                     3
     315#define QC_I0129_ARP_FIX                  1
     316#define QC_I0051_ARP_SIMP                 1
     317#define SHARP_ARP_CHROMA_I0104            1
     318#define MTK_I0072_IVARP_SCALING_FIX       1
    285319#endif
    286320
     
    290324#define H_3D_DIM_SDC                      1   // Simplified Depth Coding method
    291325#define H_3D_DIM_DLT                      1   // Depth Lookup Table
     326#define HS_DMM_SIGNALLING_I0120  1   
     327#define SHARP_DMM1_I0110                  1   // LUT size reduction for DMM1 proposed in JCT3V-I0110
     328#define FIX_WARNING                       1   // fix narrowing conversion of NumPocStCurr0,NumPocStCurr1 at TComSlice.cpp
     329#define FAST_SDC_OFFSET_DECISION_I0084    1
     330#define SEPARATE_FLAG_I0085               1
    292331
    293332#if H_3D_DIM_DLT
    294333#define H_3D_DELTA_DLT                    1
     334#define RWTH_DLT_CLIP_I0057               1
    295335#endif
    296336#define H_3D_DIM_ENC                      1   // Depth Intra encoder optimizations, includes:
    297337                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
    298338                                              // LG_ZEROINTRADEPTHRESI_A0087
     339#define HHI_DMM4_ENC_I0066                1
    299340#endif
    300341///// ***** VIEW SYNTHESIS PREDICTION *********
     
    381422
    382423// OTHERS
    383 //#define H_MV_HLS_8_HSB_Q0041_03  0 // #3  (HS     /Q0041/hybrid scalability) The proposed text was endorsed, with non-editorial open issues considered as follows
    384 :// #define H_MV_HLS_7_OTHER_P0187_1          0 // (OTHER/P0187/NoOutputOfPriorPicsFlag) #1 Inference of NoOutputOfPriorPicsFlag and proposes to take into account colour format and bit depth for the inference in addition to spatial resolution
     424//#define H_MV_HLS_8_HSB_Q0041_03  0 // #3  (HS     /Q0041/hybrid scalability) The proposed text was endorsed, with non-editorial open issues considered as follows ?// #define H_MV_HLS_7_OTHER_P0187_1          0 // (OTHER/P0187/NoOutputOfPriorPicsFlag) #1 Inference of NoOutputOfPriorPicsFlag and proposes to take into account colour format and bit depth for the inference in addition to spatial resolution
    385425//#define H_MV_HLS_8_MIS_Q0078_24  0 // #24 (MISC   /Q0078/scan and pic type) , Items 3 b,c and 4, clarifying which pictures in an output layer sets are applied the values of general_progressive_source_flag, general_interlaced_source_flag, general_non_packed_constraint_flag and general_frame_only_constraint_flag.
    386426//#define H_MV_HLS_7_HRD_P0138_6   0 //     (HRD/P0138/HRD parameters for bitstreams excluding) #6 Decision: Adopt (as revised in updated contribution, with the specification of a flag in the BP SEI (HRD/P0192/sub-DPB) #12 Establish sub-DPBs based on the representation format indicated at the VPS level. It was suggested that the expressed shared capacity limit would need to be less than or equal to the sum of the individual capacity limits. Decision: Adopt as modified. Further study is encouraged on profile/level constraint selections.
Note: See TracChangeset for help on using the changeset viewer.