Changeset 1014 in 3DVCSoftware


Ignore:
Timestamp:
24 Jul 2014, 06:29:55 (10 years ago)
Author:
samsung-htm
Message:

Integration of JCT3V-I0084: Fast SDC DC offset decision

Location:
branches/HTM-11.2-dev3-Samsung
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-11.2-dev3-Samsung/source/Lib/TLibCommon/TypeDef.h

    r1013 r1014  
    299299#define SHARP_DMM1_I0110                  1   // LUT size reduction for DMM1 proposed in JCT3V-I0110
    300300#define FIX_WARNING                       1   // fix narrowing conversion of NumPocStCurr0,NumPocStCurr1 at TComSlice.cpp
     301#define FAST_SDC_OFFSET_DECISION_I0084    1
    301302
    302303#if H_3D_DIM_DLT
  • branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncCu.cpp

    r983 r1014  
    20032003          if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && !uiNoResidual )
    20042004          {
     2005#if FAST_SDC_OFFSET_DECISION_I0084
     2006            Double dOffsetCost[3] = {MAX_DOUBLE,MAX_DOUBLE,MAX_DOUBLE};
     2007            for( Int uiOffest = 1 ; uiOffest <= 5 ; uiOffest++ )
     2008#else
    20052009            for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ )
     2010#endif
    20062011            {
     2012#if FAST_SDC_OFFSET_DECISION_I0084
     2013              if( uiOffest > 3)
     2014              {
     2015                if ( dOffsetCost[0] < (0.9*dOffsetCost[1]) && dOffsetCost[0] < (0.9*dOffsetCost[2]) )
     2016                {
     2017                  continue;
     2018                }
     2019                if ( dOffsetCost[1] < dOffsetCost[0] && dOffsetCost[0] < dOffsetCost[2] &&  uiOffest == 5)
     2020                {
     2021                  continue;
     2022                }
     2023                if ( dOffsetCost[0] < dOffsetCost[1] && dOffsetCost[2] < dOffsetCost[0] &&  uiOffest == 4)
     2024                {
     2025                  continue;
     2026                }
     2027              }
     2028#endif
    20072029              if( rpcTempCU != rpcTempCUPre )
    20082030              {
     
    20262048              }
    20272049#endif
     2050#if FAST_SDC_OFFSET_DECISION_I0084
     2051              Int iSdcOffset = 0;
     2052              if(uiOffest % 2 == 0)
     2053              {
     2054                iSdcOffset = uiOffest >> 1;
     2055              }
     2056              else
     2057              {
     2058                iSdcOffset = -1 * (uiOffest >> 1);
     2059              }
     2060              m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
     2061                m_ppcOrigYuv[uhDepth],
     2062                ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
     2063                m_ppcResiYuvTemp[uhDepth],
     2064                m_ppcRecoYuvTemp[uhDepth],
     2065                iSdcOffset,
     2066                uhDepth );
     2067              if (uiOffest <= 3 )
     2068              {
     2069                dOffsetCost [uiOffest -1] = rpcTempCU->getTotalCost();
     2070              }
     2071#else
    20282072              m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
    20292073                m_ppcOrigYuv[uhDepth],
     
    20332077                uiOffest,
    20342078                uhDepth );
     2079#endif
    20352080
    20362081              xCheckDQP( rpcTempCU );
     
    22392284  if( rpcTempCU->getSlice()->getVPS()->getInterSDCFlag( rpcTempCU->getSlice()->getLayerIdInVps() ) && rpcTempCU->getSlice()->getIsDepth() && ePartSize == SIZE_2Nx2N)
    22402285  {
     2286#if FAST_SDC_OFFSET_DECISION_I0084
     2287    Double dOffsetCost[3] = {MAX_DOUBLE,MAX_DOUBLE,MAX_DOUBLE};
     2288    for( Int uiOffest = 1 ; uiOffest <= 5 ; uiOffest++ )
     2289#else
    22412290    for( Int uiOffest = -2 ; uiOffest <= 2 ; uiOffest++ )
    2242     {
     2291#endif
     2292    {
     2293#if FAST_SDC_OFFSET_DECISION_I0084
     2294      if( uiOffest > 3)
     2295      {
     2296        if ( dOffsetCost[0] < (0.9*dOffsetCost[1]) && dOffsetCost[0] < (0.9*dOffsetCost[2]) )
     2297        {
     2298          continue;
     2299        }
     2300        if ( dOffsetCost[1] < dOffsetCost[0] && dOffsetCost[0] < dOffsetCost[2] &&  uiOffest == 5)
     2301        {
     2302          continue;
     2303        }
     2304        if ( dOffsetCost[0] < dOffsetCost[1] && dOffsetCost[2] < dOffsetCost[0] &&  uiOffest == 4)
     2305        {
     2306          continue;
     2307        }
     2308      }
     2309#endif
    22432310      if( rpcTempCU != rpcTempCUPre )
    22442311      {
     
    22642331#endif
    22652332
     2333#if FAST_SDC_OFFSET_DECISION_I0084
     2334      Int iSdcOffset = 0;
     2335      if(uiOffest % 2 == 0)
     2336      {
     2337        iSdcOffset = uiOffest >> 1;
     2338      }
     2339      else
     2340      {
     2341        iSdcOffset = -1 * (uiOffest >> 1);
     2342      }
     2343      m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
     2344        m_ppcOrigYuv[uhDepth],
     2345        ( rpcTempCU != rpcTempCUPre ) ? m_ppcPredYuvBest[uhDepth] : m_ppcPredYuvTemp[uhDepth],
     2346        m_ppcResiYuvTemp[uhDepth],
     2347        m_ppcRecoYuvTemp[uhDepth],
     2348        iSdcOffset,
     2349        uhDepth );
     2350      if (uiOffest <= 3 )
     2351      {
     2352        dOffsetCost [uiOffest -1] = rpcTempCU->getTotalCost();
     2353      }
     2354#else
    22662355      m_pcPredSearch->encodeResAndCalcRdInterSDCCU( rpcTempCU,
    22672356        m_ppcOrigYuv[uhDepth],
     
    22712360        uiOffest,
    22722361        uhDepth );
     2362#endif
    22732363
    22742364      xCheckDQP( rpcTempCU );
  • branches/HTM-11.2-dev3-Samsung/source/Lib/TLibEncoder/TEncSearch.cpp

    r1001 r1014  
    32843284#endif
    32853285        pcCU->setSDCFlagSubParts( (uiSDC != 0), uiPartOffset, uiDepth + uiInitTrDepth );
     3286#if FAST_SDC_OFFSET_DECISION_I0084
     3287        Double dOffsetCost[3] = {MAX_DOUBLE,MAX_DOUBLE,MAX_DOUBLE};
     3288        for( Int iOffset = 1; iOffset <= 5; iOffset++ )
     3289#else
    32863290        for( Int iSDCDeltaResi = -2; iSDCDeltaResi <= 2; iSDCDeltaResi++ )
    3287         {
     3291#endif
     3292        {
     3293#if FAST_SDC_OFFSET_DECISION_I0084
     3294          Int iSDCDeltaResi = 0;
     3295          if(iOffset % 2 == 0)
     3296          {
     3297            iSDCDeltaResi = iOffset >> 1;
     3298          }
     3299          else
     3300          {
     3301            iSDCDeltaResi = -1 * (iOffset >> 1);
     3302          }
     3303#endif
    32883304          if( ( uiSDC == 0 ) && iSDCDeltaResi != 0 )
    32893305          {
    32903306            continue;
    32913307          }
     3308#if FAST_SDC_OFFSET_DECISION_I0084
     3309          if( iOffset > 3)
     3310          {
     3311            if ( dOffsetCost[0] < (0.9*dOffsetCost[1]) && dOffsetCost[0] < (0.9*dOffsetCost[2]) )
     3312            {
     3313              continue;
     3314            }
     3315            if ( dOffsetCost[1] < dOffsetCost[0] && dOffsetCost[0] < dOffsetCost[2] &&  iOffset == 5)
     3316            {
     3317              continue;
     3318            }
     3319            if ( dOffsetCost[0] < dOffsetCost[1] && dOffsetCost[2] < dOffsetCost[0] &&  iOffset == 4)
     3320            {
     3321              continue;
     3322            }
     3323          }
     3324#endif
    32923325#endif
    32933326     
     
    33353368          // start encoding with SDC
    33363369          xIntraCodingSDC(pcCU, uiPartOffset, pcOrgYuv, pcPredYuv, uiPUDistY, dPUCost, ( testZeroResi != 0 ), iSDCDeltaResi );
     3370#if FAST_SDC_OFFSET_DECISION_I0084
     3371          if ( testZeroResi == 0 && iOffset <= 3 )
     3372          {
     3373            dOffsetCost [iOffset -1] = dPUCost;
     3374          }
     3375#endif
    33373376        }
    33383377        else
Note: See TracChangeset for help on using the changeset viewer.