Changeset 1039 in 3DVCSoftware for trunk/source/Lib/TLibDecoder/TDecCu.cpp


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

Merged 11.2-dev0@1038.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/Lib/TLibDecoder/TDecCu.cpp

    r976 r1039  
    420420    Int vspFlag[MRG_MAX_NUM_CANDS_MEM];
    421421    memset(vspFlag, 0, sizeof(Int)*MRG_MAX_NUM_CANDS_MEM);
     422#if !FIX_TICKET_79
    422423    InheritedVSPDisInfo inheritedVSPDisInfo[MRG_MAX_NUM_CANDS_MEM];
     424#endif
    423425#if H_3D_SPIVMP
    424426    Bool bSPIVMPFlag[MRG_MAX_NUM_CANDS_MEM];
     
    432434    m_ppcCU[uiDepth]->getInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours, numValidMergeCand, uiMergeIndex );
    433435    m_ppcCU[uiDepth]->xGetInterMergeCandidates( 0, 0, cMvFieldNeighbours, uhInterDirNeighbours
     436#if !FIX_TICKET_79
    434437      , inheritedVSPDisInfo
     438#endif
    435439#if H_3D_SPIVMP
    436440      , pcMvFieldSP, puhInterDirSP
     
    453457#endif
    454458#endif
    455 #if H_3D_VSP
     459#if H_3D_VSP && !FIX_TICKET_79
    456460    if(vspFlag[uiMergeIndex])
    457461    {
     
    542546    return;
    543547  }
    544 
     548#if MTK_SINGLE_DEPTH_MODE_I0095
     549  m_pcEntropyDecoder->decodeSingleDepthMode( pcCU, uiAbsPartIdx, uiDepth );
     550  if(!pcCU->getSingleDepthFlag(uiAbsPartIdx))
     551  {
     552#endif
    545553  m_pcEntropyDecoder->decodePredMode( pcCU, uiAbsPartIdx, uiDepth );
    546554  m_pcEntropyDecoder->decodePartSize( pcCU, uiAbsPartIdx, uiDepth );
     
    572580  m_pcEntropyDecoder->decodeCoeff( pcCU, uiAbsPartIdx, uiDepth, uiCurrWidth, uiCurrHeight, bCodeDQP );
    573581  setdQPFlag( bCodeDQP );
     582#if MTK_SINGLE_DEPTH_MODE_I0095
     583  }
     584#endif
    574585  xFinishDecodeCU( pcCU, uiAbsPartIdx, uiDepth, ruiIsLast );
    575586#if H_3D_IV_MERGE
     
    671682      break;
    672683    case MODE_INTRA:
     684#if MTK_SINGLE_DEPTH_MODE_I0095
     685      if( m_ppcCU[uiDepth]->getSingleDepthFlag(0) )
     686        xReconIntraSingleDepth( m_ppcCU[uiDepth], 0, uiDepth );
     687#if H_3D_DIM_SDC
     688      else if( m_ppcCU[uiDepth]->getSDCFlag(0) )
     689        xReconIntraSDC( m_ppcCU[uiDepth], 0, uiDepth );
     690#endif
     691      else
     692#else
    673693#if H_3D_DIM_SDC
    674694      if( m_ppcCU[uiDepth]->getSDCFlag(0) )
    675695        xReconIntraSDC( m_ppcCU[uiDepth], 0, uiDepth );
    676696      else
     697#endif
    677698#endif
    678699      xReconIntraQT( m_ppcCU[uiDepth], uiDepth );
     
    709730  }
    710731}
    711 
     732#if MTK_SINGLE_DEPTH_MODE_I0095
     733Void TDecCu::xReconIntraSingleDepth( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     734{
     735  UInt uiWidth        = pcCU->getWidth  ( 0 );
     736  UInt uiHeight       = pcCU->getHeight ( 0 );
     737
     738  TComYuv* pcRecoYuv  = m_ppcYuvReco[uiDepth];
     739
     740  UInt    uiStride    = pcRecoYuv->getStride  ();
     741  Pel*    piReco      = pcRecoYuv->getLumaAddr( uiAbsPartIdx );
     742
     743
     744  AOF( uiWidth == uiHeight );
     745  AOF( uiAbsPartIdx == 0 );
     746
     747  //construction of depth candidates
     748  Pel testDepth;
     749  Pel DepthNeighbours[5];
     750  Int index =0;
     751  for( Int i = 0; (i < 5) && (index<MTK_SINGLE_DEPTH_MODE_CANDIDATE_LIST_SIZE) ; i++ )
     752  {
     753    if(!pcCU->getNeighDepth (0, uiAbsPartIdx, &testDepth, i))
     754    {
     755      continue;
     756    }
     757    DepthNeighbours[index]=testDepth;
     758    index++;
     759    for(Int j=0;j<index-1;j++)
     760    {
     761     if( (DepthNeighbours[index-1]==DepthNeighbours[j]) )
     762     {
     763       index--;
     764       break;
     765     }
     766    }
     767  }
     768
     769  if(index==0)
     770  {
     771    DepthNeighbours[index]=1<<(g_bitDepthY-1);
     772    index++;
     773  }
     774
     775  if(index==1)
     776  {
     777    DepthNeighbours[index]=ClipY(DepthNeighbours[0] + 1 );
     778    index++;
     779  }
     780
     781  for( UInt uiY = 0; uiY < uiHeight; uiY++ )
     782  {
     783    for( UInt uiX = 0; uiX < uiWidth; uiX++ )
     784    {
     785      piReco[ uiX ] =DepthNeighbours[(Int)pcCU->getSingleDepthValue(uiAbsPartIdx)];
     786    }
     787    piReco     += uiStride;
     788  }
     789
     790  // clear UV
     791  UInt  uiStrideC     = pcRecoYuv->getCStride();
     792  Pel   *pRecCb       = pcRecoYuv->getCbAddr();
     793  Pel   *pRecCr       = pcRecoYuv->getCrAddr();
     794
     795  for (Int y=0; y<uiHeight/2; y++)
     796  {
     797    for (Int x=0; x<uiWidth/2; x++)
     798    {
     799      pRecCb[x] = 1<<(g_bitDepthC-1);
     800      pRecCr[x] = 1<<(g_bitDepthC-1);
     801    }
     802
     803    pRecCb += uiStrideC;
     804    pRecCr += uiStrideC;
     805  }
     806}
     807#endif
    712808#if H_3D_INTER_SDC
    713809Void TDecCu::xReconInterSDC( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
     
    832928 
    833929  // reconstruct final prediction signal by combining both segments
     930#if SHARP_DBBP_SIMPLE_FLTER_I0109
     931  m_pcPrediction->combineSegmentsWithMask(apSegPredYuv, m_ppcYuvReco[uiDepth], pMask, pcCU->getWidth(0), pcCU->getHeight(0), 0, ePartSize);
     932#else
    834933  m_pcPrediction->combineSegmentsWithMask(apSegPredYuv, m_ppcYuvReco[uiDepth], pMask, pcCU->getWidth(0), pcCU->getHeight(0));
     934#endif
    835935 
    836936  // inter recon
     
    12061306  {
    12071307    Int uiTabIdx = pcCU->getDmmWedgeTabIdx(DMM1_IDX, uiAbsPartIdx);
    1208    
     1308
     1309#if SHARP_DMM1_I0110
     1310    WedgeList* pacWedgeList  = pcCU->isDMM1UpscaleMode(uiWidth) ? &g_dmmWedgeLists[(g_aucConvertToBit[pcCU->getDMM1BasePatternWidth(uiWidth)])] :  &g_dmmWedgeLists[(g_aucConvertToBit[uiWidth])];
     1311#else
    12091312    WedgeList* pacWedgeList = &g_dmmWedgeLists[(g_aucConvertToBit[uiWidth])];
     1313#endif
    12101314    TComWedgelet* pcWedgelet = &(pacWedgeList->at( uiTabIdx ));
    1211    
     1315
    12121316    uiNumSegments = 2;
     1317
     1318#if SHARP_DMM1_I0110
     1319    pbMask       = pcCU->isDMM1UpscaleMode( uiWidth ) ? pcWedgelet->getScaledPattern(uiWidth) : pcWedgelet->getPattern();
     1320    uiMaskStride = pcCU->isDMM1UpscaleMode( uiWidth ) ? uiWidth : pcWedgelet->getStride();
     1321#else
    12131322    pbMask = pcWedgelet->getPattern();
    12141323    uiMaskStride = pcWedgelet->getStride();
     1324#endif
    12151325  }
    12161326  if( getDimType( uiLumaPredMode ) == DMM4_IDX )
Note: See TracChangeset for help on using the changeset viewer.