Ignore:
Timestamp:
20 Jan 2014, 05:01:03 (11 years ago)
Author:
qualcomm
Message:

integration of JCT3V-G0130 (unify signaling and delta DC coding in intra SDC and inter SDC) by Qualcomm

Location:
branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncCavlc.cpp

    r773 r782  
    25132513
    25142514#if H_3D_INTER_SDC
     2515#if QC_SDC_UNIFY_G0130
     2516Void TEncCavlc::codeDeltaDC( TComDataCU* pcCU, UInt uiAbsPartIdx )
     2517{
     2518  assert(0);
     2519}
     2520
     2521Void TEncCavlc::codeSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx )
     2522{
     2523  assert(0);
     2524}
     2525#else
    25152526Void TEncCavlc::codeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx )
    25162527{
     
    25232534}
    25242535#endif
     2536#endif
    25252537//! \}
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncCavlc.h

    r773 r782  
    138138#endif
    139139#if H_3D_INTER_SDC
     140#if QC_SDC_UNIFY_G0130
     141  Void codeDeltaDC       ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     142  Void codeSDCFlag       ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     143#else
    140144  Void codeInterSDCFlag          ( TComDataCU* pcCU, UInt uiAbsPartIdx );
    141145  Void codeInterSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );
     146#endif
    142147#endif
    143148
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncCu.cpp

    r773 r782  
    15881588 
    15891589  m_pcEntropyCoder->encodePartSize( pcCU, uiAbsPartIdx, uiDepth );
    1590  
     1590#if QC_SDC_UNIFY_G0130
     1591  m_pcEntropyCoder->encodeSDCFlag( pcCU, uiAbsPartIdx, false );
     1592#endif
    15911593  if (pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N )
    15921594  {
     
    16091611  m_pcEntropyCoder->encodeARPW( pcCU , uiAbsPartIdx );
    16101612#endif
    1611 #if H_3D_INTER_SDC
     1613#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    16121614  m_pcEntropyCoder->encodeInterSDCFlag( pcCU, uiAbsPartIdx, false );
    16131615#endif
     
    22852287  m_pcEntropyCoder->encodePredMode( rpcTempCU, 0,          true );
    22862288  m_pcEntropyCoder->encodePartSize( rpcTempCU, 0, uiDepth, true );
     2289#if QC_SDC_UNIFY_G0130
     2290  m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true );
     2291#endif
    22872292  m_pcEntropyCoder->encodePredInfo( rpcTempCU, 0,          true );
    22882293  m_pcEntropyCoder->encodeIPCMInfo(rpcTempCU, 0, true );
     
    23742379  m_pcEntropyCoder->encodePredMode ( rpcTempCU, 0,          true );
    23752380  m_pcEntropyCoder->encodePartSize ( rpcTempCU, 0, uiDepth, true );
     2381#if QC_SDC_UNIFY_G0130
     2382  m_pcEntropyCoder->encodeSDCFlag( rpcTempCU, 0, true );
     2383#endif
    23762384  m_pcEntropyCoder->encodeIPCMInfo ( rpcTempCU, 0, true );
    23772385
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncEntropy.cpp

    r773 r782  
    649649  UInt uiLumaOffset   = uiMinCoeffSize*uiAbsPartIdx;
    650650  UInt uiChromaOffset = uiLumaOffset>>2;
    651    
     651#if QC_SDC_UNIFY_G0130
    652652#if H_3D_DIM_SDC
    653   if( pcCU->getSDCFlag( uiAbsPartIdx ) )
     653  if( pcCU->getSDCFlag( uiAbsPartIdx ) && pcCU->isIntra( uiAbsPartIdx ) )
    654654  {
    655655    assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N );
     
    658658    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
    659659    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
    660     return;
    661660  }
    662661#endif
    663662
    664663#if H_3D_INTER_SDC
    665   if( pcCU->getInterSDCFlag( uiAbsPartIdx ) )
     664  if( pcCU->getSDCFlag( uiAbsPartIdx ) && !pcCU->isIntra( uiAbsPartIdx ) )
    666665  {
    667666    assert( !pcCU->isSkipped( uiAbsPartIdx ) );
    668667    assert( !pcCU->isIntra( uiAbsPartIdx) );
    669668    assert( pcCU->getSlice()->getIsDepth() );
     669  }
     670#endif
     671
     672  if( pcCU->getSDCFlag( uiAbsPartIdx ) || pcCU->isIntra( uiAbsPartIdx ) )
     673  {
     674    Int iPartNum = ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) ? 4 : 1;
     675    UInt uiPartOffset = ( pcCU->getPic()->getNumPartInCU() >> ( pcCU->getDepth( uiAbsPartIdx ) << 1 ) ) >> 2;
     676
     677    if( !pcCU->getSDCFlag( uiAbsPartIdx ) )
     678    {
     679      for( Int iPart = 0; iPart < iPartNum; iPart++ )
     680      {
     681        if( getDimType( pcCU->getLumaIntraDir( uiAbsPartIdx + uiPartOffset*iPart ) ) < DIM_NUM_TYPE )
     682        {
     683          m_pcEntropyCoderIf->codeDeltaDC( pcCU, uiAbsPartIdx + uiPartOffset*iPart );
     684        }
     685      }
     686    }
     687    else
     688    {
     689      m_pcEntropyCoderIf->codeDeltaDC( pcCU, uiAbsPartIdx );
     690      return;
     691    }
     692  }
     693#else
     694#if H_3D_DIM_SDC
     695  if( pcCU->getSDCFlag( uiAbsPartIdx ) )
     696  {
     697    assert( pcCU->getPartitionSize(uiAbsPartIdx) == SIZE_2Nx2N );
     698    assert( pcCU->getTransformIdx(uiAbsPartIdx) == 0 );
     699    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_LUMA) == 1 );
     700    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_U) == 1 );
     701    assert( pcCU->getCbf(uiAbsPartIdx, TEXT_CHROMA_V) == 1 );
     702    return;
     703  }
     704#endif
     705
     706#if H_3D_INTER_SDC
     707  if( pcCU->getInterSDCFlag( uiAbsPartIdx ) )
     708  {
     709    assert( !pcCU->isSkipped( uiAbsPartIdx ) );
     710    assert( !pcCU->isIntra( uiAbsPartIdx) );
     711    assert( pcCU->getSlice()->getIsDepth() );
    670712
    671713    encodeInterSDCResidualData( pcCU, uiAbsPartIdx, false );
    672714    return;
    673715  }
     716#endif
    674717#endif
    675718
     
    825868
    826869#if H_3D_INTER_SDC
     870#if QC_SDC_UNIFY_G0130
     871Void TEncEntropy::encodeDeltaDC  ( TComDataCU* pcCU, UInt absPartIdx )
     872{
     873  m_pcEntropyCoderIf->codeDeltaDC( pcCU, absPartIdx );
     874}
     875
     876Void TEncEntropy::encodeSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD )
     877{
     878  if( ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->getSlice()->getVPS()->getInterSDCFlag( pcCU->getSlice()->getLayerIdInVps() ) ) ||
     879    ( pcCU->isIntra( uiAbsPartIdx ) && !pcCU->getSlice()->getVPS()->getVpsDepthModesFlag( pcCU->getSlice()->getLayerIdInVps() ) ) )
     880  {
     881    return;
     882  }
     883
     884  if( !pcCU->getSlice()->getIsDepth() || ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) != SIZE_2Nx2N ) || pcCU->isSkipped( uiAbsPartIdx ) )
     885  {
     886    return;
     887  }
     888
     889  assert( ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_2Nx2N ) || ( !pcCU->isIntra( uiAbsPartIdx ) && !pcCU->isSkipped( uiAbsPartIdx ) ) );
     890
     891  if( bRD )
     892  {
     893    uiAbsPartIdx = 0;
     894  }
     895
     896  m_pcEntropyCoderIf->codeSDCFlag( pcCU, uiAbsPartIdx );
     897}
     898#else
    827899Void TEncEntropy::encodeInterSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD )
    828900{
     
    872944}
    873945#endif
     946#endif
    874947
    875948//! \}
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncEntropy.h

    r655 r782  
    9595#endif
    9696#if H_3D_INTER_SDC
     97#if QC_SDC_UNIFY_G0130
     98  virtual Void codeDeltaDC       ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     99  virtual Void codeSDCFlag       ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
     100#else
    97101  virtual Void codeInterSDCFlag  ( TComDataCU* pcCU, UInt uiAbsPartIdx ) = 0;
    98102  virtual Void codeInterSDCResidualData ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment ) = 0;
     103#endif
    99104#endif
    100105  virtual Void codeSplitFlag     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth ) = 0;
     
    186191#endif
    187192#if H_3D_INTER_SDC
     193#if QC_SDC_UNIFY_G0130
     194  Void encodeDeltaDC      ( TComDataCU* pcCU, UInt absPartIdx );
     195  Void encodeSDCFlag      ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
     196#else
    188197  Void encodeInterSDCFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
    189198  Void encodeInterSDCResidualData( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD );
     199#endif
    190200#endif
    191201  Void encodePredMode          ( TComDataCU* pcCU, UInt uiAbsPartIdx, Bool bRD = false );
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSbac.cpp

    r781 r782  
    9595#if QC_GENERIC_SDC_G0122
    9696, m_cAngleFlagSCModel         ( 1,             1,               NUM_ANGLE_FLAG_CTX            , m_contextModels + m_numContextModels, m_numContextModels)
     97#if !QC_SDC_UNIFY_G0130
    9798, m_cIntraSdcFlagSCModel      ( 1,             1,               NUM_INTRASDC_FLAG_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     99#endif
    98100#endif
    99101#if H_3D_DIM_DMM
     
    105107#endif
    106108#endif
    107 #if H_3D_INTER_SDC
     109#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    108110, m_cInterSDCFlagSCModel             ( 1,             1,  NUM_INTER_SDC_FLAG_CTX           , m_contextModels + m_numContextModels, m_numContextModels)
    109111, m_cInterSDCResidualSCModel         ( 1,             1,  NUM_INTER_SDC_RESIDUAL_CTX       , m_contextModels + m_numContextModels, m_numContextModels)
    110112, m_cInterSDCResidualSignFlagSCModel ( 1,             1,  NUM_INTER_SDC_SIGN_FLAG_CTX      , m_contextModels + m_numContextModels, m_numContextModels)
     113#endif
     114#if QC_SDC_UNIFY_G0130
     115, m_cSDCFlagSCModel                  ( 1,             1,  NUM_SDC_FLAG_CTX                 , m_contextModels + m_numContextModels, m_numContextModels)
    111116#endif
    112117{
     
    174179#if QC_GENERIC_SDC_G0122
    175180  m_cAngleFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG );
     181#if !QC_SDC_UNIFY_G0130
    176182  m_cIntraSdcFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );
     183#endif
    177184#endif
    178185#if H_3D_DIM_DMM
     
    184191#endif
    185192#endif
    186 #if H_3D_INTER_SDC
     193#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    187194  m_cInterSDCFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_FLAG );
    188195  m_cInterSDCResidualSCModel.initBuffer     ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_RESIDUAL );
    189196  m_cInterSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_SIGN_FLAG );
     197#endif
     198#if QC_SDC_UNIFY_G0130
     199  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
    190200#endif
    191201  // new structure
     
    226236      curCost += m_cCUICFlagSCModel.calcCost          ( curSliceType, qp, (UChar*)INIT_IC_FLAG );
    227237#endif
    228 #if H_3D_INTER_SDC
     238#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    229239      curCost += m_cInterSDCFlagSCModel.calcCost      ( curSliceType, qp, (UChar*)INIT_INTER_SDC_FLAG );
    230240      curCost += m_cInterSDCResidualSCModel.calcCost  ( curSliceType, qp, (UChar*)INIT_INTER_SDC_RESIDUAL );
    231241      curCost += m_cInterSDCResidualSignFlagSCModel.calcCost( curSliceType, qp, (UChar*)INIT_INTER_SDC_SIGN_FLAG );
     242#endif
     243#if QC_SDC_UNIFY_G0130
     244      curCost += m_cSDCFlagSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_SDC_FLAG );
    232245#endif
    233246      curCost += m_cCUPartSizeSCModel.calcCost        ( curSliceType, qp, (UChar*)INIT_PART_SIZE );
     
    262275#if QC_GENERIC_SDC_G0122
    263276      curCost += m_cAngleFlagSCModel.calcCost         ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 
     277#if !QC_SDC_UNIFY_G0130
    264278      curCost += m_cIntraSdcFlagSCModel.calcCost      ( curSliceType, qp, (UChar*)INIT_INTRASDC_FLAG ); 
     279#endif
    265280#endif
    266281#if H_3D_DIM_DMM
     
    331346#if QC_GENERIC_SDC_G0122
    332347  m_cAngleFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG );
     348#if !QC_SDC_UNIFY_G0130
    333349  m_cIntraSdcFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );
     350#endif
    334351#endif
    335352#if H_3D_DIM_DMM
     
    341358#endif
    342359#endif
    343 #if H_3D_INTER_SDC
     360#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    344361  m_cInterSDCFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_FLAG );
    345362  m_cInterSDCResidualSCModel.initBuffer     ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_RESIDUAL );
    346363  m_cInterSDCResidualSignFlagSCModel.initBuffer ( eSliceType, iQp, (UChar*)INIT_INTER_SDC_SIGN_FLAG );
     364#endif
     365#if QC_SDC_UNIFY_G0130
     366  m_cSDCFlagSCModel.initBuffer              ( eSliceType, iQp, (UChar*)INIT_SDC_FLAG );
    347367#endif
    348368  m_pcBinIf->start();
     
    647667#if QC_GENERIC_SDC_G0122
    648668  this->m_cAngleFlagSCModel      .copyFrom( &pSrc->m_cAngleFlagSCModel );
     669#if !QC_SDC_UNIFY_G0130
    649670  this->m_cIntraSdcFlagSCModel   .copyFrom( &pSrc->m_cIntraSdcFlagSCModel );
     671#endif
    650672#endif
    651673}
     
    11691191  default: break;
    11701192  }
    1171 
     1193#if !QC_SDC_UNIFY_G0130
    11721194  if( dimType < DIM_NUM_TYPE || pcCU->getSDCFlag( absPartIdx ) )
    11731195  {
     
    12061228    }
    12071229  }
     1230#endif
    12081231}
    12091232
     
    12171240    m_pcBinIf->encodeBin( isDimMode( dir ) ? 0 : 1, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) );
    12181241  }
    1219 
     1242#if !QC_SDC_UNIFY_G0130
    12201243  if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case
    12211244  {
    12221245    m_pcBinIf->encodeBin( pcCU->getSDCFlag( absPartIdx ) ? 1 : 0, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) );
    12231246  }
    1224 
     1247#endif
    12251248  if( isDimMode( dir ) )
    12261249  {
     
    22002223
    22012224#if H_3D_INTER_SDC
     2225#if QC_SDC_UNIFY_G0130
     2226Void TEncSbac::codeDeltaDC( TComDataCU* pcCU, UInt absPartIdx )
     2227{
     2228  if( !( pcCU->getSDCFlag( absPartIdx ) || ( pcCU->isIntra( absPartIdx ) && getDimType( pcCU->getLumaIntraDir( absPartIdx ) ) < DIM_NUM_TYPE ) ) )
     2229  {
     2230    assert( 0 );
     2231  }
     2232
     2233  UInt uiNumSegments = 0;
     2234  UInt dimDeltaDC = 0;
     2235
     2236  if( pcCU->isIntra( absPartIdx ) )
     2237  {
     2238    UInt dir     = pcCU->getLumaIntraDir( absPartIdx );
     2239    uiNumSegments = isDimMode( dir ) ? 2 : 1;
     2240
     2241    if( pcCU->getSDCFlag( absPartIdx ) )
     2242    {
     2243      if( uiNumSegments == 1 )
     2244      {
     2245        dimDeltaDC = pcCU->getSDCSegmentDCOffset( 0, absPartIdx ) ? 1 : 0;
     2246      }
     2247      else
     2248      {
     2249        dimDeltaDC = ( pcCU->getSDCSegmentDCOffset( 0, absPartIdx ) || pcCU->getSDCSegmentDCOffset( 1, absPartIdx ) ) ? 1 : 0;
     2250      }
     2251    }
     2252    else
     2253    {
     2254      dimDeltaDC = isDimDeltaDC( dir );
     2255    }
     2256
     2257    m_pcBinIf->encodeBin( dimDeltaDC, m_cDdcFlagSCModel.get( 0, 0, uiNumSegments-1 ) );
     2258  }
     2259  else //all-zero inter SDC is not allowed
     2260  {
     2261    PartSize cPartSize = pcCU->getPartitionSize( absPartIdx );
     2262
     2263    uiNumSegments = ( cPartSize == SIZE_2Nx2N ) ? 1 : ( cPartSize == SIZE_NxN ? 4 : 2 );
     2264    dimDeltaDC = 1;
     2265  }
     2266
     2267  if( dimDeltaDC )
     2268  {
     2269    for( UInt segment = 0; segment < uiNumSegments; segment++ )
     2270    {
     2271      Pel deltaDC = 0;
     2272
     2273      if( pcCU->isIntra( absPartIdx ) )
     2274      {
     2275        UInt dir     = pcCU->getLumaIntraDir( absPartIdx );
     2276        deltaDC = pcCU->getSDCFlag( absPartIdx ) ? pcCU->getSDCSegmentDCOffset( segment, absPartIdx ) : pcCU->getDimDeltaDC( getDimType( dir ), segment, absPartIdx );
     2277      }
     2278      else
     2279      {
     2280        deltaDC = pcCU->getSDCSegmentDCOffset( segment, absPartIdx );
     2281      }
     2282
     2283      xCodeDimDeltaDC( deltaDC, uiNumSegments );
     2284    }
     2285  }
     2286}
     2287
     2288Void TEncSbac::codeSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx )
     2289{
     2290  UInt uiSymbol = pcCU->getSDCFlag( uiAbsPartIdx ) ? 1 : 0;
     2291  UInt uiCtxSDCFlag = pcCU->getCtxSDCFlag( uiAbsPartIdx );
     2292
     2293  m_pcBinIf->encodeBin( uiSymbol, m_cSDCFlagSCModel.get( 0, 0, uiCtxSDCFlag ) );
     2294}
     2295#else
    22022296Void TEncSbac::codeInterSDCFlag( TComDataCU* pcCU, UInt uiAbsPartIdx )
    22032297{
     
    22212315}
    22222316#endif
     2317#endif
    22232318//! \}
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSbac.h

    r781 r782  
    154154#endif
    155155#if H_3D_INTER_SDC
     156#if QC_SDC_UNIFY_G0130
     157  Void codeDeltaDC       ( TComDataCU* pcCU, UInt absPartIdx );
     158  Void codeSDCFlag       ( TComDataCU* pcCU, UInt uiAbsPartIdx );
     159#else
    156160  Void codeInterSDCFlag  ( TComDataCU* pcCU, UInt uiAbsPartIdx );
    157161  Void codeInterSDCResidualData  ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiSegment );
     162#endif
    158163#endif
    159164  Void codeSplitFlag     ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
     
    249254#if QC_GENERIC_SDC_G0122
    250255  ContextModel3DBuffer m_cAngleFlagSCModel;
     256#if !QC_SDC_UNIFY_G0130
    251257  ContextModel3DBuffer m_cIntraSdcFlagSCModel;
     258#endif
    252259#endif
    253260#if H_3D_DIM_DMM
     
    259266#endif
    260267#endif
    261 #if H_3D_INTER_SDC
     268#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    262269  ContextModel3DBuffer m_cInterSDCFlagSCModel;
    263270  ContextModel3DBuffer m_cInterSDCResidualSCModel;
    264271  ContextModel3DBuffer m_cInterSDCResidualSignFlagSCModel;
    265272#endif
     273#if QC_SDC_UNIFY_G0130
     274  ContextModel3DBuffer m_cSDCFlagSCModel;
     275#endif
    266276};
    267277
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSearch.cpp

    r781 r782  
    921921     
    922922      m_pcEntropyCoder  ->encodePartSize( pcCU, 0, pcCU->getDepth(0), true );
    923 
     923#if QC_SDC_UNIFY_G0130
     924      m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true );
     925#endif
    924926      if (pcCU->isIntra(0) && pcCU->getPartitionSize(0) == SIZE_2Nx2N )
    925927      {
     
    956958      }
    957959    }
     960#if QC_SDC_UNIFY_G0130
     961    Int iPartNum = ( pcCU->isIntra( uiAbsPartIdx ) && pcCU->getPartitionSize( uiAbsPartIdx ) == SIZE_NxN ) ? 4 : 1;
     962    UInt uiPartOffset = ( pcCU->getPic()->getNumPartInCU() >> ( pcCU->getDepth( uiAbsPartIdx ) << 1 ) ) >> 2;
     963
     964    if( !pcCU->getSDCFlag( uiAbsPartIdx ) )
     965    {
     966      for( Int iPart = 0; iPart < iPartNum; iPart++ )
     967      {
     968        if( getDimType( pcCU->getLumaIntraDir( uiAbsPartIdx + uiPartOffset*iPart ) ) < DIM_NUM_TYPE )
     969        {
     970          m_pcEntropyCoder->encodeDeltaDC( pcCU, uiAbsPartIdx + uiPartOffset*iPart );
     971        }
     972      }
     973    }
     974#endif
    958975  }
    959976  if( bChroma )
     
    20472064 
    20482065  // encode reduced intra header
     2066#if QC_SDC_UNIFY_G0130
     2067  if( !pcCU->getSlice()->isIntra() )
     2068  {
     2069    if (pcCU->getSlice()->getPPS()->getTransquantBypassEnableFlag())
     2070    {
     2071      m_pcEntropyCoder->encodeCUTransquantBypassFlag( pcCU, 0, true );
     2072    }
     2073    m_pcEntropyCoder->encodeSkipFlag( pcCU, 0, true );
     2074    m_pcEntropyCoder->encodePredMode( pcCU, 0, true );
     2075  }
     2076
     2077  m_pcEntropyCoder->encodePartSize( pcCU, 0, true );
     2078  m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true );
     2079#else
    20492080  m_pcEntropyCoder->encodePredMode( pcCU, 0, true );
     2081#endif
    20502082 
    20512083  // encode pred direction + DC residual data
    20522084  m_pcEntropyCoder->encodePredInfo( pcCU, 0, true );
     2085#if QC_SDC_UNIFY_G0130
     2086  Bool bDummy = false;
     2087  m_pcEntropyCoder->encodeCoeff( pcCU, 0, pcCU->getDepth( 0 ), uiWidth, uiHeight, bDummy );
     2088#endif
    20532089  UInt uiBits = m_pcEntropyCoder->getNumberOfWrittenBits();
    20542090 
     
    56035639    return;
    56045640  }
    5605 
     5641#if QC_SDC_UNIFY_G0130
     5642  pcCU->setSDCFlagSubParts( true, 0, uiDepth );
     5643#else
    56065644  pcCU->setInterSDCFlagSubParts( true, 0, 0, uiDepth );
     5645#endif
    56075646
    56085647  UInt  uiWidth      = pcCU->getWidth ( 0 );
     
    56425681    Int iResiOffset = ( pResDC [uiSeg] > 0 ? ( uiSegSize[uiSeg] >> 1 ) : -1*( uiSegSize[uiSeg] >> 1 ) );
    56435682    pResDC [uiSeg]  = ( pResDC [uiSeg] + iResiOffset ) / (Int) uiSegSize[uiSeg];
    5644 
     5683#if QC_SDC_UNIFY_G0130
     5684    pcCU->setSDCSegmentDCOffset( pResDC[uiSeg], uiSeg, 0 );
     5685#else
    56455686    pcCU->setInterSDCSegmentDCOffset( pResDC[uiSeg], uiSeg, 0 );
     5687#endif
    56465688  }
    56475689
     
    56985740#endif
    56995741
     5742#if QC_SDC_UNIFY_G0130
     5743  Bool bNonSkip = false;
     5744#else
    57005745  Bool bNonSkip = true;
     5746#endif
    57015747  for( UInt uiSeg = 0; uiSeg < uiSegmentNum; uiSeg++ )
    57025748  {
     5749#if QC_SDC_UNIFY_G0130
     5750    bNonSkip |= ( pcCU->getSDCSegmentDCOffset( uiSeg, 0 ) != 0 ) ? 1 : 0;
     5751#else
    57035752    bNonSkip &= ( pcCU->getInterSDCSegmentDCOffset( uiSeg, 0 ) != 0 ) ? 1 : 0;
     5753#endif
    57045754  }
    57055755
     
    69126962    m_pcEntropyCoder->encodePredMode( pcCU, 0, true );
    69136963    m_pcEntropyCoder->encodePartSize( pcCU, 0, pcCU->getDepth(0), true );
     6964#if QC_SDC_UNIFY_G0130
     6965    m_pcEntropyCoder->encodeSDCFlag( pcCU, 0, true );
     6966#endif
    69146967    m_pcEntropyCoder->encodePredInfo( pcCU, 0, true );
    69156968#if H_3D_IC
     
    69196972    m_pcEntropyCoder->encodeARPW( pcCU , 0 );
    69206973#endif
    6921 #if H_3D_INTER_SDC
     6974#if H_3D_INTER_SDC && !QC_SDC_UNIFY_G0130
    69226975    m_pcEntropyCoder->encodeInterSDCFlag( pcCU, 0, true );
    69236976#endif
Note: See TracChangeset for help on using the changeset viewer.