Changeset 827 in 3DVCSoftware for branches/HTM-9.3-dev0/source/Lib/TLibCommon


Ignore:
Timestamp:
5 Feb 2014, 20:06:56 (11 years ago)
Author:
tech
Message:

Merged 9.3-dev3-Fix@824

Location:
branches/HTM-9.3-dev0/source/Lib/TLibCommon
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/ContextTables.h

    r826 r827  
    115115
    116116#if H_3D_DIM
     117#if QC_GENERIC_SDC_G0122
     118#define NUM_DEPTH_INTRA_MODE_CTX      1       ///< number of context models for depth intra modes
     119#else
    117120#define NUM_DEPTH_INTRA_MODE_CTX      8       ///< number of context models for depth intra modes
     121#endif
    118122#define NUM_DDC_FLAG_CTX              2       ///< number of context models for deltaDC flag (DMM or RBC)
    119123#define NUM_DDC_DATA_CTX              1       ///< number of context models for deltaDC data (DMM or RBC)
     
    121125#define NUM_DMM1_DATA_CTX             1       ///< number of context models for DMM1 data
    122126#endif
     127#if QC_GENERIC_SDC_G0122
     128#define NUM_ANGLE_FLAG_CTX            3
     129#if !QC_SDC_UNIFY_G0130
     130#define NUM_INTRASDC_FLAG_CTX         3
     131#endif
     132#endif
    123133#endif
    124134
     
    128138#endif
    129139
    130 #if H_3D_INTER_SDC
     140#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    131141#define NUM_INTER_SDC_FLAG_CTX        1      ///< number of context models for inter SDC flag
    132142#define NUM_INTER_SDC_SIGN_FLAG_CTX   1      ///< number of context models for sign of inter SDC residual
     
    134144#endif
    135145
     146#if QC_SDC_UNIFY_G0130
     147#define NUM_SDC_FLAG_CTX              1      ///< number of context
     148#endif
    136149#if H_3D_DBBP
    137150#define DBBP_NUM_FLAG_CTX                 1
     
    414427#endif
    415428#if H_3D_DIM
     429#if QC_GENERIC_SDC_G0122
     430static const UChar
     431INIT_DEPTH_INTRA_MODE[3][NUM_DEPTH_INTRA_MODE_CTX] =
     432{
     433  { 154, },
     434  { 154, },
     435  { 154, }
     436};
     437#else
    416438static const UChar
    417439INIT_DEPTH_INTRA_MODE[3][NUM_DEPTH_INTRA_MODE_CTX] =
     
    421443    {64, 0, CNU, CNU, 168, 109,   0, 0}
    422444};
     445#endif
     446
     447#if QC_GENERIC_SDC_G0122
     448static const UChar
     449INIT_ANGLE_FLAG[3][NUM_ANGLE_FLAG_CTX] =
     450{
     451  { 154, 155, 156 },
     452  { 141, 185, 214 },
     453  { 155, 170, 157 },
     454};
     455#if !QC_SDC_UNIFY_G0130
     456static const UChar
     457INIT_INTRASDC_FLAG[3][NUM_INTRASDC_FLAG_CTX] =
     458{
     459  { 214, 229, 230 },
     460  { 215, 202, 174 },
     461  { 213, 201, 246 },
     462};
     463#endif
     464#endif
    423465
    424466static const UChar
     
    463505#endif
    464506
    465 #if H_3D_INTER_SDC
     507#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    466508static const UChar
    467509INIT_INTER_SDC_FLAG[3][NUM_INTER_SDC_FLAG_CTX] =
     
    489531#endif
    490532//! \}
     533#if QC_SDC_UNIFY_G0130
     534static const UChar
     535INIT_SDC_FLAG[3][NUM_SDC_FLAG_CTX] =
     536{
     537  { 154 }, 
     538  { 154 },
     539  { 154 },
     540};
     541#endif
    491542
    492543#if H_3D_DBBP
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TComDataCU.cpp

    r826 r827  
    123123#if H_3D_DIM_SDC
    124124  m_pbSDCFlag             = NULL;
     125#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     126  for( Int i = 0; i < 4; i++ )
     127  {
     128    m_apSegmentDCOffset[i]  = NULL;
     129  }
     130#else
    125131  m_apSegmentDCOffset[0]  = NULL;
    126132  m_apSegmentDCOffset[1]  = NULL;
     133#endif
    127134#endif
    128135#endif
     
    146153#endif
    147154#if H_3D_INTER_SDC
     155#if !QC_SDC_UNIFY_G0130
    148156  m_pbInterSDCFlag       = NULL;
    149157  for( Int i = 0; i < 4; i++ )
     
    151159    m_apSegmentInterDCOffset[i] = NULL;
    152160  }
     161#endif
     162#if !SEC_INTER_SDC_G0101
    153163  m_pucInterSDCMask       = NULL;
     164#endif
    154165#endif
    155166#if H_3D_DBBP
     
    280291#if H_3D_DIM_SDC
    281292    m_pbSDCFlag             = (Bool*)xMalloc(Bool, uiNumPartition);
     293#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     294    for( Int i = 0; i < 4; i++ )
     295    {
     296      m_apSegmentDCOffset[i]  = (Pel*)xMalloc(Pel, uiNumPartition);
     297    }
     298#else
    282299    m_apSegmentDCOffset[0]  = (Pel*)xMalloc(Pel, uiNumPartition);
    283300    m_apSegmentDCOffset[1]  = (Pel*)xMalloc(Pel, uiNumPartition);
    284301#endif
    285302#endif
    286 #if H_3D_INTER_SDC
     303#endif
     304#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    287305    m_pbInterSDCFlag     = (Bool*  )xMalloc(Bool,   uiNumPartition);
    288306    for( Int i = 0; i < 4; i++ )
     
    300318    m_acCUMvField[1].setNumPartition(uiNumPartition );
    301319  }
     320#if !SEC_INTER_SDC_G0101
    302321#if H_3D_INTER_SDC
    303322  m_pucInterSDCMask     = (UChar*  )xMalloc(UChar,    g_uiMaxCUHeight*g_uiMaxCUWidth);
     323#endif
    304324#endif
    305325  m_sliceStartCU        = (UInt*  )xMalloc(UInt, uiNumPartition);
     
    421441#if H_3D_DIM_SDC
    422442    if ( m_pbSDCFlag            ) { xFree(m_pbSDCFlag);             m_pbSDCFlag             = NULL; }
     443#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     444    for( Int i = 0; i < 4; i++ )
     445    {
     446      if ( m_apSegmentDCOffset[i] ) { xFree(m_apSegmentDCOffset[i]);  m_apSegmentDCOffset[i]  = NULL; }
     447    }
     448#else
    423449    if ( m_apSegmentDCOffset[0] ) { xFree(m_apSegmentDCOffset[0]);  m_apSegmentDCOffset[0]  = NULL; }
    424450    if ( m_apSegmentDCOffset[1] ) { xFree(m_apSegmentDCOffset[1]);  m_apSegmentDCOffset[1]  = NULL; }
    425451#endif
    426452#endif   
    427 #if H_3D_INTER_SDC
     453#endif   
     454#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    428455    if ( m_pbInterSDCFlag     ) { xFree(m_pbInterSDCFlag);      m_pbInterSDCFlag    = NULL; }
    429456    for(Int i = 0; i < 4; i++ )
     
    436463#endif
    437464  }
     465#if !SEC_INTER_SDC_G0101
    438466#if H_3D_INTER_SDC
    439467  if ( m_pucInterSDCMask     ) { xFree(m_pucInterSDCMask);      m_pucInterSDCMask    = NULL; }
     468#endif
    440469#endif
    441470  m_pcCUAboveLeft       = NULL;
     
    584613    m_pbSDCFlag[ui] = pcFrom->m_pbSDCFlag[ui];
    585614#endif
    586 #if H_3D_INTER_SDC
     615#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    587616    m_pbInterSDCFlag[ui] = pcFrom->m_pbInterSDCFlag[ui];
    588617#endif
     
    655684#if H_3D_DIM_SDC
    656685    memset( m_pbSDCFlag             + firstElement,     0,                numElements * sizeof( *m_pbSDCFlag            ) );
     686#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     687    for( Int i = 0; i < 4; i++ )
     688    {
     689      memset( m_apSegmentDCOffset[i]  + firstElement,     0,                numElements * sizeof( *m_apSegmentDCOffset[i] ) );
     690    }
     691#else
    657692    memset( m_apSegmentDCOffset[0]  + firstElement,     0,                numElements * sizeof( *m_apSegmentDCOffset[0] ) );
    658693    memset( m_apSegmentDCOffset[1]  + firstElement,     0,                numElements * sizeof( *m_apSegmentDCOffset[1] ) );
    659694#endif
    660695#endif
    661 #if H_3D_INTER_SDC
     696#endif
     697#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    662698    memset( m_pbInterSDCFlag   + firstElement,     0,                    numElements * sizeof( *m_pbInterSDCFlag ) );
    663699    for( Int i = 0; i < 4; i++ )
     
    836872#if H_3D_DIM_SDC
    837873      m_pbSDCFlag           [ui] = false;
     874#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     875      for( Int i = 0; i < 4; i++ )
     876      {
     877        m_apSegmentDCOffset[i][ui] = 0;
     878      }
     879#else
    838880      m_apSegmentDCOffset[0][ui] = 0;
    839881      m_apSegmentDCOffset[1][ui] = 0;
    840882#endif
    841883#endif
    842 #if H_3D_INTER_SDC
     884#endif
     885#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    843886      m_pbInterSDCFlag[ui] = false;
    844887      for( Int i = 0; i < 4; i++ )
     
    9581001#if H_3D_DIM_SDC
    9591002  memset( m_pbSDCFlag,            0, sizeof(Bool) * m_uiNumPartition  );
     1003#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1004  for( Int i = 0; i < 4; i++ )
     1005  {
     1006    memset( m_apSegmentDCOffset[i], 0, sizeof(Pel) * m_uiNumPartition   );
     1007  }
     1008#else
    9601009  memset( m_apSegmentDCOffset[0], 0, sizeof(Pel) * m_uiNumPartition   );
    9611010  memset( m_apSegmentDCOffset[1], 0, sizeof(Pel) * m_uiNumPartition   );
    9621011#endif
    9631012#endif
    964 #if H_3D_INTER_SDC
     1013#endif
     1014#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    9651015  memset( m_pbInterSDCFlag,           0, sizeof( Bool ) * m_uiNumPartition );
    9661016  for( Int i = 0; i < 4; i++ )
     
    10441094#if H_3D_DIM_SDC
    10451095      m_pbSDCFlag           [ui] = pcCU->m_pbSDCFlag            [ uiPartOffset + ui ];
     1096#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1097      for( Int i = 0; i < 4; i++ )
     1098      {
     1099        m_apSegmentDCOffset[i][ui] = pcCU->m_apSegmentDCOffset[i] [ uiPartOffset + ui ];
     1100      }
     1101#else
    10461102      m_apSegmentDCOffset[0][ui] = pcCU->m_apSegmentDCOffset[0] [ uiPartOffset + ui ];
    10471103      m_apSegmentDCOffset[1][ui] = pcCU->m_apSegmentDCOffset[1] [ uiPartOffset + ui ];
    10481104#endif
    10491105#endif
    1050 #if H_3D_INTER_SDC
     1106#endif
     1107#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    10511108      m_pbInterSDCFlag      [ui] = pcCU->m_pbInterSDCFlag    [ uiPartOffset + ui ];
    10521109      for( Int i = 0; i < 4; i++ )
     
    12081265#if H_3D_DIM_SDC
    12091266  m_pbSDCFlag               = pcCU->getSDCFlag()              + uiPart;
     1267#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1268  for( Int i = 0; i < 4; i++ )
     1269  {
     1270    m_apSegmentDCOffset[i]    = pcCU->getSDCSegmentDCOffset(i)  + uiPart;
     1271  }
     1272#else
    12101273  m_apSegmentDCOffset[0]    = pcCU->getSDCSegmentDCOffset(0)  + uiPart;
    12111274  m_apSegmentDCOffset[1]    = pcCU->getSDCSegmentDCOffset(1)  + uiPart;
    12121275#endif
    12131276#endif 
    1214 #if H_3D_INTER_SDC
     1277#endif 
     1278#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    12151279  m_pbInterSDCFlag          = pcCU->getInterSDCFlag()       + uiPart;
    12161280  for( Int i = 0; i < 4; i++ )
     
    14201484#if H_3D_DIM_SDC
    14211485  memcpy( m_pbSDCFlag             + uiOffset, pcCU->getSDCFlag(),             iSizeInBool  );
     1486#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1487  for( Int i = 0; i < 4; i++ )
     1488  {
     1489    memcpy( m_apSegmentDCOffset[i]  + uiOffset, pcCU->getSDCSegmentDCOffset(i), sizeof( Pel ) * uiNumPartition);
     1490  }
     1491#else
    14221492  memcpy( m_apSegmentDCOffset[0]  + uiOffset, pcCU->getSDCSegmentDCOffset(0), sizeof( Pel ) * uiNumPartition);
    14231493  memcpy( m_apSegmentDCOffset[1]  + uiOffset, pcCU->getSDCSegmentDCOffset(1), sizeof( Pel ) * uiNumPartition);
    14241494#endif
    14251495#endif
    1426 #if H_3D_INTER_SDC
     1496#endif
     1497#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    14271498  memcpy( m_pbInterSDCFlag  + uiOffset, pcCU->getInterSDCFlag(),      iSizeInBool  );
    14281499  for( Int i = 0; i < 4; i++ )
     
    15501621#if H_3D_DIM_SDC
    15511622  memcpy( rpcCU->getSDCFlag()             + m_uiAbsIdxInLCU, m_pbSDCFlag,      iSizeInBool  );
     1623#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1624  for( Int i = 0; i < 4; i++ )
     1625  {
     1626    memcpy( rpcCU->getSDCSegmentDCOffset(i) + m_uiAbsIdxInLCU, m_apSegmentDCOffset[i], sizeof( Pel ) * m_uiNumPartition);
     1627  }
     1628#else
    15521629  memcpy( rpcCU->getSDCSegmentDCOffset(0) + m_uiAbsIdxInLCU, m_apSegmentDCOffset[0], sizeof( Pel ) * m_uiNumPartition);
    15531630  memcpy( rpcCU->getSDCSegmentDCOffset(1) + m_uiAbsIdxInLCU, m_apSegmentDCOffset[1], sizeof( Pel ) * m_uiNumPartition);
    15541631#endif
    15551632#endif
    1556 #if H_3D_INTER_SDC
     1633#endif
     1634#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    15571635  memcpy( rpcCU->getInterSDCFlag() + m_uiAbsIdxInLCU, m_pbInterSDCFlag,      iSizeInBool  );
    15581636  for( Int i = 0;i < 4; i++ )
     
    16671745#if H_3D_DIM_SDC
    16681746  memcpy( rpcCU->getSDCFlag()             + uiPartOffset, m_pbSDCFlag,      iSizeInBool  );
     1747#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     1748  for( Int i = 0; i < 4; i++ )
     1749  {
     1750    memcpy( rpcCU->getSDCSegmentDCOffset(i) + uiPartOffset, m_apSegmentDCOffset[i], sizeof( Pel ) * uiQNumPart);
     1751  }
     1752#else
    16691753  memcpy( rpcCU->getSDCSegmentDCOffset(0) + uiPartOffset, m_apSegmentDCOffset[0], sizeof( Pel ) * uiQNumPart);
    16701754  memcpy( rpcCU->getSDCSegmentDCOffset(1) + uiPartOffset, m_apSegmentDCOffset[1], sizeof( Pel ) * uiQNumPart);
    16711755#endif
    16721756#endif
    1673 #if H_3D_INTER_SDC
     1757#endif
     1758#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    16741759  memcpy( rpcCU->getInterSDCFlag() + uiPartOffset, m_pbInterSDCFlag,      iSizeInBool  );
    16751760  for( Int i = 0; i < 4; i++ )
     
    25042589
    25052590#if H_3D_INTER_SDC
     2591#if !QC_SDC_UNIFY_G0130
    25062592Void TComDataCU::setInterSDCFlagSubParts ( Bool bInterSDCFlag, UInt uiAbsPartIdx, UInt uiPartIdx, UInt uiDepth )
    25072593{
     
    25132599  return 0;
    25142600}
    2515 
     2601#endif
     2602
     2603#if !SEC_INTER_SDC_G0101
    25162604Void TComDataCU::xSetInterSDCCUMask( TComDataCU *pcCU, UChar *pMask )
    25172605{
     
    26112699}
    26122700#endif
     2701#endif
     2702
     2703#if QC_GENERIC_SDC_G0122
     2704UInt TComDataCU::getCtxSDCFlag( UInt uiAbsPartIdx )
     2705{
     2706#if QC_SDC_UNIFY_G0130
     2707  return 0;
     2708#else
     2709  TComDataCU* pcTempCU;
     2710  UInt        uiTempPartIdx;
     2711  UInt        uiCtx = 0;
     2712
     2713  // Get BCBP of left PU
     2714  pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     2715  uiCtx    = ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? pcTempCU->getSDCFlag( uiTempPartIdx ) : 0;
     2716
     2717  // Get BCBP of above PU
     2718  pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     2719  uiCtx   += ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? pcTempCU->getSDCFlag( uiTempPartIdx ) : 0;
     2720
     2721  return uiCtx;
     2722#endif
     2723}
     2724
     2725UInt TComDataCU::getCtxAngleFlag( UInt uiAbsPartIdx )
     2726{
     2727  TComDataCU* pcTempCU;
     2728  UInt        uiTempPartIdx;
     2729  UInt        uiCtx = 0;
     2730
     2731  // Get BCBP of left PU
     2732  pcTempCU = getPULeft( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     2733  uiCtx    = ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? ( pcTempCU->getLumaIntraDir( uiTempPartIdx ) < NUM_INTRA_MODE ? 1 : 0 ) : 0;
     2734
     2735  // Get BCBP of above PU
     2736  pcTempCU = getPUAbove( uiTempPartIdx, m_uiAbsIdxInLCU + uiAbsPartIdx );
     2737  uiCtx   += ( pcTempCU && pcTempCU->isIntra( uiTempPartIdx ) ) ? ( pcTempCU->getLumaIntraDir( uiTempPartIdx ) < NUM_INTRA_MODE ? 1 : 0 ) : 0;
     2738
     2739  return uiCtx;
     2740}
     2741#endif
    26132742
    26142743UInt TComDataCU::getCtxInterDir( UInt uiAbsPartIdx )
     
    28382967  if( !getSlice()->getIsDepth() || !isIntra(uiAbsPartIdx) || getPartitionSize(uiAbsPartIdx) != SIZE_2Nx2N )
    28392968    return false;
    2840  
     2969#if QC_GENERIC_SDC_G0122
     2970  if( isDimMode( getLumaIntraDir( uiAbsPartIdx ) ) && !isDimDeltaDC( getLumaIntraDir( uiAbsPartIdx ) ) )
     2971  {
     2972    return true;
     2973  }
     2974 
     2975  if( getLumaIntraDir( uiAbsPartIdx ) < NUM_INTRA_MODE )
     2976  {
     2977    return true;
     2978  }
     2979
     2980  return false;
     2981#endif
    28412982  // check prediction mode
    28422983  UInt uiLumaPredMode = getLumaIntraDir( uiAbsPartIdx ); 
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TComDataCU.h

    r826 r827  
    232232#if H_3D_DIM_SDC
    233233  Bool*         m_pbSDCFlag;
     234#if QC_SDC_UNIFY_G0130 && !SEC_INTER_SDC_G0101
     235  Pel*          m_apSegmentDCOffset[4];
     236#else
    234237  Pel*          m_apSegmentDCOffset[2];
    235238#endif
    236239#endif
     240#endif
    237241#if H_3D_INTER_SDC
     242#if !QC_SDC_UNIFY_G0130
    238243  Bool*         m_pbInterSDCFlag;
    239244  Int*          m_apSegmentInterDCOffset[4];
     245#endif
     246#if !SEC_INTER_SDC_G0101
    240247  UChar*        m_pucInterSDCMask;
     248#endif
    241249#endif
    242250#if H_3D_DBBP
     
    619627  Pel           getSDCSegmentDCOffset( UInt uiSeg, UInt uiPartIdx ) { return m_apSegmentDCOffset[uiSeg][uiPartIdx]; }
    620628  Void          setSDCSegmentDCOffset( Pel pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentDCOffset[uiSeg][uiPartIdx] = pOffset; }
     629#if QC_GENERIC_SDC_G0122
     630  UInt          getCtxSDCFlag          ( UInt   uiAbsPartIdx );
     631  UInt          getCtxAngleFlag        ( UInt   uiAbsPartIdx );
     632#endif
    621633#endif
    622634#endif
    623635#if H_3D_INTER_SDC
     636#if !QC_SDC_UNIFY_G0130
    624637  Bool*         getInterSDCFlag     ()                        { return m_pbInterSDCFlag;               }
    625638  Bool          getInterSDCFlag     ( UInt uiIdx )            { return m_pbInterSDCFlag[uiIdx];        }
     
    630643  Void          setInterSDCSegmentDCOffset( Int pOffset, UInt uiSeg, UInt uiPartIdx) { m_apSegmentInterDCOffset[uiSeg][uiPartIdx] = pOffset; }
    631644
     645#endif
     646#if !SEC_INTER_SDC_G0101
    632647  Void          xSetInterSDCCUMask( TComDataCU *pcCU, UChar *pMask );
    633648
    634649  UChar*        getInterSDCMask     ()                        { return m_pucInterSDCMask;              }
     650#endif
    635651#endif
    636652 
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TComPrediction.cpp

    r821 r827  
    416416
    417417#if H_3D_DIM
    418 Void TComPrediction::predIntraLumaDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc )
     418Void TComPrediction::predIntraLumaDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc
     419#if QC_GENERIC_SDC_G0122
     420  , TComWedgelet* dmm4Segmentation
     421#endif
     422  )
    419423{
    420424  assert( iWidth == iHeight  );
     
    442446    case( DMM4_IDX ):
    443447      {
     448#if QC_GENERIC_SDC_G0122
     449        if( dmm4Segmentation == NULL )
     450        {
     451          dmmSegmentation = new TComWedgelet( iWidth, iHeight );
     452          xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmmSegmentation );
     453        }
     454        else
     455        {
     456          xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmm4Segmentation );
     457          dmmSegmentation = dmm4Segmentation;
     458        }
     459#else
    444460        dmmSegmentation = new TComWedgelet( iWidth, iHeight );
    445461        xPredContourFromTex( pcCU, uiAbsPartIdx, iWidth, iHeight, dmmSegmentation );
     462#endif
    446463      } break;
    447464    default: assert(0);
     
    494511
    495512#if H_3D_DIM_DMM
     513#if QC_GENERIC_SDC_G0122
     514  if( dimType == DMM4_IDX && dmm4Segmentation == NULL ) { dmmSegmentation->destroy(); delete dmmSegmentation; }
     515#else
    496516  if( dimType == DMM4_IDX ) { dmmSegmentation->destroy(); delete dmmSegmentation; }
     517#endif
    497518#endif
    498519}
     
    24642485  if( bL == bT )
    24652486  {
     2487#if SCU_HS_DEPTH_DC_PRED_G0143
     2488    const Int  iTRR = ( patternStride * 2 - 1  ) - srcStride;
     2489    const Int  iLBB = ( patternStride * 2 - 1  ) * srcStride - 1;
     2490    refDC1 = bL ? ( ptrSrc[iTR] + ptrSrc[iLB] )>>1 : (abs(ptrSrc[iTRR] - ptrSrc[-(Int)srcStride]) > abs(ptrSrc[iLBB] - ptrSrc[ -1]) ? ptrSrc[iTRR] : ptrSrc[iLBB]);
     2491#else
    24662492    refDC1 = bL ? ( ptrSrc[iTR] + ptrSrc[iLB] )>>1 : 1<<( g_bitDepthY - 1 );
     2493#endif
    24672494    refDC2 =      ( ptrSrc[ -1] + ptrSrc[-(Int)srcStride] )>>1;
    24682495  }
     
    25662593  Int iSumPix[2];
    25672594  memset(iSumPix, 0, sizeof(Int)*2);
    2568  
     2595#if QC_GENERIC_SDC_G0122
     2596  for( Int i = 0; i < uiNumSegments; i++ )
     2597  {
     2598    rpSegMeans[i] = 0;
     2599  }
     2600#endif
    25692601  if (orgDC == false)
    25702602  {
     
    25812613      rpSegMeans[ucSegmentRB] = pOrig[uiStride * (uiSize-1) + (uiSize-1) ];
    25822614    }
     2615#if QC_GENERIC_SDC_G0122
     2616    else if( getDimType( uiIntraMode ) == DMM4_IDX )
     2617    {
     2618      Pel *ptmpOrig = pOrig;
     2619      Bool *ptmpMask = pMask, bBreak = false;
     2620      UChar ucSegment = ptmpMask? (UChar) ptmpMask[0] : 0;
     2621      UChar bFirstSeg = ucSegment;
     2622
     2623      rpSegMeans[ucSegment] = ptmpOrig[0];
     2624      for ( Int y = 0; y < uiSize; y++ )
     2625      {
     2626        for ( Int x = 0; x < uiSize; x++ )
     2627        {
     2628          ucSegment = ptmpMask[x];
     2629          assert( ucSegment < uiNumSegments );
     2630
     2631          if( bFirstSeg != ucSegment )
     2632          {
     2633            rpSegMeans[ucSegment] = ptmpOrig[x];
     2634            bBreak = true;
     2635            break;
     2636          }
     2637        }
     2638
     2639        if( bBreak )
     2640        {
     2641          break;
     2642        }
     2643
     2644        ptmpOrig  += uiStride;
     2645        ptmpMask  += uiMaskStride;
     2646      }
     2647    }
     2648    else
     2649#else
    25832650    else if (uiIntraMode == PLANAR_IDX)
     2651#endif
    25842652    {
    25852653      Pel* pLeftTop = pOrig;
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TComPrediction.h

    r816 r827  
    171171#if H_3D_DIM
    172172  // Depth intra
    173   Void predIntraLumaDepth         ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc = false );
     173  Void predIntraLumaDepth         ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiIntraMode, Pel* piPred, UInt uiStride, Int iWidth, Int iHeight, Bool bFastEnc = false
     174#if QC_GENERIC_SDC_G0122
     175    , TComWedgelet* dmm4Segmentation = NULL
     176#endif
     177    );
    174178#if H_3D_DIM_SDC
    175179  Void analyzeSegmentsSDC         ( Pel* pOrig, UInt uiStride, UInt uiSize, Pel* rpSegMeans, UInt uiNumSegments, Bool* pMask, UInt uiMaskStride
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TComRdCost.cpp

    r823 r827  
    637637  cDtParam.uiComp       = 255;    // just for assert: to be sure it was set before use, since only values 0,1 or 2 are allowed.
    638638
     639#if SCU_HS_VSD_BUGFIX_IMPROV_G0163
     640  cDtParam.bitDepth   = g_bitDepthY;
     641#endif
    639642  Dist dist = cDtParam.DistFunc( &cDtParam );
    640643
     
    30213024  dD = ( (Double) ( dDM >> DISTORTION_PRECISION_ADJUSTMENT( g_bitDepthY - 8 ) ) ) * m_dDisparityCoeff;
    30223025
     3026#if SCU_HS_VSD_BUGFIX_IMPROV_G0163
     3027  Double dDepthWeight = ( pOrg[x] >=  ( (1<<(g_bitDepthY - 3)) + (1<<(g_bitDepthY - 2)) ) ? 4 : pOrg[x] > ((1<<g_bitDepthY) >> 4) ? (Float)(pOrg[x] - ((1<<g_bitDepthY) >> 4))/(Float)((1<<g_bitDepthY) >> 3) + 1 : 1.0 );
     3028  Double dTemp = ( 0.5 * fabs(dD) * dDepthWeight * ( abs( (Int) pVirRec[ x+y*iVirStride ] - (Int) pVirRec[ x-1+y*iVirStride ] ) + abs( (Int) pVirRec[ x+y*iVirStride ] - (Int) pVirRec[ x+1+y*iVirStride ] ) ) );
     3029#else
    30233030  Double dTemp = ( 0.5 * fabs(dD) * ( abs( (Int) pVirRec[ x+y*iVirStride ] - (Int) pVirRec[ x-1+y*iVirStride ] ) + abs( (Int) pVirRec[ x+y*iVirStride ] - (Int) pVirRec[ x+1+y*iVirStride ] ) ) );
     3031#endif 
    30243032  iTemp = (Int) (((dTemp) < 0)? (Int)((dTemp) - 0.5) : (Int)((dTemp) + 0.5));
    30253033
  • branches/HTM-9.3-dev0/source/Lib/TLibCommon/TypeDef.h

    r826 r827  
    227227#endif
    228228
     229#define SCU_HS_VSD_BUGFIX_IMPROV_G0163    1
    229230////   ****** NEIGHBOURING BLOCK-BASED DISPARITY VECTOR  *********
    230231#if H_3D_NBDV
     
    253254#define H_3D_DIM_DLT                      1   // Depth Lookup Table
    254255
     256#define SCU_HS_DEPTH_DC_PRED_G0143        1
    255257#if H_3D_DIM_DLT
    256258#define H_3D_DELTA_DLT                    1
    257259#endif
    258 
     260#define QC_GENERIC_SDC_G0122              1  // Generalize SDC to all depth intra modes
     261#if H_3D_DIM_SDC && H_3D_INTER_SDC
     262#define QC_SDC_UNIFY_G0130                1  // Unify intra SDC and inter SDC
     263#define QC_SDC_UNIFY_G0130_FIX            1  // Fix bug of G0130
     264#endif
     265#define SEC_INTER_SDC_G0101               1  // Improved inter SDC with multiple DC candidates
    259266#define H_3D_DIM_ENC                      1   // Depth Intra encoder optimizations, includes:
    260267                                              // HHI_DEPTH_INTRA_SEARCH_RAU_C0160
    261268                                              // LG_ZEROINTRADEPTHRESI_A0087
     269#endif
     270#define QC_PKU_SDC_SPLIT_G0123            1   // Intra SDC Split
     271#if QC_PKU_SDC_SPLIT_G0123
     272#define HS_TSINGHUA_SDC_SPLIT_G0111       1
    262273#endif
    263274///// ***** VIEW SYNTHESIS PREDICTION *********
Note: See TracChangeset for help on using the changeset viewer.