Changeset 181 in 3DVCSoftware


Ignore:
Timestamp:
14 Nov 2012, 17:23:56 (11 years ago)
Author:
orange
Message:

Integrated JCT3V-B0068 (QTLPC: quadtree limitation + predictive coding of the quadtree for depth coding)

Location:
branches/HTM-4.1-dev2-Orange
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-4.1-dev2-Orange/CommonTestConditionsCfgs/baseCfg_2view+depth.cfg

    r150 r181  
    201201MVI                       : 1                                      # motion parameter inheritance
    202202VSO                       : 1                                      # use of view synthesis optimization for depth coding
     203QTLPC                     : 1                                      # use of quadtree limitation + predictive coding of the quadtree for depth coding
    203204
    204205
  • branches/HTM-4.1-dev2-Orange/CommonTestConditionsCfgs/baseCfg_3view+depth.cfg

    r150 r181  
    205205MVI                       : 1                                      # motion parameter inheritance
    206206VSO                       : 1                                      # use of view synthesis optimization for depth coding
     207QTLPC                     : 1                                      # use of quadtree limitation + predictive coding of the quadtree for depth coding
    207208
    208209
  • branches/HTM-4.1-dev2-Orange/cfg/encoder_mvd.cfg

    r149 r181  
    204204MVI                       : 1                                      # motion parameter inheritance
    205205VSO                       : 1                                      # use of view synthesis optimization for depth coding
     206QTLPC                     : 1                                      # use of quadtree limitation + predictive coding of the quadtree for depth coding
    206207
    207208
  • branches/HTM-4.1-dev2-Orange/source/App/TAppEncoder/TAppEncCfg.cpp

    r177 r181  
    370370#endif
    371371
    372 #if OL_DEPTHLIMIT_A0044
    373   ("DPL",                             m_bDepthPartitionLimiting , false         , "Use DepthPartitionLimiting" )
     372#if OL_QTLIMIT_PREDCODING_B0068
     373  ("QTLPC",                           m_bUseQTLPC               , true         , "Use depth Quadtree Limitation + Predictive Coding" )
    374374#endif
    375375
     
    17401740  printf("WVSO:%d ", m_bUseWVSO );
    17411741#endif
    1742 
    1743 #if OL_DEPTHLIMIT_A0044
    1744   printf("DPL:%d ", m_bDepthPartitionLimiting);
     1742#if OL_QTLIMIT_PREDCODING_B0068
     1743  printf("QTLPC:%d ", m_bUseQTLPC);
    17451744#endif
    17461745#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
  • branches/HTM-4.1-dev2-Orange/source/App/TAppEncoder/TAppEncCfg.h

    r177 r181  
    315315#endif
    316316
    317 #if OL_DEPTHLIMIT_A0044
    318   Bool      m_bDepthPartitionLimiting;
     317#if OL_QTLIMIT_PREDCODING_B0068
     318  Bool      m_bUseQTLPC;                                      ///< flag for using depth QuadTree Limitation + Predictive Coding
    319319#endif
    320320
  • branches/HTM-4.1-dev2-Orange/source/App/TAppEncoder/TAppEncTop.cpp

    r177 r181  
    367367    m_acTEncTopList[iViewIdx]->setUseDMM                     ( false );
    368368#endif
    369 #if OL_DEPTHLIMIT_A0044
    370     m_acTEncTopList[iViewIdx]->setUseDPL                     ( false );
     369#if OL_QTLIMIT_PREDCODING_B0068
     370    m_acTEncTopList[iViewIdx]->setUseQTLPC                   ( false );
    371371#endif
    372372#if HHI_MPI
     
    653653    m_acTEncDepthTopList[iViewIdx]->setUseDMM                     ( m_bUseDMM );
    654654#endif
    655 #if OL_DEPTHLIMIT_A0044
    656     m_acTEncDepthTopList[iViewIdx]->setUseDPL                      (m_bDepthPartitionLimiting);
     655#if OL_QTLIMIT_PREDCODING_B0068
     656    m_acTEncDepthTopList[iViewIdx]->setUseQTLPC                   (m_bUseQTLPC);
    657657#endif
    658658#if HHI_MPI
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComDataCU.cpp

    r177 r181  
    163163  m_apSegmentDCOffset[1] = NULL;
    164164#endif
    165 #if OL_DEPTHLIMIT_A0044
    166   //add a variable to store the partition information
    167   //a 2D array in part_symbol, uidepth format
    168   //initialize m_partInfo to OL_END_CU
    169   for (Int i=0; i < OL_PART_BUF_SIZE; i++)
    170   {
    171     for (Int j=0; j < 2; j++)
    172     {
    173       m_uiPartInfo[i][j] = OL_END_CU;
    174     }
    175   }
    176 #endif
    177165}
    178166
     
    507495Void TComDataCU::initCU( TComPic* pcPic, UInt iCUAddr )
    508496{
    509 #if OL_DEPTHLIMIT_A0044
    510   TComDataCU* pcCU     = pcPic->getCU(iCUAddr);
    511 #endif
    512 
    513497  m_pcPic              = pcPic;
    514498  m_pcSlice            = pcPic->getSlice(pcPic->getCurrSliceIdx());
     
    740724    m_apcCUColocated[1] = getSlice()->getRefPic( REF_PIC_LIST_1, 0)->getCU( m_uiCUAddr );
    741725  }
    742 #if OL_DEPTHLIMIT_A0044
    743   setPartDumpFlag (pcCU->getPartDumpFlag());
    744 #endif
    745726}
    746727
     
    10961077  memcpy(m_uiSliceStartCU,pcCU->m_uiSliceStartCU+uiPartOffset,sizeof(UInt)*m_uiNumPartition);
    10971078  memcpy(m_uiEntropySliceStartCU,pcCU->m_uiEntropySliceStartCU+uiPartOffset,sizeof(UInt)*m_uiNumPartition);
    1098 #if OL_DEPTHLIMIT_A0044
    1099   setPartDumpFlag (pcCU->getPartDumpFlag());
    1100 #endif
    11011079}
    11021080
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComDataCU.h

    r177 r181  
    244244  UInt*         m_uiSliceStartCU;    ///< Start CU address of current slice
    245245  UInt*         m_uiEntropySliceStartCU; ///< Start CU address of current slice
    246 
    247 #if OL_DEPTHLIMIT_A0044
    248   //add a variable to store the partition information
    249   //a 2D array in uidepth, part_symbol format
    250   UInt          m_uiPartInfo[OL_PART_BUF_SIZE][2];
    251   UInt          m_uiPartNum;
    252   Bool          m_dumpPartInfo;
    253 #endif
    254246 
    255247  // -------------------------------------------------------------------------------------------------------------------
     
    624616 
    625617  Void          compressMV            ();
    626 
    627 #if OL_DEPTHLIMIT_A0044
    628   Void        resetPartInfo     () {m_uiPartNum = 0;};
    629   Void        incrementPartInfo () {m_uiPartNum ++;};
    630   Void        updatePartInfo(UInt uiSymbol, UInt uiDepth) { m_uiPartInfo[m_uiPartNum][0] = uiSymbol; m_uiPartInfo[m_uiPartNum][1] = uiDepth;};
    631   UInt*       readPartInfo()                              { return (UInt*)m_uiPartInfo;};
    632   Void        setPartDumpFlag(Bool flag)                  { m_dumpPartInfo = flag; };
    633   Bool        getPartDumpFlag()                           { return m_dumpPartInfo; };
    634 #endif
    635618 
    636619  // -------------------------------------------------------------------------------------------------------------------
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComPic.cpp

    r100 r181  
    8181  m_aaiCodedScale     = 0;
    8282  m_aaiCodedOffset    = 0;
     83#if OL_QTLIMIT_PREDCODING_B0068
     84  m_bReduceBitsQTL    = 0;
     85#endif
    8386}
    8487
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComPic.h

    r126 r181  
    113113  Int**                 m_aaiCodedOffset;
    114114
    115 #if OL_DEPTHLIMIT_A0044
    116   UInt*                 m_texPartInfo;
    117   UInt                  m_uiTexPartIndex;
     115#if OL_QTLIMIT_PREDCODING_B0068
     116  Bool                  m_bReduceBitsQTL;
    118117#endif
    119118
     
    179178  Int           getViewOrderIdx()                             { return m_iViewOrderIdx; }
    180179#endif
     180
     181#if OL_QTLIMIT_PREDCODING_B0068
     182  Bool          getReduceBitsFlag ()             { return m_bReduceBitsQTL;     }
     183  Void          setReduceBitsFlag ( Bool bFlag ) { m_bReduceBitsQTL = bFlag;    }
     184#endif
     185
    181186  Void          setScaleOffset( Int** pS, Int** pO )  { m_aaiCodedScale = pS; m_aaiCodedOffset = pO; }
    182187  Int**         getCodedScale ()                      { return m_aaiCodedScale;  }
     
    249254#endif
    250255
    251 #if OL_DEPTHLIMIT_A0044
    252   UInt        accessPartInfo        ( UInt count )   { return m_texPartInfo[m_uiTexPartIndex + count]; };
    253   Void        incrementTexPartIndex (            )   { m_uiTexPartIndex += 2;    };
    254   UInt        getTexPartIndex       ()               { return m_uiTexPartIndex;  };
    255   Void        setTexPartIndex       ( UInt idx   )   { m_uiTexPartIndex = idx; };
    256   Void        setPartInfo           ( UInt* texPart) { m_texPartInfo    = texPart;  };
    257 #endif
    258 
    259256  Bool          getValidSlice                                  (Int sliceID)  {return m_pbValidSlice[sliceID];}
    260257  Int           getSliceGranularityForNDBFilter                ()             {return m_sliceGranularityForNDBFilter;}
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComSlice.cpp

    r177 r181  
    15231523, m_bUseDMM                   (false)
    15241524#endif
    1525 #if OL_DEPTHLIMIT_A0044
    1526 , m_bDepthPartitionLimiting   (false)
     1525#if OL_QTLIMIT_PREDCODING_B0068
     1526, m_bUseQTLPC                 (false)
    15271527#endif
    15281528{
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TComSlice.h

    r177 r181  
    363363#endif
    364364
    365 #if OL_DEPTHLIMIT_A0044
    366   Bool m_bDepthPartitionLimiting;
     365#if OL_QTLIMIT_PREDCODING_B0068
     366  Bool m_bUseQTLPC;
    367367#endif
    368368
     
    643643#endif
    644644
    645 #if OL_DEPTHLIMIT_A0044
    646   Void setUseDPL(Bool b) {m_bDepthPartitionLimiting = b; }
    647   Bool getUseDPL()       {return m_bDepthPartitionLimiting;}
     645#if OL_QTLIMIT_PREDCODING_B0068
     646  Void setUseQTLPC( Bool b ) { m_bUseQTLPC = b;    }
     647  Bool getUseQTLPC()         { return m_bUseQTLPC; }
    648648#endif
    649649
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibCommon/TypeDef.h

    r177 r181  
    4242//! \{
    4343
     44#define OL_QTLIMIT_PREDCODING_B0068       1    //JCT3V-B0068
     45
    4446#define MTK_UNCONSTRAINED_MVI             1    //JCT3V-B0083
    4547
     
    108110#define LGE_ILLUCOMP_B0045_ENCSIMP        1
    109111#endif
    110 #define LGE_CLEAN_UP                      1
    111 
    112 #define OL_DEPTHLIMIT_A0044               1 //JCT2-A0044
    113 #if OL_DEPTHLIMIT_A0044
    114 #define OL_DO_NOT_LIMIT_INTRA_SLICES_PART 1 //Turn this on to not perform depth limiting for I-SLICES.
    115 #define OL_END_CU                         MAX_INT //Default for initializing the partition information buffer
    116 #define OL_PART_BUF_SIZE                  86 //maximum number of possible partition bits in a CU
    117 #endif
    118112
    119113#define HHI_INTERVIEW_SKIP                1
     
    134128#endif
    135129
    136 #define RWTH_SDC_DLT_B0036                1   // JCT3V-B0036: Simplified Depth Coding + Depth Lookup Table
     130#define RWTH_SDC_DLT_B0036                0   // JCT3V-B0036: Simplified Depth Coding + Depth Lookup Table
    137131#if RWTH_SDC_DLT_B0036
    138132#define Log2( n ) ( log((double)n) / log(2.0) )
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibDecoder/TDecCAVLC.cpp

    r177 r181  
    16741674    }
    16751675#endif
     1676#if OL_QTLIMIT_PREDCODING_B0068
     1677    if( bIsDepth )
     1678    {
     1679      READ_FLAG( uiCode, "use_qtlpc_flag" );
     1680      pcSPS->setUseQTLPC( uiCode );
     1681    }
     1682#endif
    16761683   
    16771684#if RWTH_SDC_DLT_B0036
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibDecoder/TDecSbac.cpp

    r177 r181  
    753753 
    754754  UInt uiSymbol;
    755   m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) );
    756   DTRACE_CABAC_VL( g_nSymbolCounter++ )
    757   DTRACE_CABAC_T( "\tSplitFlag\n" )
     755
     756#if OL_QTLIMIT_PREDCODING_B0068
     757  Bool bParseSplitFlag    = true;
     758
     759  TComSPS *sps            = pcCU->getPic()->getSlice(0)->getSPS();
     760  TComPic *pcTexture      = pcCU->getSlice()->getTexturePic();
     761  Bool bDepthMapDetect    = (pcTexture != NULL);
     762  Bool bIntraSliceDetect  = (pcCU->getSlice()->getSliceType() == I_SLICE);
     763
     764  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC())
     765  {
     766    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     767    assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth);
     768    bParseSplitFlag         = (pcTextureCU->getDepth(uiAbsPartIdx) > uiDepth);
     769  }
     770
     771  if(bParseSplitFlag)
     772  {
     773#endif
     774    m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUSplitFlagSCModel.get( 0, 0, pcCU->getCtxSplitFlag( uiAbsPartIdx, uiDepth ) ) );
     775    DTRACE_CABAC_VL( g_nSymbolCounter++ )
     776    DTRACE_CABAC_T( "\tSplitFlag\n" )
     777#if OL_QTLIMIT_PREDCODING_B0068
     778  }
     779  else
     780    uiSymbol = 0;
     781#endif
     782
    758783  pcCU->setDepthSubParts( uiDepth + uiSymbol, uiAbsPartIdx );
    759784 
     
    771796  UInt uiSymbol, uiMode = 0;
    772797  PartSize eMode;
     798
     799#if OL_QTLIMIT_PREDCODING_B0068
     800  Bool bParsePartSize    = true;
     801  TComSPS *sps           = pcCU->getPic()->getSlice(0)->getSPS();
     802  TComPic *pcTexture     = pcCU->getSlice()->getTexturePic();
     803  Bool bDepthMapDetect   = (pcTexture != NULL);
     804  Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE);
     805
     806  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC())
     807  {
     808    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     809    assert(pcTextureCU->getDepth(uiAbsPartIdx) >= uiDepth);
     810    if (pcTextureCU->getDepth(uiAbsPartIdx) == uiDepth && pcTextureCU->getPartitionSize( uiAbsPartIdx ) != SIZE_NxN)
     811    {
     812      bParsePartSize = false;
     813      eMode          = SIZE_2Nx2N;
     814    }
     815  }
     816#endif
    773817 
    774818  if ( pcCU->isIntra( uiAbsPartIdx ) )
    775819  {
    776     uiSymbol = 1;
    777     if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
    778     {
    779       m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) );
    780     }
    781     eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN;
     820#if OL_QTLIMIT_PREDCODING_B0068
     821    if(bParsePartSize)
     822    {
     823#endif
     824      uiSymbol = 1;
     825      if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
     826      {
     827        m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, 0) );
     828      }
     829      eMode = uiSymbol ? SIZE_2Nx2N : SIZE_NxN;
     830#if OL_QTLIMIT_PREDCODING_B0068
     831    }
     832#endif
    782833    UInt uiTrLevel = 0;   
    783834    UInt uiWidthInBit  = g_aucConvertToBit[pcCU->getWidth(uiAbsPartIdx)]+2;
     
    795846  else
    796847  {
    797     UInt uiMaxNumBits = 2;
    798     if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) )
    799     {
    800       uiMaxNumBits ++;
    801     }
    802     for ( UInt ui = 0; ui < uiMaxNumBits; ui++ )
    803     {
    804       m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) );
    805       if ( uiSymbol )
    806       {
    807         break;
    808       }
    809       uiMode++;
    810     }
    811     eMode = (PartSize) uiMode;
    812     if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )
    813     {
    814       if (eMode == SIZE_2NxN)
    815       {
     848#if OL_QTLIMIT_PREDCODING_B0068
     849    if(bParsePartSize)
     850    {
     851#endif
     852      UInt uiMaxNumBits = 2;
     853      if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && !( pcCU->getSlice()->getSPS()->getDisInter4x4() && (g_uiMaxCUWidth>>uiDepth) == 8 && (g_uiMaxCUHeight>>uiDepth) == 8 ) )
     854      {
     855        uiMaxNumBits ++;
     856      }
     857      for ( UInt ui = 0; ui < uiMaxNumBits; ui++ )
     858      {
     859        m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPartSizeSCModel.get( 0, 0, ui) );
     860        if ( uiSymbol )
     861        {
     862          break;
     863        }
     864        uiMode++;
     865      }
     866      eMode = (PartSize) uiMode;
     867      if ( pcCU->getSlice()->getSPS()->getAMPAcc( uiDepth ) )
     868      {
     869        if (eMode == SIZE_2NxN)
     870        {
     871#if AMP_CTX
     872            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
     873#else
     874          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));
     875#endif
     876          if (uiSymbol == 0)
     877          {
     878#if AMP_CTX
     879            m_pcTDecBinIf->decodeBinEP(uiSymbol);
     880#else
     881            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 ));
     882#endif
     883            eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD);
     884          }
     885        }
     886        else if (eMode == SIZE_Nx2N)
     887        {
    816888#if AMP_CTX
    817889          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
    818890#else
    819         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 0 ));
    820 #endif
    821         if (uiSymbol == 0)
    822         {
     891          m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 ));
     892#endif
     893          if (uiSymbol == 0)
     894          {
    823895#if AMP_CTX
    824           m_pcTDecBinIf->decodeBinEP(uiSymbol);
    825 #else
    826           m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUYPosiSCModel.get( 0, 0, 1 ));
    827 #endif
    828           eMode = (uiSymbol == 0? SIZE_2NxnU : SIZE_2NxnD);
     896            m_pcTDecBinIf->decodeBinEP(uiSymbol);
     897#else
     898            m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 ));
     899#endif
     900            eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N);
     901          }
    829902        }
    830903      }
    831       else if (eMode == SIZE_Nx2N)
    832       {
    833 #if AMP_CTX
    834         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUAMPSCModel.get( 0, 0, 0 ));
    835 #else
    836         m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 0 ));
    837 #endif
    838         if (uiSymbol == 0)
    839         {
    840 #if AMP_CTX
    841           m_pcTDecBinIf->decodeBinEP(uiSymbol);
    842 #else
    843           m_pcTDecBinIf->decodeBin(uiSymbol, m_cCUXPosiSCModel.get( 0, 0, 1 ));
    844 #endif
    845           eMode = (uiSymbol == 0? SIZE_nLx2N : SIZE_nRx2N);
    846         }
    847       }
    848     }
     904#if OL_QTLIMIT_PREDCODING_B0068
     905    }
     906#endif
    849907  }
    850908  pcCU->setPartSizeSubParts( eMode, uiAbsPartIdx, uiDepth );
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncCavlc.cpp

    r177 r181  
    644644  }
    645645#endif
     646
     647#if OL_QTLIMIT_PREDCODING_B0068
     648  if( bIsDepth )
     649  {
     650    WRITE_FLAG( pcSPS->getUseQTLPC() ? 1 : 0, "use_qtlpc_flag");
     651  }
     652#endif
    646653 
    647654#if RWTH_SDC_DLT_B0036
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncCfg.h

    r177 r181  
    328328#endif
    329329
    330 #if OL_DEPTHLIMIT_A0044
    331   Bool     m_bDepthPartitionLimiting;
     330#if OL_QTLIMIT_PREDCODING_B0068
     331  Bool     m_bUseQTLPC;
    332332#endif
    333333
     
    838838  Bool      getUseDMM()        { return m_bUseDMM; }
    839839#endif
     840
     841#if OL_QTLIMIT_PREDCODING_B0068
     842  Void      setUseQTLPC( Bool b ) { m_bUseQTLPC = b;    }
     843  Bool      getUseQTLPC()         { return m_bUseQTLPC; }
     844#endif
    840845 
    841846#if RWTH_SDC_DLT_B0036
    842847  Bool      getUseDLT()      { return m_bUseDLT;     }
    843848  Bool      getUseSDC()      { return m_bUseSDC;     }
    844 #endif
    845 
    846 #if OL_DEPTHLIMIT_A0044
    847   Void      setUseDPL(Bool b) {m_bDepthPartitionLimiting = b; }
    848   Bool      getUseDPL()       {return m_bDepthPartitionLimiting;}
    849849#endif
    850850
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncCu.cpp

    r177 r181  
    451451  TComPic* pcPic = rpcBestCU->getPic();
    452452
    453 #if OL_DEPTHLIMIT_A0044
    454   TComSPS *sps = pcPic->getSlice(0)->getSPS();
    455   TComPic *pcTexture;
    456   TComDataCU * pcTextureCU;
    457   Bool  depthMapDetect =  false;
    458 #if !LGE_CLEAN_UP
    459   UInt         uiPrevTexPartIndex = 0;
    460 #endif
    461 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    462   Bool bIntraSliceDetect = false;
    463 #endif
    464   Bool bTry2NxN = false;
    465   Bool bTryNx2N = false;
    466     pcTexture = rpcBestCU->getSlice()->getTexturePic();
    467     if(pcTexture != NULL) //depth map being encoded
    468     {
    469     depthMapDetect = true;
    470 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    471       bIntraSliceDetect = (rpcBestCU->getSlice()->getSliceType()==I_SLICE);
    472 #endif
    473     if(uiDepth == 0)
    474     {
    475       pcTextureCU = pcTexture->getCU( rpcBestCU->getAddr() );
    476       pcTexture->setPartInfo(pcTextureCU->readPartInfo());
    477       pcTexture->setTexPartIndex(0);
    478     }
    479     }
    480     else
    481     {
    482       depthMapDetect = false;
    483     }
    484 #endif
     453#if OL_QTLIMIT_PREDCODING_B0068
     454  TComSPS *sps         = pcPic->getSlice(0)->getSPS();
     455  TComPic *pcTexture   = rpcBestCU->getSlice()->getTexturePic();
     456
     457  Bool  depthMapDetect    = (pcTexture != NULL);
     458  Bool  bIntraSliceDetect = (rpcBestCU->getSlice()->getSliceType() == I_SLICE);
     459
     460  Bool bTry2NxN = true;
     461  Bool bTryNx2N = true;
     462#endif
     463
    485464  // get Original YUV data from picture
    486465  m_ppcOrigYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvOrg(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU() );
     
    626605      // variables for fast encoder decision
    627606      bEarlySkip  = false;
    628       bTrySplit    = true;
     607      bTrySplit   = true;
    629608      fRD_Skip    = MAX_DOUBLE;
    630609
    631610      rpcTempCU->initEstData( uiDepth, iQP );
    632611
    633 #if OL_DEPTHLIMIT_A0044
     612#if OL_QTLIMIT_PREDCODING_B0068
    634613      //logic for setting bTrySplit using the partition information that is stored of the texture colocated CU
    635 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    636       if(depthMapDetect && !bIntraSliceDetect && sps->getUseDPL())
    637 #else
    638       if(depthMapDetect && sps->getUseDPL()) //depth map being encoded
    639 #endif
    640       {
    641         assert(uiDepth == pcTexture->accessPartInfo(1));
    642         if(pcTexture->accessPartInfo(0) == 1) //NxN modes
     614      if(depthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC())
     615      {
     616        TComDataCU* pcTextureCU = pcTexture->getCU( rpcBestCU->getAddr() ); //Corresponding texture LCU
     617        UInt uiCUIdx            = rpcBestCU->getZorderIdxInCU();
     618        assert(pcTextureCU->getDepth(uiCUIdx) >= uiDepth); //Depth cannot be more partitionned than the texture.
     619        if (pcTextureCU->getDepth(uiCUIdx) > uiDepth || pcTextureCU->getPartitionSize(uiCUIdx) == SIZE_NxN) //Texture was split.
    643620        {
    644621          bTrySplit = true;
    645           bTryNx2N = true;
    646           bTry2NxN = true;
    647 #if !LGE_CLEAN_UP
    648           uiPrevTexPartIndex = pcTexture->getTexPartIndex();
    649 #endif
    650           pcTexture->incrementTexPartIndex();
     622          bTryNx2N  = true;
     623          bTry2NxN  = true;
    651624        }
    652         else if(pcTexture->accessPartInfo(0) == 0) //2Nx2N modes
    653         {
    654           UInt uiTexdepth;
    655           UInt temp_uiTexPartIndex;
    656           bTrySplit = false;
    657 
    658           //scan ahead till next depth
    659           uiTexdepth = pcTexture->accessPartInfo(1);
    660 #if !LGE_CLEAN_UP
    661           uiPrevTexPartIndex = pcTexture->getTexPartIndex();
    662 #endif
    663           pcTexture->incrementTexPartIndex();
    664           temp_uiTexPartIndex = pcTexture->getTexPartIndex(); //store in case to rewind
    665 
    666           while(uiTexdepth != pcTexture->accessPartInfo(1) && uiTexdepth != 0)
    667           {
    668             if(pcTexture->accessPartInfo(1) < uiTexdepth)
    669             {
    670               break;
    671             }
    672             pcTexture->incrementTexPartIndex();
    673 
    674             if(pcTexture->accessPartInfo(1) == OL_END_CU)
    675             {
    676               pcTexture->setTexPartIndex(temp_uiTexPartIndex);
    677               uiTexdepth++;
    678               if(uiTexdepth >= g_uiMaxCUDepth)
    679               {     
    680                 break;
    681               }
    682             }
    683           }
    684         }
    685         else if(pcTexture->accessPartInfo(0) == OL_END_CU)
     625        else
    686626        {
    687627          bTrySplit = false;
    688           bTryNx2N = false;
    689           bTry2NxN = false;
     628          bTryNx2N  = false;
     629          bTry2NxN  = false;
    690630        }
    691         else if(pcTexture->accessPartInfo(0) == 2) //2NxN case
    692         {
    693           bTrySplit = false;
    694           bTryNx2N = false;
    695           bTry2NxN = true;
    696 #if !LGE_CLEAN_UP
    697           uiPrevTexPartIndex = pcTexture->getTexPartIndex(); 
    698 #endif
    699           pcTexture->incrementTexPartIndex(); ;
    700         }
    701         else if(pcTexture->accessPartInfo(0) == 3) //Nx2N case
    702         {
    703           bTrySplit = false;
    704           bTryNx2N = true;
    705           bTry2NxN = false;
    706 #if !LGE_CLEAN_UP
    707           uiPrevTexPartIndex = pcTexture->getTexPartIndex(); 
    708 #endif
    709           pcTexture->incrementTexPartIndex(); ;
    710         }
    711       }
    712 #endif
    713 
     631      }
     632#endif
    714633
    715634      // do inter modes, SKIP and 2Nx2N
     
    799718#endif
    800719
    801 #if OL_DEPTHLIMIT_A0044
    802 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    803       if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    804 #else
    805       if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    806 #endif
     720#if OL_QTLIMIT_PREDCODING_B0068
     721      if(depthMapDetect && !bIntraSliceDetect  && sps->getUseQTLPC())
    807722      {
    808723        bTrySplitDQP = bTrySplit;
     
    810725      else
    811726      {
     727#endif
    812728        if( (g_uiMaxCUWidth>>uiDepth) >= rpcTempCU->getSlice()->getPPS()->getMinCuDQPSize() )
    813729        {
     
    821737          bTrySplitDQP = bTrySplit;
    822738        }
    823       }
    824 #else
    825 
    826       if( (g_uiMaxCUWidth>>uiDepth) >= rpcTempCU->getSlice()->getPPS()->getMinCuDQPSize() )
    827       {
    828         if(iQP == iBaseQP)
    829         {
    830           bTrySplitDQP = bTrySplit;
    831         }
    832       }
    833       else
    834       {
    835         bTrySplitDQP = bTrySplit;
    836       }
    837 #endif
     739#if OL_QTLIMIT_PREDCODING_B0068
     740      }
     741#endif
     742
    838743#if LOSSLESS_CODING
    839744      if (isAddLowestQP && (iQP == lowestQP))
     
    891796              if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && doNotBlockPu)
    892797              {
    893 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    894 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    895                 if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    896 #else
    897                 if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    898 #endif
     798#if OL_QTLIMIT_PREDCODING_B0068 //try InterNxN
     799                if(bTrySplit)
    899800                {
    900                   if (bTrySplit)
    901                   {
    902 #endif
    903 #if HHI_INTER_VIEW_RESIDUAL_PRED
    904                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    905 #endif
    906 #if HHI_INTERVIEW_SKIP
    907                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN, bFullyRenderedSec   );
    908 #else
    909                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN   );
    910 #endif
    911                     rpcTempCU->initEstData( uiDepth, iQP );
    912 #if OL_DEPTHLIMIT_A0044
    913                   }//bTrySplit
    914                 }//depthMapDetect
    915                 else//do things normally
    916                 {
     801#endif
    917802#if HHI_INTER_VIEW_RESIDUAL_PRED
    918803                  rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     
    924809#endif
    925810                  rpcTempCU->initEstData( uiDepth, iQP );
     811#if OL_QTLIMIT_PREDCODING_B0068
    926812                }
    927813#endif
     
    931817
    932818          { // 2NxN, Nx2N
    933 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    934 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    935             if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    936 #else
    937             if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    938 #endif
     819#if OL_QTLIMIT_PREDCODING_B0068 //try Nx2N
     820            if(bTryNx2N)
    939821            {
    940               if (bTryNx2N)
    941               {
    942 #endif
    943                 if(doNotBlockPu)
    944                 {
    945 #if HHI_INTER_VIEW_RESIDUAL_PRED
    946                   rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    947 #endif
    948 #if HHI_INTERVIEW_SKIP
    949                   xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N, bFullyRenderedSec   );
    950 #else
    951                   xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N  );
    952 #endif
    953                   rpcTempCU->initEstData( uiDepth, iQP );
    954                   if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_Nx2N )
    955                   {
    956                     doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    957                   }
    958                 }
    959 #if OL_DEPTHLIMIT_A0044
    960               }//bTryNx2N
    961             }//depthMapDetect
    962             else//do things normally
    963             {
     822#endif
    964823              if(doNotBlockPu)
    965824              {
     
    978837                }
    979838              }
     839#if OL_QTLIMIT_PREDCODING_B0068
    980840            }
    981841#endif
    982842
    983 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    984 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    985             if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    986 #else
    987             if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    988 #endif
     843#if OL_QTLIMIT_PREDCODING_B0068 //try 2NxN
     844            if(bTry2NxN)
    989845            {
    990               if (bTry2NxN)
    991               {
    992 #endif
    993                 if(doNotBlockPu)
    994                 {
    995 #if HHI_INTER_VIEW_RESIDUAL_PRED
    996                   rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    997 #endif
    998 #if HHI_INTERVIEW_SKIP
    999                   xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxN, bFullyRenderedSec   );
    1000 #else
    1001                   xCheckRDCostInter      ( rpcBestCU, rpcTempCU, SIZE_2NxN  );
    1002 #endif
    1003                   rpcTempCU->initEstData( uiDepth, iQP );
    1004                   if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxN)
    1005                   {
    1006                     doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1007                   }
    1008                 }
    1009 #if OL_DEPTHLIMIT_A0044
    1010               }//bTryNx2N
    1011             }//depthMapDetect
    1012             else//do things normally
    1013             {
     846#endif
    1014847              if(doNotBlockPu)
    1015848              {
     
    1028861                }
    1029862              }
     863#if OL_QTLIMIT_PREDCODING_B0068
    1030864            }
    1031865#endif
     
    1050884            if ( bTestAMP_Hor )
    1051885            {
    1052 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    1053 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    1054               if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    1055 #else
    1056               if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    1057 #endif
     886#if OL_QTLIMIT_PREDCODING_B0068 //try 2NxnU & 2NxnD
     887              if(bTry2NxN)
    1058888              {
    1059                 if (bTry2NxN)
    1060                 {
    1061 #endif
    1062                   if(doNotBlockPu)
    1063                   {
    1064 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1065                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1066 #endif
    1067 #if HHI_INTERVIEW_SKIP
    1068                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec );
    1069 #else
    1070                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU );
    1071 #endif
    1072                     rpcTempCU->initEstData( uiDepth, iQP );
    1073                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
    1074                     {
    1075                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1076                     }
    1077                   }
    1078                   if(doNotBlockPu)
    1079                   {
    1080 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1081                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1082 #endif
    1083 #if HHI_INTERVIEW_SKIP
    1084                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec );
    1085 #else
    1086                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD );
    1087 #endif
    1088                     rpcTempCU->initEstData( uiDepth, iQP );
    1089                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
    1090                     {
    1091                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1092                     }
    1093                   }
    1094 #if OL_DEPTHLIMIT_A0044
    1095                 }//bTry2NxN
    1096               }//depthMapDetect
    1097               else//do things normally
    1098               {
     889#endif
    1099890                if(doNotBlockPu)
    1100891                {
     
    1129920                  }
    1130921                }
     922#if OL_QTLIMIT_PREDCODING_B0068
    1131923              }
    1132924#endif
     
    1135927            else if ( bTestMergeAMP_Hor )
    1136928            {
    1137 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    1138 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    1139               if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    1140 #else
    1141               if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    1142 #endif
     929#if OL_QTLIMIT_PREDCODING_B0068 //try 2NxnU & 2NxnD Merge
     930              if(bTry2NxN)
    1143931              {
    1144                 if (bTry2NxN)
    1145                 {
    1146 #endif
    1147                   if(doNotBlockPu)
    1148                   {
    1149 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1150                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1151 #endif
    1152 #if HHI_INTERVIEW_SKIP
    1153                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec, true );
    1154 #else
    1155                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, true );
    1156 #endif
    1157                     rpcTempCU->initEstData( uiDepth, iQP );
    1158                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
    1159                     {
    1160                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1161                     }
    1162                   }
    1163                   if(doNotBlockPu)
    1164                   {
    1165 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1166                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1167 #endif
    1168 #if HHI_INTERVIEW_SKIP
    1169                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec, true );
    1170 #else
    1171                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, true );
    1172 #endif
    1173                     rpcTempCU->initEstData( uiDepth, iQP );
    1174                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
    1175                     {
    1176                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1177                     }
    1178                   }
    1179 #if OL_DEPTHLIMIT_A0044
    1180                 }//bTry2NxN
    1181               }//depthMapDetect
    1182               else//do things normally
    1183               {
     932#endif
    1184933                if(doNotBlockPu)
    1185934                {
     
    1214963                  }
    1215964                }
    1216 
     965#if OL_QTLIMIT_PREDCODING_B0068
    1217966              }
    1218967#endif
     
    1223972            if ( bTestAMP_Ver )
    1224973            {
    1225 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    1226 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    1227               if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    1228 #else
    1229               if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    1230 #endif
     974#if OL_QTLIMIT_PREDCODING_B0068 //try nLx2N & nRx2N
     975              if(bTryNx2N)
    1231976              {
    1232                 if (bTryNx2N)
    1233                 {
    1234 #endif
    1235                   if(doNotBlockPu)
    1236                   {
    1237 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1238                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1239 #endif
    1240 #if HHI_INTERVIEW_SKIP
    1241                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec );
    1242 #else
    1243                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N );
    1244 #endif
    1245                     rpcTempCU->initEstData( uiDepth, iQP );
    1246                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
    1247                     {
    1248                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1249                     }
    1250                   }
    1251                   if(doNotBlockPu)
    1252                   {
    1253 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1254                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1255 #endif
    1256 #if HHI_INTERVIEW_SKIP
    1257                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec );
    1258 #else
    1259                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N );
    1260 #endif
    1261                     rpcTempCU->initEstData( uiDepth, iQP );
    1262                   }
    1263 #if OL_DEPTHLIMIT_A0044
    1264                 }//bTryNx2N
    1265               }//depthMapDetect
    1266               else//do things normally
    1267               {
     977#endif
    1268978                if(doNotBlockPu)
    1269979                {
     
    12941004                  rpcTempCU->initEstData( uiDepth, iQP );
    12951005                }
     1006#if OL_QTLIMIT_PREDCODING_B0068
    12961007              }
    12971008#endif
     
    13001011            else if ( bTestMergeAMP_Ver )
    13011012            {
    1302 #if OL_DEPTHLIMIT_A0044 //add code here to select 2NxN or Nx2N or none
    1303 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    1304               if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    1305 #else
    1306               if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    1307 #endif
     1013#if OL_QTLIMIT_PREDCODING_B0068 //try nLx2N & nRx2N (Merge)
     1014              if(bTryNx2N)
    13081015              {
    1309                 if (bTryNx2N)
    1310                 {
    1311 #endif
    1312                   if(doNotBlockPu)
    1313                   {
    1314 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1315                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1316 #endif
    1317 #if HHI_INTERVIEW_SKIP
    1318                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec, true );
    1319 #else
    1320                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, true );
    1321 #endif
    1322                     rpcTempCU->initEstData( uiDepth, iQP );
    1323                     if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
    1324                     {
    1325                       doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
    1326                     }
    1327                   }
    1328                   if(doNotBlockPu)
    1329                   {
    1330 #if HHI_INTER_VIEW_RESIDUAL_PRED
    1331                     rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
    1332 #endif
    1333 #if HHI_INTERVIEW_SKIP
    1334                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec, true );
    1335 #else
    1336                     xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, true );
    1337 #endif
    1338                     rpcTempCU->initEstData( uiDepth, iQP );
    1339                   }
    1340 #if OL_DEPTHLIMIT_A0044
    1341                 }//bTryNx2N
    1342               }//depthMapDetect
    1343               else//do things normally
    1344               {
     1016#endif
    13451017                if(doNotBlockPu)
    13461018                {
     
    13711043                  rpcTempCU->initEstData( uiDepth, iQP );
    13721044                }
     1045#if OL_QTLIMIT_PREDCODING_B0068
    13731046              }
    13741047#endif
     
    14521125          if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
    14531126          {
    1454 #if OL_DEPTHLIMIT_A0044 //add code here to select or deselect NxN mode for Intra
    1455 #if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
    1456             if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
    1457 #else
    1458             if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
    1459 #endif
     1127#if OL_QTLIMIT_PREDCODING_B0068 //Try IntraNxN
     1128            if(bTrySplit)
    14601129            {
    1461               if (bTrySplit)
    1462               {
    1463 
    1464 #endif
    1465                 if( rpcTempCU->getWidth(0) > ( 1 << rpcTempCU->getSlice()->getSPS()->getQuadtreeTULog2MinSize() ) )
    1466                 {
    1467 #if LGE_ILLUCOMP_B0045
    1468                   rpcTempCU->setICFlagSubParts(false, 0, 0, uiDepth);
    1469 #endif
    1470                   xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_NxN   );
    1471                   rpcTempCU->initEstData( uiDepth, iQP );
    1472                 }
    1473 #if OL_DEPTHLIMIT_A0044
    1474               }//bTrySplit
    1475             }//depthMapDetect
    1476             else
    1477             {
     1130#endif
    14781131              if( rpcTempCU->getWidth(0) > ( 1 << rpcTempCU->getSlice()->getSPS()->getQuadtreeTULog2MinSize() ) )
    14791132              {
     1133#if LGE_ILLUCOMP_B0045
     1134                rpcTempCU->setICFlagSubParts(false, 0, 0, uiDepth);
     1135#endif
    14801136                xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_NxN   );
    14811137                rpcTempCU->initEstData( uiDepth, iQP );
    14821138              }
     1139#if OL_QTLIMIT_PREDCODING_B0068
    14831140            }
    14841141#endif
     
    21391796  if( pcCU->isSkipped( uiAbsPartIdx ) )
    21401797  {
    2141 #if OL_DEPTHLIMIT_A0044
    2142     if(pcCU->getPartDumpFlag())
    2143     {
    2144       pcCU->updatePartInfo(0,uiDepth);
    2145       pcCU->incrementPartInfo();
    2146     }
    2147 #endif
    21481798    m_pcEntropyCoder->encodeMergeIndex( pcCU, uiAbsPartIdx, 0 );
    21491799#if LGE_ILLUCOMP_B0045
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncGOP.cpp

    r120 r181  
    11371137        if (!bEntropySlice)
    11381138        {
    1139 #if OL_DEPTHLIMIT_A0044 //start dumping partition information
    1140           m_pcSliceEncoder->setPartDumpFlag(1);
    1141 #endif
    11421139          pcSlice->setTileLocationCount ( 0 );
    11431140          m_pcSliceEncoder->encodeSlice(pcPic, pcBitstreamRedirect, pcSubstreamsOut); // redirect is only used for CAVLC tile position info.
    1144 #if OL_DEPTHLIMIT_A0044 //stop dumping partition information
    1145           m_pcSliceEncoder->setPartDumpFlag(0);
    1146 #endif
    11471141        }
    11481142        else
    11491143        {
    1150 #if OL_DEPTHLIMIT_A0044 //start dumping partition information
    1151           m_pcSliceEncoder->setPartDumpFlag(1);
    1152 #endif
    11531144          m_pcSliceEncoder->encodeSlice(pcPic, &nalu.m_Bitstream, pcSubstreamsOut); // nalu.m_Bitstream is only used for CAVLC tile position info.
    1154 #if OL_DEPTHLIMIT_A0044 //stop dumping partition information
    1155           m_pcSliceEncoder->setPartDumpFlag(0);
    1156 #endif
    11571145        }
    11581146
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncSbac.cpp

    r177 r181  
    618618{
    619619  PartSize eSize         = pcCU->getPartitionSize( uiAbsPartIdx );
    620 #if OL_DEPTHLIMIT_A0044
    621   UInt uiSymbol;
    622 #endif
     620
     621#if OL_QTLIMIT_PREDCODING_B0068
     622  TComSPS *sps           = pcCU->getPic()->getSlice(0)->getSPS();
     623  TComPic *pcTexture     = pcCU->getSlice()->getTexturePic();
     624  Bool bDepthMapDetect   = (pcTexture != NULL);
     625  Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE);
     626 
     627  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC() && pcCU->getPic()->getReduceBitsFlag())
     628  {
     629    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     630    UInt uiCUIdx            = (pcCU->getZorderIdxInCU() == 0) ? uiAbsPartIdx : pcCU->getZorderIdxInCU();
     631    assert(pcTextureCU->getDepth(uiCUIdx) >= uiDepth);
     632    if (pcTextureCU->getDepth(uiCUIdx) == uiDepth && pcTextureCU->getPartitionSize( uiCUIdx ) != SIZE_NxN)
     633    {
     634      assert( eSize == SIZE_2Nx2N );
     635      return;
     636    }
     637  }
     638#endif
     639
    623640  if ( pcCU->isIntra( uiAbsPartIdx ) )
    624641  {
     
    626643    {
    627644      m_pcBinIf->encodeBin( eSize == SIZE_2Nx2N? 1 : 0, m_cCUPartSizeSCModel.get( 0, 0, 0 ) );
    628 #if OL_DEPTHLIMIT_A0044
    629       if(pcCU->getPartDumpFlag())
    630       {
    631         uiSymbol = (UInt)(eSize == SIZE_2Nx2N? 1 : 0);
    632         pcCU->updatePartInfo(uiSymbol?0:1,uiDepth); //0 for 2Nx2N and 1 for NxN
    633         pcCU->incrementPartInfo();
    634       }
    635 #endif
    636     }
    637 #if OL_DEPTHLIMIT_A0044
    638     if(pcCU->getPartDumpFlag() && uiDepth < g_uiMaxCUDepth - g_uiAddCUDepth && !pcCU->getSlice()->isIntra())
    639     {
    640       pcCU->updatePartInfo(0,uiDepth); //0 for 2Nx2N and 1 for NxN
    641       pcCU->incrementPartInfo();
    642     }
    643 #endif
     645    }
    644646    return;
    645647  }
     
    650652    {
    651653      m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 0) );
    652 #if OL_DEPTHLIMIT_A0044
    653       if(pcCU->getPartDumpFlag())
    654       {
    655         pcCU->updatePartInfo(0,uiDepth); //0 for 2Nx2N
    656         pcCU->incrementPartInfo();
    657       }
    658 #endif
    659654      break;
    660655    }
     
    686681        }
    687682      }
    688 #if OL_DEPTHLIMIT_A0044
    689       if(pcCU->getPartDumpFlag())
    690       {
    691         pcCU->updatePartInfo(2,uiDepth); //2 for 2NxN
    692         pcCU->incrementPartInfo();
    693       }
    694 #endif
    695683      break;
    696684    }
     
    726714        }
    727715      }
    728 #if OL_DEPTHLIMIT_A0044
    729       if(pcCU->getPartDumpFlag())
    730       {
    731         pcCU->updatePartInfo(3,uiDepth); //3 for Nx2N
    732         pcCU->incrementPartInfo();
    733       }
    734 #endif
    735716      break;
    736717    }
     
    742723        m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) );
    743724        m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 2) );
    744 #if OL_DEPTHLIMIT_A0044
    745         if(pcCU->getPartDumpFlag())
    746         {
    747           pcCU->updatePartInfo(1,uiDepth); //2Nx2N here since we disable NxN in Inter
    748           pcCU->incrementPartInfo();         
    749         }
    750 #endif
    751       }
    752       else
    753       {
    754 #if OL_DEPTHLIMIT_A0044
    755         if(pcCU->getPartDumpFlag())
    756         {
    757           pcCU->updatePartInfo(0,uiDepth); //2Nx2N here since we disable NxN in Inter
    758           pcCU->incrementPartInfo();
    759         }
    760 #endif
    761725      }
    762726      break;
     
    951915 
    952916  assert( uiCtx < 3 );
     917
     918#if OL_QTLIMIT_PREDCODING_B0068
     919  Bool bCodeSplitFlag    = true;
     920
     921  TComSPS *sps           = pcCU->getPic()->getSlice(0)->getSPS();
     922  TComPic *pcTexture     = pcCU->getSlice()->getTexturePic();
     923  Bool bDepthMapDetect   = (pcTexture != NULL);
     924  Bool bIntraSliceDetect = (pcCU->getSlice()->getSliceType() == I_SLICE);
     925
     926  if(bDepthMapDetect && !bIntraSliceDetect && sps->getUseQTLPC() && pcCU->getPic()->getReduceBitsFlag())
     927  {
     928    TComDataCU *pcTextureCU = pcTexture->getCU(pcCU->getAddr());
     929    UInt uiCUIdx            = (pcCU->getZorderIdxInCU() == 0) ? uiAbsPartIdx : pcCU->getZorderIdxInCU();
     930    assert(pcTextureCU->getDepth(uiCUIdx) >= uiDepth);
     931    bCodeSplitFlag          = (pcTextureCU->getDepth(uiCUIdx) > uiDepth);
     932  }
     933
     934  if(!bCodeSplitFlag)
     935  {
     936    assert(uiCurrSplitFlag == 0);
     937    return;
     938  }
     939#endif
     940
    953941  m_pcBinIf->encodeBin( uiCurrSplitFlag, m_cCUSplitFlagSCModel.get( 0, 0, uiCtx ) );
    954 #if OL_DEPTHLIMIT_A0044
    955   if(pcCU->getPartDumpFlag())
    956   {
    957     if(pcCU->getSlice()->isIntra() || (!pcCU->getSlice()->isIntra() && uiCurrSplitFlag!=0))
    958     {
    959       pcCU->updatePartInfo(uiCurrSplitFlag,uiDepth);
    960       pcCU->incrementPartInfo();
    961     }
    962   }
    963 #endif
    964942  DTRACE_CABAC_VL( g_nSymbolCounter++ )
    965943  DTRACE_CABAC_T( "\tSplitFlag\n" )
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncSlice.cpp

    r152 r181  
    854854#endif
    855855
    856 #if OL_DEPTHLIMIT_A0044 //stop dumping partition information
    857     m_bDumpPartInfo = 0;
    858     pcCU->setPartDumpFlag(m_bDumpPartInfo);
    859 #endif
    860 
    861856    // inherit from TR if necessary, select substream to use.
    862857    if( m_pcCfg->getUseSBACRD() )
     
    13161311    }
    13171312
     1313#if OL_QTLIMIT_PREDCODING_B0068
     1314    rpcPic->setReduceBitsFlag(true);
     1315#endif
     1316
    13181317    TComDataCU*& pcCU = rpcPic->getCU( uiCUAddr );   
    1319 #if OL_DEPTHLIMIT_A0044
    1320     pcCU->setPartDumpFlag(m_bDumpPartInfo);
    1321     pcCU->resetPartInfo();
    1322 #endif
    13231318#if !REMOVE_TILE_DEPENDENCE
    13241319    if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )
     
    14081403    }
    14091404#endif
     1405
     1406#if OL_QTLIMIT_PREDCODING_B0068
     1407    rpcPic->setReduceBitsFlag(false);
     1408#endif
     1409
    14101410  }
    14111411
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncSlice.h

    r116 r181  
    101101 
    102102  UInt                    m_uiSliceIdx;
    103 #if OL_DEPTHLIMIT_A0044 //flag to signal to start dumping
    104   Bool                    m_bDumpPartInfo;
    105 #endif
    106103public:
    107104  TEncSlice();
     
    131128  UInt    getSliceIdx()         { return m_uiSliceIdx;                    }
    132129  Void    setSliceIdx(UInt i)   { m_uiSliceIdx = i;                       }
    133 #if OL_DEPTHLIMIT_A0044 //flag to signal to start dumping
    134   Void    setPartDumpFlag(Bool flag) { m_bDumpPartInfo = flag;};
    135 #endif
    136130};
    137131
  • branches/HTM-4.1-dev2-Orange/source/Lib/TLibEncoder/TEncTop.cpp

    r177 r181  
    772772  m_cSPS.setUseDMM( m_bUseDMM );
    773773#endif
    774 #if OL_DEPTHLIMIT_A0044
    775   m_cSPS.setUseDPL( m_bDepthPartitionLimiting );
     774#if OL_QTLIMIT_PREDCODING_B0068
     775  m_cSPS.setUseQTLPC( m_bUseQTLPC );
    776776#endif
    777777#if HHI_MPI
Note: See TracChangeset for help on using the changeset viewer.