Ignore:
Timestamp:
15 Jul 2014, 15:32:14 (10 years ago)
Author:
hisilicon-htm
Message:

Integration of JCT3V-I0123 Fast Intra SDC coding for 3D-HEVC Intra Coding

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-11.2-dev3-HiSilicon/source/Lib/TLibEncoder/TEncSearch.cpp

    r983 r993  
    31743174   
    31753175    UInt    uiBestPUMode  = 0;
     3176#if SCU_HS_FAST_INTRA_SDC_I0123
     3177    UInt    uiBestPUModeConv  = 0;
     3178    UInt    uiSecondBestPUModeConv  = 0;
     3179    UInt    uiThirdBestPUModeConv  = 0;
     3180#endif
     3181
    31763182#if H_3D_VSO
    31773183    Dist    uiBestPUDistY = 0;
     
    31813187    UInt    uiBestPUDistC = 0;
    31823188    Double  dBestPUCost   = MAX_DOUBLE;
     3189
     3190#if SCU_HS_FAST_INTRA_SDC_I0123
     3191    Double  dBestPUCostConv   = MAX_DOUBLE;
     3192    UInt varCU      = m_pcRdCost->calcVAR(piOrg, uiStride, uiWidth,uiHeight,pcCU->getDepth(0));
     3193    UInt rdSDC = m_pcEncCfg->getIsDepth() ? numModesForFullRD : 0;
     3194#endif
     3195
    31833196#if H_3D_DIM_SDC
    31843197    Bool    bBestUseSDC   = false;
    31853198    Pel     apBestDCOffsets[2] = {0,0};
    31863199#endif
     3200#if SCU_HS_FAST_INTRA_SDC_I0123
     3201    for( UInt uiMode = 0; uiMode < numModesForFullRD + rdSDC; uiMode++ )
     3202#else
    31873203    for( UInt uiMode = 0; uiMode < numModesForFullRD; uiMode++ )
     3204#endif
    31883205    {
    31893206      // set luma prediction mode
    3190       UInt uiOrgMode = uiRdModeList[uiMode];
     3207#if !SCU_HS_FAST_INTRA_SDC_I0123
     3208     UInt uiOrgMode = uiRdModeList[uiMode]; 
     3209#endif
    31913210     
     3211#if SCU_HS_FAST_INTRA_SDC_I0123
     3212      UInt uiOrgMode;
     3213      if (uiMode < numModesForFullRD)
     3214      {   
     3215           uiOrgMode = uiRdModeList[uiMode];
     3216      }
     3217      else
     3218      {
     3219           uiOrgMode = uiRdModeList[uiMode - numModesForFullRD];
     3220
     3221           if (uiBestPUModeConv <= 1 )
     3222           {
     3223           if (uiOrgMode > 1 && varCU < 1) continue;         
     3224           }
     3225           else
     3226           {
     3227              if (uiOrgMode != uiBestPUModeConv && uiOrgMode != uiSecondBestPUModeConv && uiOrgMode != uiThirdBestPUModeConv
     3228                 && uiOrgMode > 1 && uiOrgMode < NUM_INTRA_MODE && varCU < 4)
     3229              continue;
     3230           }
     3231       }
     3232#endif
     3233
    31923234      pcCU->setLumaIntraDirSubParts ( uiOrgMode, uiPartOffset, uiDepth + uiInitTrDepth );
    31933235     
    31943236#if H_3D_DIM_SDC
     3237#if SCU_HS_FAST_INTRA_SDC_I0123
     3238      Bool bTestSDC = ( m_pcEncCfg->getUseSDC() && pcCU->getSDCAvailable(uiPartOffset) && uiMode >= numModesForFullRD);
     3239#else
    31953240      Bool bTestSDC = ( m_pcEncCfg->getUseSDC() && pcCU->getSDCAvailable(uiPartOffset) );
     3241#endif
    31963242     
    31973243      for( UInt uiSDC=0; uiSDC<=(bTestSDC?1:0); uiSDC++ )
    31983244      {
     3245#if SCU_HS_FAST_INTRA_SDC_I0123
     3246        if (!uiSDC && uiMode >= numModesForFullRD) continue;
     3247#endif
    31993248        pcCU->setSDCFlagSubParts( (uiSDC != 0), uiPartOffset, uiDepth + uiInitTrDepth );
    32003249        for( Int iSDCDeltaResi = -2; iSDCDeltaResi <= 2; iSDCDeltaResi++ )
     
    32563305#if H_3D_DIM_ENC
    32573306          xRecurIntraCodingQT( pcCU, uiInitTrDepth, uiPartOffset, bLumaOnly, pcOrgYuv, pcPredYuv, pcResiYuv, uiPUDistY, uiPUDistC, true, dPUCost, (testZeroResi != 0) );
     3307#if SCU_HS_FAST_INTRA_SDC_I0123   
     3308      if( dPUCost < dBestPUCostConv )
     3309      {
     3310        uiThirdBestPUModeConv = uiSecondBestPUModeConv;
     3311        uiSecondBestPUModeConv = uiBestPUModeConv;
     3312        uiBestPUModeConv  = uiOrgMode;
     3313        dBestPUCostConv   = dPUCost;
     3314      }
     3315#endif
    32583316#else
    32593317          xRecurIntraCodingQT( pcCU, uiInitTrDepth, uiPartOffset, bLumaOnly, pcOrgYuv, pcPredYuv, pcResiYuv, uiPUDistY, uiPUDistC, true, dPUCost );
Note: See TracChangeset for help on using the changeset viewer.