Ignore:
Timestamp:
20 Jan 2014, 04:34:18 (11 years ago)
Author:
qualcomm
Message:

integration of JCT3V-G0122 (generalize SDC to all depth intra modes) by Qualcomm.

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

Legend:

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

    r773 r781  
    9393, m_cDdcFlagSCModel           ( 1,             1,               NUM_DDC_FLAG_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
    9494, m_cDdcDataSCModel           ( 1,             1,               NUM_DDC_DATA_CTX              , m_contextModels + m_numContextModels, m_numContextModels)
     95#if QC_GENERIC_SDC_G0122
     96, m_cAngleFlagSCModel         ( 1,             1,               NUM_ANGLE_FLAG_CTX            , m_contextModels + m_numContextModels, m_numContextModels)
     97, m_cIntraSdcFlagSCModel      ( 1,             1,               NUM_INTRASDC_FLAG_CTX         , m_contextModels + m_numContextModels, m_numContextModels)
     98#endif
    9599#if H_3D_DIM_DMM
    96100, m_cDmm1DataSCModel          ( 1,             1,               NUM_DMM1_DATA_CTX             , m_contextModels + m_numContextModels, m_numContextModels)
     
    168172  m_cDdcFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG );
    169173  m_cDdcDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_DATA );
     174#if QC_GENERIC_SDC_G0122
     175  m_cAngleFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG );
     176  m_cIntraSdcFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );
     177#endif
    170178#if H_3D_DIM_DMM
    171179  m_cDmm1DataSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA );
     
    252260      curCost += m_cDdcFlagSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_DDC_FLAG );
    253261      curCost += m_cDdcDataSCModel.calcCost           ( curSliceType, qp, (UChar*)INIT_DDC_DATA );
     262#if QC_GENERIC_SDC_G0122
     263      curCost += m_cAngleFlagSCModel.calcCost         ( curSliceType, qp, (UChar*)INIT_ANGLE_FLAG ); 
     264      curCost += m_cIntraSdcFlagSCModel.calcCost      ( curSliceType, qp, (UChar*)INIT_INTRASDC_FLAG ); 
     265#endif
    254266#if H_3D_DIM_DMM
    255267      curCost += m_cDmm1DataSCModel.calcCost          ( curSliceType, qp, (UChar*)INIT_DMM1_DATA );
     
    317329  m_cDdcFlagSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_FLAG );
    318330  m_cDdcDataSCModel.initBuffer           ( eSliceType, iQp, (UChar*)INIT_DDC_DATA );
     331#if QC_GENERIC_SDC_G0122
     332  m_cAngleFlagSCModel.initBuffer         ( eSliceType, iQp, (UChar*)INIT_ANGLE_FLAG );
     333  m_cIntraSdcFlagSCModel.initBuffer      ( eSliceType, iQp, (UChar*)INIT_INTRASDC_FLAG );
     334#endif
    319335#if H_3D_DIM_DMM
    320336  m_cDmm1DataSCModel.initBuffer          ( eSliceType, iQp, (UChar*)INIT_DMM1_DATA );
     
    629645  this->m_cDepthIntraModeSCModel .copyFrom( &pSrc->m_cDepthIntraModeSCModel );
    630646  this->m_cDdcFlagSCModel        .copyFrom( &pSrc->m_cDdcFlagSCModel );
     647#if QC_GENERIC_SDC_G0122
     648  this->m_cAngleFlagSCModel      .copyFrom( &pSrc->m_cAngleFlagSCModel );
     649  this->m_cIntraSdcFlagSCModel   .copyFrom( &pSrc->m_cIntraSdcFlagSCModel );
     650#endif
    631651}
    632652#endif
     
    10161036    if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE )
    10171037#if H_3D_DIM_SDC
     1038#if QC_GENERIC_SDC_G0122
     1039      if( 1 )
     1040#else
    10181041      if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) )
     1042#endif
    10191043#endif
    10201044    {
     
    10421066    if( pcCU->getLumaIntraDir( absPartIdx+partOffset*j ) < NUM_INTRA_MODE )
    10431067#if H_3D_DIM_SDC
     1068#if QC_GENERIC_SDC_G0122
     1069      if( 1 )
     1070#else
    10441071      if( !pcCU->getSDCFlag( absPartIdx+partOffset*j ) )
     1072#endif
    10451073#endif
    10461074    {
     
    11461174    UInt dimDeltaDC;
    11471175    Pel  deltaDC;
     1176#if QC_GENERIC_SDC_G0122
     1177    UInt uiNumSegments = isDimMode( dir ) ? 2 : 1;
     1178#else
    11481179    UInt uiNumSegments = ( dir == PLANAR_IDX ) ? 1 : 2;
     1180#endif
    11491181    if( pcCU->getSDCFlag( absPartIdx ) )
    11501182    {
     
    11761208}
    11771209
     1210#if QC_GENERIC_SDC_G0122
     1211Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx )
     1212{
     1213  UInt dir = pcCU->getLumaIntraDir( absPartIdx );
     1214
     1215  if( ( pcCU->getSlice()->getSPS()->getMaxCUWidth() >> pcCU->getDepth( absPartIdx ) ) < 64 ) //DMM and HEVC intra modes are both allowed
     1216  {
     1217    m_pcBinIf->encodeBin( isDimMode( dir ) ? 0 : 1, m_cAngleFlagSCModel.get( 0, 0, pcCU->getCtxAngleFlag( absPartIdx ) ) );
     1218  }
     1219
     1220  if( pcCU->getPartitionSize( absPartIdx ) == SIZE_2Nx2N ) //SDC is allowed only in this case
     1221  {
     1222    m_pcBinIf->encodeBin( pcCU->getSDCFlag( absPartIdx ) ? 1 : 0, m_cIntraSdcFlagSCModel.get( 0, 0, pcCU->getCtxSDCFlag( absPartIdx ) ) );
     1223  }
     1224
     1225  if( isDimMode( dir ) )
     1226  {
     1227    UInt uiCodeIdx = 0;
     1228
     1229    switch( getDimType( dir ) )
     1230    {
     1231    case DMM1_IDX: uiCodeIdx = 0; break;
     1232    case DMM4_IDX: uiCodeIdx = 1; break;
     1233    default:                      break;
     1234    }
     1235    //mode coding
     1236    m_pcBinIf->encodeBin( uiCodeIdx == 0 ? 0 : 1, m_cDepthIntraModeSCModel.get( 0, 0, 0 ) );
     1237  }
     1238}
     1239#else
    11781240Void TEncSbac::codeIntraDepthMode( TComDataCU* pcCU, UInt absPartIdx )
    11791241{
     
    12161278  }
    12171279}
     1280#endif
    12181281#endif
    12191282
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSbac.h

    r773 r781  
    247247  ContextModel3DBuffer m_cDdcFlagSCModel;
    248248  ContextModel3DBuffer m_cDdcDataSCModel;
     249#if QC_GENERIC_SDC_G0122
     250  ContextModel3DBuffer m_cAngleFlagSCModel;
     251  ContextModel3DBuffer m_cIntraSdcFlagSCModel;
     252#endif
    249253#if H_3D_DIM_DMM
    250254  ContextModel3DBuffer m_cDmm1DataSCModel;
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSearch.cpp

    r773 r781  
    18621862
    18631863#if H_3D_DIM_SDC
    1864 Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bResidual )
     1864Void TEncSearch::xIntraCodingSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost,
     1865#if QC_GENERIC_SDC_G0122
     1866  Bool bZeroResidual, Int iSDCDeltaResi
     1867#else
     1868  Bool bResidual
     1869#endif
     1870  )
    18651871{
    18661872  UInt    uiLumaPredMode    = pcCU     ->getLumaIntraDir( uiAbsPartIdx );
     
    18801886  AOF( pcCU->getSDCAvailable(uiAbsPartIdx) );
    18811887  AOF( pcCU->getSDCFlag(uiAbsPartIdx) );
     1888#if !QC_GENERIC_SDC_G0122
    18821889  AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || ( getDimType( uiLumaPredMode ) == DMM1_IDX && !isDimDeltaDC( uiLumaPredMode ) ) );
    18831890  AOF( uiLumaPredMode == DC_IDX || uiLumaPredMode == PLANAR_IDX || uiWidth < 64  );
     1891#endif
    18841892 
    18851893  //===== init availability pattern =====
     
    18881896  pcCU->getPattern()->initPattern   ( pcCU, 0, uiAbsPartIdx );
    18891897  pcCU->getPattern()->initAdiPattern( pcCU, uiAbsPartIdx, 0, m_piYuvExt, m_iYuvExtStride, m_iYuvExtHeight, bAboveAvail, bLeftAvail );
    1890  
     1898#if QC_GENERIC_SDC_G0122
     1899  TComWedgelet* dmm4Segmentation = new TComWedgelet( uiWidth, uiHeight );
     1900#endif
    18911901  //===== get prediction signal =====
    18921902#if H_3D_DIM
    18931903  if( isDimMode( uiLumaPredMode ) )
    18941904  {
    1895     predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true );
     1905    predIntraLumaDepth( pcCU, uiAbsPartIdx, uiLumaPredMode, piPred, uiStride, uiWidth, uiHeight, true
     1906#if QC_GENERIC_SDC_G0122
     1907      , dmm4Segmentation
     1908#endif
     1909      );
    18961910  }
    18971911  else
     
    19191933    uiMaskStride = pcWedgelet->getStride();
    19201934  }
    1921  
     1935#if QC_GENERIC_SDC_G0122
     1936  if( getDimType( uiLumaPredMode ) == DMM4_IDX )
     1937  {
     1938    uiNumSegments = 2;
     1939    pbMask  = dmm4Segmentation->getPattern();
     1940    uiMaskStride = dmm4Segmentation->getStride();
     1941  }
     1942#endif
     1943
    19221944  // get DC prediction for each segment
    19231945  Pel apDCPredValues[2];
     
    19311953  {
    19321954    // remap reconstructed value to valid depth values
     1955#if QC_GENERIC_SDC_G0122
     1956    Pel pDCRec = ( !bZeroResidual ) ? apDCOrigValues[uiSegment] : apDCPredValues[uiSegment];
     1957#else
    19331958    Pel pDCRec = bResidual?apDCOrigValues[uiSegment]:apDCPredValues[uiSegment];
    1934    
     1959#endif
    19351960    // get residual (idx)
    19361961#if H_3D_DIM_DLT
     
    19391964    Pel pResidualIdx = pDCRec - apDCPredValues[uiSegment];
    19401965#endif
    1941    
     1966#if QC_GENERIC_SDC_G0122
     1967    if( !bZeroResidual )
     1968    {
     1969      Pel   pPredIdx    = pcCU->getSlice()->getPPS()->getDLT()->depthValue2idx( pcCU->getSlice()->getLayerIdInVps(), apDCPredValues[uiSegment] );
     1970      Int   pTestIdx    = pPredIdx + pResidualIdx + iSDCDeltaResi;
     1971      if( pTestIdx >= 0 && pTestIdx < pcCU->getSlice()->getPPS()->getDLT()->getNumDepthValues( pcCU->getSlice()->getLayerIdInVps() ) )
     1972      {
     1973        pResidualIdx += iSDCDeltaResi;
     1974      }
     1975    }
     1976#endif
    19421977    // save SDC DC offset
    19431978    pcCU->setSDCSegmentDCOffset(pResidualIdx, uiSegment, uiAbsPartIdx);
     
    20242059#endif
    20252060    dRDCost = m_pcRdCost->calcRdCost( uiBits, ruiDist );
     2061#if QC_GENERIC_SDC_G0122
     2062  dmm4Segmentation->destroy(); delete dmm4Segmentation;
     2063#endif
    20262064}
    20272065#endif
     
    29012939          case( DMM4_IDX ):
    29022940            {
     2941#if !QC_GENERIC_SDC_G0122
    29032942              if( uiWidth > 4 )
     2943#endif
    29042944              {
    29052945                biSegmentation = new TComWedgelet( uiWidth, uiHeight );
     
    29572997      {
    29582998        pcCU->setSDCFlagSubParts( (uiSDC != 0), uiPartOffset, uiDepth + uiInitTrDepth );
     2999#if QC_GENERIC_SDC_G0122
     3000        for( Int iSDCDeltaResi = -2; iSDCDeltaResi <= 2; iSDCDeltaResi++ )
     3001        {
     3002          if( ( uiSDC == 0 ) && iSDCDeltaResi != 0 )
     3003          {
     3004            continue;
     3005          }
     3006#endif
    29593007#endif
    29603008     
     
    29663014#if H_3D_DIM_SDC
    29673015      bTestZeroResi |= pcCU->getSDCFlag(uiPartOffset);
     3016#endif
     3017#if QC_GENERIC_SDC_G0122
     3018      if( uiSDC != 0 && iSDCDeltaResi != 0 )
     3019      {
     3020        bTestZeroResi = false;
     3021      }
    29683022#endif
    29693023#endif
     
    30003054             
    30013055              // start encoding with SDC
     3056#if QC_GENERIC_SDC_G0122
     3057              xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, ( testZeroResi != 0 ), iSDCDeltaResi );
     3058#else
    30023059              xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, (testZeroResi!=0));
     3060#endif
    30033061            }
    30043062            else
     
    30733131#if H_3D_DIM_ENC || H_3D_DIM_SDC
    30743132      }
     3133#endif
     3134#if QC_GENERIC_SDC_G0122
     3135        } // SDC residual loop
    30753136#endif
    30763137#if H_3D_DIM_SDC
  • branches/HTM-9.3-dev3-Qualcomm/source/Lib/TLibEncoder/TEncSearch.h

    r773 r781  
    353353#endif
    354354#if H_3D_DIM_SDC
    355   Void xIntraCodingSDC            ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost, Bool bResidual );
     355  Void xIntraCodingSDC            ( TComDataCU* pcCU, UInt uiAbsPartIdx, TComYuv* pcOrgYuv, TComYuv* pcPredYuv, Dist& ruiDist, Double& dRDCost,
     356#if QC_GENERIC_SDC_G0122
     357    Bool bZeroResidual, Int iSDCDeltaResi
     358#else
     359    Bool bResidual
     360#endif
     361    );
    356362#endif
    357363#endif
Note: See TracChangeset for help on using the changeset viewer.