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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.