Changeset 115 in 3DVCSoftware for trunk


Ignore:
Timestamp:
30 Aug 2012, 14:52:41 (12 years ago)
Author:
tech
Message:

Integrated revision 114. with:

  • A0119: VSO Depth Fidelity
  • A0044: Depth Quadtree Prediction
Location:
trunk/source
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/App/TAppEncoder/TAppEncCfg.cpp

    r100 r115  
    335335  ("AllowNegDist",                    m_bAllowNegDist           , true          , "Allow negative Distortion in VSO")
    336336#endif
     337#if LGE_WVSO_A0119
     338  ("WVSO",                            m_bWVSO                   , true         , "Use WVSO" )
     339  ("VSOWeight",                       m_iVSOWeight              , 10                                     , "VSO Weight" )
     340  ("VSDWeight",                       m_iVSDWeight             , 1                                        , "SAIT Weight" )
     341  ("DWeight",                                                                           m_iDWeight                                                  , 1                                          , "SSE Weight" )
     342#endif
     343
     344#if OL_DEPTHLIMIT
     345  ("DPL",   m_bDepthPartitionLimiting           , false         , "Use DepthPartitionLimiting" )
     346#endif
    337347
    338348#endif
     
    644654#endif
    645655
     656#if LGE_WVSO_A0119
     657  m_bWVSO = m_bUseVSO && m_bWVSO && m_bUsingDepthMaps;
     658#endif
    646659  xCleanUpVectors();
    647660
     
    16881701#if HHI_VSO
    16891702  printf("VSO:%d ", m_bUseVSO             );
    1690 #endif 
     1703#endif
     1704#if LGE_WVSO_A0119
     1705  printf("WVSO:%d ", m_bWVSO );
     1706#endif
     1707#if OL_DEPTHLIMIT
     1708  printf("DPL:%d ", m_bDepthPartitionLimiting);
     1709#endif
    16911710#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    16921711  printf("DMM:%d ", m_bUseDMM );
     
    16941713#if HHI_MPI
    16951714  printf("MVI:%d ", m_bUseMVI ? 1 : 0 );
     1715#endif
     1716#if LGE_WVSO_A0119
     1717  printf("\nVSO : SAIT : SAD weight = %d : %d : %d ", m_iVSOWeight, m_iVSDWeight, m_iDWeight );
    16961718#endif
    16971719  printf("\n\n");
  • trunk/source/App/TAppEncoder/TAppEncCfg.h

    r102 r115  
    297297  Bool      m_bUseEstimatedVSD;                           ///< Flag for using model based VSD estimation instead of VSO for some encoder decisions (JCT3V-A0033 modification 3) 
    298298#endif
    299 
     299#if LGE_WVSO_A0119
     300  Bool      m_bWVSO;                                    ///< flag for using View Synthesis Optimization 
     301  Int                           m_iVSOWeight;
     302  Int       m_iVSDWeight;
     303  Int                           m_iDWeight;
     304#endif
    300305  // coding tools (depth intra modes)
    301306#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    302307  Bool      m_bUseDMM;                                        ///< flag for using DMM
     308#endif
     309
     310#if OL_DEPTHLIMIT
     311  Bool      m_bDepthPartitionLimiting;
    303312#endif
    304313
  • trunk/source/App/TAppEncoder/TAppEncTop.cpp

    r102 r115  
    207207    m_acTEncTopList[iViewIdx]->setUseEstimatedVSD              ( false );
    208208#endif
     209#if LGE_WVSO_A0119
     210    m_acTEncTopList[iViewIdx]->setWVSO                                                                                           ( false );
     211#endif
    209212#endif
    210213
     
    361364    m_acTEncTopList[iViewIdx]->setUseDMM                     ( false );
    362365#endif
     366#if OL_DEPTHLIMIT
     367        m_acTEncTopList[iViewIdx]->setUseDPL                     ( false );
     368#endif
    363369#if HHI_MPI
    364370    m_acTEncTopList[iViewIdx]->setUseMVI( false );
     
    524530      m_acTEncDepthTopList[iViewIdx]->setUseEstimatedVSD              ( m_bUseEstimatedVSD );
    525531#endif
     532#if LGE_WVSO_A0119
     533      m_acTEncDepthTopList[iViewIdx]->setWVSO                          ( m_bWVSO      );
     534#endif
    526535#endif
    527536
     
    634643    m_acTEncDepthTopList[iViewIdx]->setUseDMM                     ( m_bUseDMM );
    635644#endif
     645#if OL_DEPTHLIMIT
     646        m_acTEncDepthTopList[iViewIdx]->setUseDPL                      (m_bDepthPartitionLimiting);
     647#endif
    636648#if HHI_MPI
    637649     m_acTEncDepthTopList[iViewIdx]->setUseMVI( m_bUseMVI );
     
    690702      AOT(true);
    691703    }
     704#if LGE_WVSO_A0119
     705    for ( Int iViewNum = 0; iViewNum < m_iNumberOfViews; iViewNum++ )
     706    {
     707      for (Int iContent = 0; iContent < 2; iContent++ )
     708      {
     709        TEncTop* pcEncTop = ( iContent == 0 ) ? m_acTEncTopList[iViewNum] : m_acTEncDepthTopList[iViewNum];
     710        pcEncTop->setWVSO( m_bWVSO );
     711        pcEncTop->setVSOWeight( m_iVSOWeight );
     712        pcEncTop->setVSDWeight( m_iVSDWeight );
     713        pcEncTop->setDWeight( m_iDWeight );
     714      }
     715    }
     716#endif
    692717  }
    693718#endif
  • trunk/source/Lib/TLibCommon/TComDataCU.cpp

    r100 r115  
    152152#endif
    153153#endif
     154#if OL_DEPTHLIMIT
     155  //add a variable to store the partition information
     156  //a 2D array in part_symbol,uidepth format
     157  //initialize m_partInfo to OL_END_CU
     158        for (int i=0; i < OL_PART_BUF_SIZE; i++)
     159        {
     160                for (int j=0; j < 2; j++)
     161                        m_uiPartInfo[i][j] = OL_END_CU;
     162        }
     163#endif
    154164}
    155165
     
    456466Void TComDataCU::initCU( TComPic* pcPic, UInt iCUAddr )
    457467{
     468#if OL_DEPTHLIMIT
     469  TComDataCU* pcCU     = pcPic->getCU(iCUAddr);
     470#endif
    458471
    459472  m_pcPic              = pcPic;
     
    672685    m_apcCUColocated[1] = getSlice()->getRefPic( REF_PIC_LIST_1, 0)->getCU( m_uiCUAddr );
    673686  }
     687#if OL_DEPTHLIMIT
     688  setPartDumpFlag (pcCU->getPartDumpFlag());
     689#endif
    674690}
    675691
     
    10011017  memcpy(m_uiSliceStartCU,pcCU->m_uiSliceStartCU+uiPartOffset,sizeof(UInt)*m_uiNumPartition);
    10021018  memcpy(m_uiEntropySliceStartCU,pcCU->m_uiEntropySliceStartCU+uiPartOffset,sizeof(UInt)*m_uiNumPartition);
     1019#if OL_DEPTHLIMIT
     1020  setPartDumpFlag (pcCU->getPartDumpFlag());
     1021#endif
    10031022}
    10041023
  • trunk/source/Lib/TLibCommon/TComDataCU.h

    r100 r115  
    237237  UInt*         m_uiSliceStartCU;    ///< Start CU address of current slice
    238238  UInt*         m_uiEntropySliceStartCU; ///< Start CU address of current slice
     239
     240#if OL_DEPTHLIMIT
     241  //add a variable to store the partition information
     242  //a 2D array in uidepth,part_symbol format
     243  UInt          m_uiPartInfo[OL_PART_BUF_SIZE][2];
     244  UInt          m_uiPartNum;
     245  Bool          b_dumpPartInfo;
     246#endif
    239247 
    240248  // -------------------------------------------------------------------------------------------------------------------
     
    596604 
    597605  Void          compressMV            ();
     606
     607#if OL_DEPTHLIMIT
     608        Void        resetPartInfo  () {m_uiPartNum = 0;};
     609        Void        incrementPartInfo () {m_uiPartNum ++;};
     610        Void        updatePartInfo(UInt uiSymbol, UInt uiDepth) {m_uiPartInfo[m_uiPartNum][0] = uiSymbol; m_uiPartInfo
     611[m_uiPartNum][1] = uiDepth;};
     612        UInt*       readPartInfo() {return (UInt*)m_uiPartInfo;};
     613//      UInt            getPartNumIdx() {return m_uiPartNum;}; //added this to get the index
     614//flag to signal to start dumping
     615        Void            setPartDumpFlag(bool flag)      {b_dumpPartInfo = flag;};
     616        Bool            getPartDumpFlag()       {return b_dumpPartInfo;};
     617#endif
    598618 
    599619  // -------------------------------------------------------------------------------------------------------------------
  • trunk/source/Lib/TLibCommon/TComRdCost.h

    r100 r115  
    377377  Bool                    m_bUseEstimatedVSD;
    378378#endif
     379#if LGE_WVSO_A0119
     380  Int                                                                                   m_iDWeight;
     381  Int                                                                                   m_iVSOWeight;
     382  Int                     m_iVSDWeight;
     383  Bool                    m_bWVSO;
     384#endif
    379385
    380386  Bool                    m_bUseVSO;
     
    410416  Void    setVSOMode( UInt uiIn);
    411417  UInt    getVSOMode( )                  { return m_uiVSOMode; }
    412 
     418#if LGE_WVSO_A0119
     419  Void    setWVSO ( Bool bIn )         { m_bWVSO = bIn; };
     420  Bool    getWVSO ( )                  { return m_bWVSO;};
     421  Void          setDWeight ( Int iDWeight )                     { m_iDWeight = iDWeight; };
     422  Int                   getDWeight ()                                                                           { return m_iDWeight; };
     423  Void          setVSOWeight ( Int iVSOWeight ) { m_iVSOWeight = iVSOWeight; };
     424  Int                   getVSOWeight ()                                                                 { return m_iVSOWeight; };
     425  Void          setVSDWeight ( Int iVSDWeight ) { m_iVSDWeight = iVSDWeight; };
     426  Int                   getVSDWeight ()                                                                 { return m_iVSDWeight; };
     427#endif
    413428#if HHI_VSO_DIST_INT
    414429  Void    setAllowNegDist ( Bool bAllowNegDist );
  • trunk/source/Lib/TLibCommon/TComSlice.cpp

    r101 r115  
    14411441, m_bUseDMM                   (false)
    14421442#endif
     1443#if OL_DEPTHLIMIT
     1444, m_bDepthPartitionLimiting   (false)
     1445#endif
    14431446{
    14441447  // AMVP parameter
  • trunk/source/Lib/TLibCommon/TComSlice.h

    r101 r115  
    354354#endif
    355355
     356#if OL_DEPTHLIMIT
     357  Bool m_bDepthPartitionLimiting;
     358#endif
     359
    356360#if DEPTH_MAP_GENERATION
    357361  UInt  m_uiPredDepthMapGeneration;
     
    619623#endif
    620624
     625#if OL_DEPTHLIMIT
     626  Void setUseDPL(Bool b) {m_bDepthPartitionLimiting = b; }
     627  Bool getUseDPL()       {return m_bDepthPartitionLimiting;}
     628#endif
     629
    621630  Void initMultiviewSPS      ( UInt uiViewId, Int iViewOrderIdx = 0, UInt uiCamParPrecision = 0, Bool bCamParSlice = false, Int** aaiScale = 0, Int** aaiOffset = 0 );
    622631  Void initMultiviewSPSDepth ( UInt uiViewId, Int iViewOrderIdx );
  • trunk/source/Lib/TLibCommon/TypeDef.h

    r105 r115  
    9494#define SAIT_VSO_EST_A0033                1 // JCT2-A0033 modification 3
    9595#define LGE_VSO_EARLY_SKIP_A0093          1 // JCT2-A0093 modification 4
    96 
     96#define LGE_WVSO_A0119                    1 // JCT2-A0119 Depth Metric with a weighted depth fidelity term
     97
     98#define OL_DEPTHLIMIT                     1 //JCT2-A0044
     99#if OL_DEPTHLIMIT
     100#define OL_DO_NOT_LIMIT_INTRA_SLICES_PART 1 //Turn this on to not perform depth limiting for I-SLICES.
     101#define OL_END_CU                         MAX_INT //Default for initialising the partition information buffer
     102#define OL_PART_BUF_SIZE                  86 //maximum number of possible partition bits in a CU
     103#endif
    97104
    98105#define HHI_INTERVIEW_SKIP                1
  • trunk/source/Lib/TLibEncoder/TEncCfg.h

    r100 r115  
    204204  Double    m_dLambdaScaleVSO;
    205205  UInt      m_uiVSOMode;
     206#if LGE_WVSO_A0119
     207  Bool      m_bWVSO;
     208  Int                           m_iVSOWeight;
     209  Int       m_iVSDWeight;
     210  Int                           m_iDWeight;
     211#endif
    206212#endif
    207213#if SAIT_VSO_EST_A0033
     
    310316#if HHI_DMM_WEDGE_INTRA || HHI_DMM_PRED_TEX
    311317  Bool      m_bUseDMM;
     318#endif
     319
     320#if OL_DEPTHLIMIT
     321  Bool      m_bDepthPartitionLimiting;
    312322#endif
    313323
     
    466476  Void      setAllowNegDist                 ( Bool b  )     { m_bAllowNegDist     = b; };
    467477#endif
     478#if LGE_WVSO_A0119
     479  Void      setWVSO                                                                                                     ( Bool  b )     { m_bWVSO                               = b; }
     480  Void      setVSOWeight                                                                                ( Int   i )     { m_iVSOWeight  = i; }
     481  Void      setVSDWeight                                                                                ( Int   i )     { m_iVSDWeight  = i; }
     482  Void      setDWeight                                                                                  ( Int   i )     { m_iDWeight  = i; }
     483#endif
    468484#endif
    469485
     
    545561#if HHI_VSO_DIST_INT
    546562  Bool      getAllowNegDist                 ()      { return m_bAllowNegDist;     }
     563#endif
     564#if LGE_WVSO_A0119
     565  Bool      getWVSO                         ()      { return m_bWVSO;     }
     566  Int       getVSOWeight                    ()      { return m_iVSOWeight;    }
     567  Int       getVSDWeight                    ()      { return m_iVSDWeight;    }
     568  Int       getDWeight                                                                      ()      { return m_iDWeight;    }
    547569#endif
    548570#endif
     
    799821#endif
    800822
     823#if OL_DEPTHLIMIT
     824  Void setUseDPL(Bool b) {m_bDepthPartitionLimiting = b; }
     825  Bool getUseDPL()       {return m_bDepthPartitionLimiting;}
     826#endif
     827
    801828  Void      setViewOrderIdx       ( Int   i )      { m_iViewOrderIdx          = i; }
    802829  Void      setCamParPrecision              ( UInt  u )      { m_uiCamParPrecision      = u; }
  • trunk/source/Lib/TLibEncoder/TEncCu.cpp

    r100 r115  
    451451  TComPic* pcPic = rpcBestCU->getPic();
    452452
     453#if OL_DEPTHLIMIT
     454  TComSPS *sps = pcPic->getSlice(0)->getSPS();
     455  TComPic *pcTexture;
     456  TComDataCU *pcTextureCU;
     457  static UInt* texPartInfo;
     458  static UInt uiTexPartIndex;
     459  static Bool depthMapDetect =  false;
     460  UInt uiPrevTexPartIndex = 0;
     461#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     462  static Bool bIntraSliceDetect = false;
     463#endif
     464  Bool bTry2NxN = false;
     465  Bool bTryNx2N = false;
     466  if(uiDepth == 0)
     467  {
     468        pcTexture = rpcBestCU->getSlice()->getTexturePic();
     469        if(pcTexture != NULL) //depth map being encoded
     470        {
     471#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     472                bIntraSliceDetect = (rpcBestCU->getSlice()->getSliceType()==I_SLICE);
     473#endif
     474                pcTextureCU = pcTexture->getCU( rpcBestCU->getAddr() );
     475                texPartInfo = pcTextureCU -> readPartInfo();
     476                uiTexPartIndex = 0;
     477                depthMapDetect = true;
     478        }
     479        else
     480        {
     481                depthMapDetect = false;
     482        }
     483  }
     484#endif
    453485  // get Original YUV data from picture
    454486  m_ppcOrigYuv[uiDepth]->copyFromPicYuv( pcPic->getPicYuvOrg(), rpcBestCU->getAddr(), rpcBestCU->getZorderIdxInCU() );
     
    592624
    593625      rpcTempCU->initEstData( uiDepth, iQP );
     626
     627#if OL_DEPTHLIMIT
     628  //logic for setting bTrySplit using the partition information that is stored of the texture colocated CU
     629#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     630  if(depthMapDetect && !bIntraSliceDetect && sps->getUseDPL())
     631#else
     632  if(depthMapDetect && sps->getUseDPL()) //depth map being encoded
     633#endif
     634  {
     635        assert(uiDepth == (UInt)texPartInfo[uiTexPartIndex+1]);
     636        if((UInt)texPartInfo[uiTexPartIndex+0] == 1) //NxN modes
     637        {
     638                bTrySplit = true;
     639                bTryNx2N = true;
     640                bTry2NxN = true;
     641                uiPrevTexPartIndex = uiTexPartIndex;
     642                uiTexPartIndex += 2;
     643        }
     644        else if((UInt)texPartInfo[uiTexPartIndex+0] == 0) //2Nx2N modes
     645        {
     646                UInt uiTexdepth;
     647                UInt temp_uiTexPartIndex;
     648                bTrySplit = false;
     649                //scan ahead till next depth
     650                uiTexdepth = (UInt)texPartInfo[uiTexPartIndex+1];
     651                uiPrevTexPartIndex = uiTexPartIndex;
     652                uiTexPartIndex+=2;
     653                temp_uiTexPartIndex = uiTexPartIndex; //store in case to rewind
     654                //temp_uiTexPartIndex+=2;
     655                                        while(uiTexdepth != (UInt)texPartInfo[uiTexPartIndex+1] && uiTexdepth != 0)
     656                                        {
     657                                                if((UInt)texPartInfo[uiTexPartIndex+1] < uiTexdepth)
     658                                                {
     659                                                        break;
     660                                                }
     661                                                uiTexPartIndex+=2;
     662                                               
     663                                                if((UInt)texPartInfo[uiTexPartIndex+1] == OL_END_CU)
     664                                                {
     665                                                        uiTexPartIndex = temp_uiTexPartIndex;
     666                                                        uiTexdepth++;
     667                                                        if(uiTexdepth >= g_uiMaxCUDepth)
     668                                                        {
     669                                                                //uiTexPartIndex-=2;
     670                                                                break;
     671                                                        }
     672                                                }
     673                                        }
     674        }
     675        else if((UInt)texPartInfo[uiTexPartIndex+0] == OL_END_CU)
     676        {
     677                bTrySplit = false;
     678                bTryNx2N = false;
     679                bTry2NxN = false;
     680        }
     681        else if((UInt)texPartInfo[uiTexPartIndex+0] == 2) //2NxN case
     682        {
     683                bTrySplit = false;
     684                bTryNx2N = false;
     685                bTry2NxN = true;
     686                uiPrevTexPartIndex = uiTexPartIndex;
     687                uiTexPartIndex += 2;
     688        }
     689        else if((UInt)texPartInfo[uiTexPartIndex+0] == 3) //Nx2N case
     690        {
     691                bTrySplit = false;
     692                bTryNx2N = true;
     693                bTry2NxN = false;
     694                uiPrevTexPartIndex = uiTexPartIndex;
     695                uiTexPartIndex += 2;
     696        }
     697  }
     698#endif
     699
    594700
    595701      // do inter modes, SKIP and 2Nx2N
     
    660766      } // != I_SLICE
    661767
     768#if OL_DEPTHLIMIT
     769#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     770          if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     771#else
     772          if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     773#endif
     774          {
     775                  bTrySplitDQP = bTrySplit;
     776          }
     777          else
     778          {
     779                if( (g_uiMaxCUWidth>>uiDepth) >= rpcTempCU->getSlice()->getPPS()->getMinCuDQPSize() )
     780                {
     781                        if(iQP == iBaseQP)
     782                        {
     783                                bTrySplitDQP = bTrySplit;
     784                        }
     785                }
     786                else
     787                {
     788                        bTrySplitDQP = bTrySplit;
     789                }
     790          }
     791#else
    662792
    663793      if( (g_uiMaxCUWidth>>uiDepth) >= rpcTempCU->getSlice()->getPPS()->getMinCuDQPSize() )
     
    672802        bTrySplitDQP = bTrySplit;
    673803      }
     804#endif
    674805#if LOSSLESS_CODING
    675806      if (isAddLowestQP && (iQP == lowestQP))
     
    721852          if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth && doNotBlockPu)
    722853          {
     854#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     855#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     856  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     857#else
     858  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     859#endif
     860                        {
     861                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     862                                if (bTrySplit)
     863                                {       
     864#endif
    723865#if HHI_INTER_VIEW_RESIDUAL_PRED
    724866            rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     
    730872#endif
    731873            rpcTempCU->initEstData( uiDepth, iQP );
    732           }
     874#if OL_DEPTHLIMIT
     875                                }//bTrySplit
     876                        }//depthMapDetect
     877                        else//do things normally
     878                        {
     879#if HHI_INTER_VIEW_RESIDUAL_PRED
     880            rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     881#endif
     882#if HHI_INTERVIEW_SKIP
     883            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN, bFullyRenderedSec   );
     884#else
     885            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_NxN   );
     886#endif
     887            rpcTempCU->initEstData( uiDepth, iQP );
     888          }
     889#endif
     890          }
    733891        }
    734892        }
    735893
    736894        { // 2NxN, Nx2N
     895#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     896#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     897  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     898#else
     899  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     900#endif
     901                        {
     902                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     903                                if (bTryNx2N)
     904                                {       
     905#endif
    737906          if(doNotBlockPu)
    738907          {
     
    751920            }
    752921          }
     922#if OL_DEPTHLIMIT
     923                                }//bTryNx2N
     924                        }//depthMapDetect
     925                        else//do things normally
     926                        {
     927          if(doNotBlockPu)
     928          {
     929#if HHI_INTER_VIEW_RESIDUAL_PRED
     930            rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     931#endif
     932#if HHI_INTERVIEW_SKIP
     933            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N, bFullyRenderedSec   );
     934#else
     935            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_Nx2N  );
     936#endif
     937            rpcTempCU->initEstData( uiDepth, iQP );
     938            if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_Nx2N )
     939            {
     940              doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     941            }
     942          }
     943                        }
     944#endif
     945
     946#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     947#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     948  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     949#else
     950  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     951#endif
     952                        {
     953                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     954                                if (bTry2NxN)
     955                                {       
     956#endif
    753957          if(doNotBlockPu)
    754958          {
     
    767971            }
    768972          }
     973#if OL_DEPTHLIMIT
     974                                }//bTryNx2N
     975                        }//depthMapDetect
     976                        else//do things normally
     977                        {
     978                                 if(doNotBlockPu)
     979          {
     980#if HHI_INTER_VIEW_RESIDUAL_PRED
     981            rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     982#endif
     983#if HHI_INTERVIEW_SKIP
     984            xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxN, bFullyRenderedSec   );
     985#else
     986            xCheckRDCostInter      ( rpcBestCU, rpcTempCU, SIZE_2NxN  );
     987#endif
     988            rpcTempCU->initEstData( uiDepth, iQP );
     989            if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxN)
     990            {
     991              doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     992            }
     993          }
     994  }
     995#endif
    769996        }
    770997
     
    7871014          if ( bTestAMP_Hor )
    7881015          {
     1016#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     1017#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     1018  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     1019#else
     1020  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     1021#endif
     1022                        {
     1023                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     1024                                if (bTry2NxN)
     1025                                {       
     1026#endif
    7891027            if(doNotBlockPu)
    7901028            {
     
    8191057              }
    8201058            }
    821           }
    822 #if AMP_MRG
    823           else if ( bTestMergeAMP_Hor )
    824           {
     1059#if OL_DEPTHLIMIT
     1060                                }//bTry2NxN
     1061                        }//depthMapDetect
     1062                        else//do things normally
     1063                        {
    8251064            if(doNotBlockPu)
    8261065            {
     
    8291068#endif
    8301069#if HHI_INTERVIEW_SKIP
    831               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec, true );
    832 #else
    833               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, true );
     1070              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec );
     1071#else
     1072              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU );
    8341073#endif
    8351074              rpcTempCU->initEstData( uiDepth, iQP );
     
    8451084#endif
    8461085#if HHI_INTERVIEW_SKIP
    847               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec, true );
    848 #else
    849               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, true );
     1086              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec );
     1087#else
     1088              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD );
    8501089#endif
    8511090              rpcTempCU->initEstData( uiDepth, iQP );
     
    8571096          }
    8581097#endif
     1098          }
     1099#if AMP_MRG
     1100          else if ( bTestMergeAMP_Hor )
     1101          {
     1102#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     1103#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     1104  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     1105#else
     1106  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     1107#endif
     1108                        {
     1109                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     1110                                if (bTry2NxN)
     1111                                {       
     1112#endif
     1113            if(doNotBlockPu)
     1114            {
     1115#if HHI_INTER_VIEW_RESIDUAL_PRED
     1116              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1117#endif
     1118#if HHI_INTERVIEW_SKIP
     1119              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec, true );
     1120#else
     1121              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, true );
     1122#endif
     1123              rpcTempCU->initEstData( uiDepth, iQP );
     1124              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
     1125              {
     1126                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1127              }
     1128            }
     1129            if(doNotBlockPu)
     1130            {
     1131#if HHI_INTER_VIEW_RESIDUAL_PRED
     1132              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1133#endif
     1134#if HHI_INTERVIEW_SKIP
     1135              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec, true );
     1136#else
     1137              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, true );
     1138#endif
     1139              rpcTempCU->initEstData( uiDepth, iQP );
     1140              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
     1141              {
     1142                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1143              }
     1144            }
     1145#if OL_DEPTHLIMIT
     1146                                }//bTry2NxN
     1147                        }//depthMapDetect
     1148                        else//do things normally
     1149                        {
     1150            if(doNotBlockPu)
     1151            {
     1152#if HHI_INTER_VIEW_RESIDUAL_PRED
     1153              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1154#endif
     1155#if HHI_INTERVIEW_SKIP
     1156              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, bFullyRenderedSec, true );
     1157#else
     1158              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnU, true );
     1159#endif
     1160              rpcTempCU->initEstData( uiDepth, iQP );
     1161              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnU )
     1162              {
     1163                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1164              }
     1165            }
     1166            if(doNotBlockPu)
     1167            {
     1168#if HHI_INTER_VIEW_RESIDUAL_PRED
     1169              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1170#endif
     1171#if HHI_INTERVIEW_SKIP
     1172              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, bFullyRenderedSec, true );
     1173#else
     1174              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_2NxnD, true );
     1175#endif
     1176              rpcTempCU->initEstData( uiDepth, iQP );
     1177              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_2NxnD )
     1178              {
     1179                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1180              }
     1181            }
     1182
     1183                        }
     1184#endif
     1185          }
     1186#endif
    8591187
    8601188          //! Do horizontal AMP
    8611189          if ( bTestAMP_Ver )
    8621190          {
     1191#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     1192#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     1193  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     1194#else
     1195  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     1196#endif
     1197                        {
     1198                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     1199                                if (bTryNx2N)
     1200                                {       
     1201#endif
    8631202            if(doNotBlockPu)
    8641203            {
     
    8891228              rpcTempCU->initEstData( uiDepth, iQP );
    8901229            }
    891           }
    892 #if AMP_MRG
    893           else if ( bTestMergeAMP_Ver )
    894           {
     1230#if OL_DEPTHLIMIT
     1231                                }//bTryNx2N
     1232                        }//depthMapDetect
     1233                        else//do things normally
     1234                        {
    8951235            if(doNotBlockPu)
    8961236            {
     
    8991239#endif
    9001240#if HHI_INTERVIEW_SKIP
    901               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec, true );
    902 #else
    903               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, true );
     1241              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec );
     1242#else
     1243              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N );
    9041244#endif
    9051245              rpcTempCU->initEstData( uiDepth, iQP );
     
    9151255#endif
    9161256#if HHI_INTERVIEW_SKIP
    917               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec, true );
    918 #else
    919               xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, true );
     1257              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec );
     1258#else
     1259              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N );
    9201260#endif
    9211261              rpcTempCU->initEstData( uiDepth, iQP );
    9221262            }
     1263          }
     1264#endif
     1265          }
     1266#if AMP_MRG
     1267          else if ( bTestMergeAMP_Ver )
     1268          {
     1269#if OL_DEPTHLIMIT //add code here to select 2NxN or Nx2N or none
     1270#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     1271  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     1272#else
     1273  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     1274#endif
     1275                        {
     1276                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     1277                                if (bTryNx2N)
     1278                                {       
     1279#endif
     1280            if(doNotBlockPu)
     1281            {
     1282#if HHI_INTER_VIEW_RESIDUAL_PRED
     1283              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1284#endif
     1285#if HHI_INTERVIEW_SKIP
     1286              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec, true );
     1287#else
     1288              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, true );
     1289#endif
     1290              rpcTempCU->initEstData( uiDepth, iQP );
     1291              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
     1292              {
     1293                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1294              }
     1295            }
     1296            if(doNotBlockPu)
     1297            {
     1298#if HHI_INTER_VIEW_RESIDUAL_PRED
     1299              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1300#endif
     1301#if HHI_INTERVIEW_SKIP
     1302              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec, true );
     1303#else
     1304              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, true );
     1305#endif
     1306              rpcTempCU->initEstData( uiDepth, iQP );
     1307            }
     1308#if OL_DEPTHLIMIT
     1309                                }//bTryNx2N
     1310                        }//depthMapDetect
     1311                        else//do things normally
     1312                        {
     1313            if(doNotBlockPu)
     1314            {
     1315#if HHI_INTER_VIEW_RESIDUAL_PRED
     1316              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1317#endif
     1318#if HHI_INTERVIEW_SKIP
     1319              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, bFullyRenderedSec, true );
     1320#else
     1321              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nLx2N, true );
     1322#endif
     1323              rpcTempCU->initEstData( uiDepth, iQP );
     1324              if(m_pcEncCfg->getUseCbfFastMode() && rpcBestCU->getPartitionSize(0) == SIZE_nLx2N )
     1325              {
     1326                doNotBlockPu = rpcBestCU->getQtRootCbf( 0 ) != 0;
     1327              }
     1328            }
     1329            if(doNotBlockPu)
     1330            {
     1331#if HHI_INTER_VIEW_RESIDUAL_PRED
     1332              rpcTempCU->setResPredIndicator( bResPredAvailable, bResPredFlag );
     1333#endif
     1334#if HHI_INTERVIEW_SKIP
     1335              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, bFullyRenderedSec, true );
     1336#else
     1337              xCheckRDCostInter( rpcBestCU, rpcTempCU, SIZE_nRx2N, true );
     1338#endif
     1339              rpcTempCU->initEstData( uiDepth, iQP );
     1340            }
     1341          }
     1342#endif
    9231343          }
    9241344#endif
     
    9941414          if( uiDepth == g_uiMaxCUDepth - g_uiAddCUDepth )
    9951415          {
     1416#if OL_DEPTHLIMIT //add code here to select or deselect NxN mode for Intra
     1417#if OL_DO_NOT_LIMIT_INTRA_SLICES_PART
     1418  if(depthMapDetect && !bIntraSliceDetect  && sps->getUseDPL())
     1419#else
     1420  if(depthMapDetect  && sps->getUseDPL()) //depth map being encoded
     1421#endif
     1422                        {
     1423                                assert(uiDepth == (UInt)texPartInfo[uiPrevTexPartIndex+1]);
     1424                                if (bTrySplit)
     1425                                {
     1426                       
     1427#endif
    9961428            if( rpcTempCU->getWidth(0) > ( 1 << rpcTempCU->getSlice()->getSPS()->getQuadtreeTULog2MinSize() ) )
    9971429            {
     
    9991431              rpcTempCU->initEstData( uiDepth, iQP );
    10001432            }
     1433#if OL_DEPTHLIMIT
     1434                                }//bTrySplit
     1435                         }//depthMapDetect
     1436                        else
     1437                        {
     1438                                if( rpcTempCU->getWidth(0) > ( 1 << rpcTempCU->getSlice()->getSPS()->getQuadtreeTULog2MinSize() ) )
     1439                                {
     1440                                        xCheckRDCostIntra( rpcBestCU, rpcTempCU, SIZE_NxN   );
     1441                                        rpcTempCU->initEstData( uiDepth, iQP );
     1442                                }
     1443                        }
     1444#endif
    10011445          }
    10021446        }
     
    15612005#if HHI_MPI
    15622006    if( pcCU->getTextureModeDepth( uiAbsPartIdx ) == -1 || uiDepth < pcCU->getTextureModeDepth( uiAbsPartIdx ) )
    1563 #endif
     2007    {
     2008#endif
     2009
    15642010    m_pcEntropyCoder->encodeSplitFlag( pcCU, uiAbsPartIdx, uiDepth );
     2011
     2012#if HHI_MPI
     2013    }
     2014#endif
    15652015  }
    15662016  else
     
    15772027
    15782028    if( ( uiRPelX < pcSlice->getSPS()->getPicWidthInLumaSamples() ) && ( uiBPelY < pcSlice->getSPS()->getPicHeightInLumaSamples() ) )
     2029        {
    15792030      m_pcEntropyCoder->encodeSplitFlag( pcCU, uiAbsPartIdx, uiDepth );
     2031        }
    15802032    if( !pcCU->getSlice()->isIntra() )
    15812033    {
     
    16312083#if HHI_MPI
    16322084  if( pcCU->getTextureModeDepth( uiAbsPartIdx ) == -1 )
     2085{
    16332086#endif
    16342087  if( !pcCU->getSlice()->isIntra() )
     
    16362089    m_pcEntropyCoder->encodeSkipFlag( pcCU, uiAbsPartIdx );
    16372090  }
     2091#if HHI_MPI
     2092}
     2093#endif
    16382094 
    16392095  if( pcCU->isSkipped( uiAbsPartIdx ) )
    16402096  {
     2097#if OL_DEPTHLIMIT
     2098        if(pcCU->getPartDumpFlag())
     2099        {
     2100                pcCU->updatePartInfo(0,uiDepth);
     2101                pcCU->incrementPartInfo();
     2102        }
     2103#endif
    16412104    m_pcEntropyCoder->encodeMergeIndex( pcCU, uiAbsPartIdx, 0 );
    16422105#if HHI_INTER_VIEW_RESIDUAL_PRED
  • trunk/source/Lib/TLibEncoder/TEncGOP.cpp

    r102 r115  
    464464    m_pcRdCost->setDepthPicYuv   ( m_pcEncTop->getEncTop()->getPicYuvFromView( pcSlice->getViewId(), pcSlice->getPOC(), true, false ) );
    465465#endif
    466 
     466#if LGE_WVSO_A0119
     467    Bool bWVSO  = m_pcEncTop->getWVSO();
     468    m_pcRdCost->setWVSO( bWVSO );
     469#endif
    467470
    468471  }
     
    11331136        if (!bEntropySlice)
    11341137        {
     1138#if OL_DEPTHLIMIT //start dumping partition information
     1139                m_pcSliceEncoder->setPartDumpFlag(1);
     1140//              if(!(pcPic->getSlice(0)->getSPS()->getUseDPL()))
     1141//              {
     1142//                      m_pcSliceEncoder->setPartDumpFlag(0);
     1143//              }
     1144#endif
    11351145          pcSlice->setTileLocationCount ( 0 );
    11361146          m_pcSliceEncoder->encodeSlice(pcPic, pcBitstreamRedirect, pcSubstreamsOut); // redirect is only used for CAVLC tile position info.
     1147#if OL_DEPTHLIMIT //stop dumping partition information
     1148                m_pcSliceEncoder->setPartDumpFlag(0);
     1149#endif
    11371150        }
    11381151        else
    11391152        {
     1153#if OL_DEPTHLIMIT //start dumping partition information
     1154                m_pcSliceEncoder->setPartDumpFlag(1);
     1155#endif
    11401156          m_pcSliceEncoder->encodeSlice(pcPic, &nalu.m_Bitstream, pcSubstreamsOut); // nalu.m_Bitstream is only used for CAVLC tile position info.
     1157#if OL_DEPTHLIMIT //stop dumping partition information
     1158                m_pcSliceEncoder->setPartDumpFlag(0);
     1159#endif
    11411160        }
    11421161
  • trunk/source/Lib/TLibEncoder/TEncSbac.cpp

    r101 r115  
    580580{
    581581  PartSize eSize         = pcCU->getPartitionSize( uiAbsPartIdx );
     582#if OL_DEPTHLIMIT
     583  UInt uiSymbol;
     584#endif
    582585  if ( pcCU->isIntra( uiAbsPartIdx ) )
    583586  {
     
    585588    {
    586589      m_pcBinIf->encodeBin( eSize == SIZE_2Nx2N? 1 : 0, m_cCUPartSizeSCModel.get( 0, 0, 0 ) );
    587     }
     590#if OL_DEPTHLIMIT
     591                if(pcCU->getPartDumpFlag())
     592                {
     593                        uiSymbol = (UInt)(eSize == SIZE_2Nx2N? 1 : 0);
     594                        pcCU->updatePartInfo(uiSymbol?0:1,uiDepth); //0 for 2Nx2N and 1 for NxN
     595                        pcCU->incrementPartInfo();
     596                }
     597#endif
     598    }
     599#if OL_DEPTHLIMIT
     600        if(pcCU->getPartDumpFlag() && uiDepth < g_uiMaxCUDepth - g_uiAddCUDepth && !pcCU->getSlice()->isIntra())
     601        {
     602                pcCU->updatePartInfo(0,uiDepth); //0 for 2Nx2N and 1 for NxN
     603                pcCU->incrementPartInfo();
     604        }
     605#endif
    588606    return;
    589607  }
     
    594612    {
    595613      m_pcBinIf->encodeBin( 1, m_cCUPartSizeSCModel.get( 0, 0, 0) );
     614#if OL_DEPTHLIMIT
     615          if(pcCU->getPartDumpFlag())
     616          {
     617//              if (!pcCU->isIntra( uiAbsPartIdx ))
     618                {
     619                        pcCU->updatePartInfo(0,uiDepth); //0 for 2Nx2N
     620                        pcCU->incrementPartInfo();
     621                }
     622          }
     623#endif
    596624      break;
    597625    }
     
    623651        }
    624652      }
     653#if OL_DEPTHLIMIT
     654          if(pcCU->getPartDumpFlag())
     655          {
     656//              if (!pcCU->isIntra( uiAbsPartIdx ))
     657                {
     658                        pcCU->updatePartInfo(2,uiDepth); //2 for 2NxN
     659                        pcCU->incrementPartInfo();
     660                }
     661          }
     662#endif
    625663      break;
    626664    }
     
    656694        }
    657695      }
     696#if OL_DEPTHLIMIT
     697          if(pcCU->getPartDumpFlag())
     698          {
     699//              if (!pcCU->isIntra( uiAbsPartIdx ))
     700                {
     701                        pcCU->updatePartInfo(3,uiDepth); //3 for Nx2N
     702                        pcCU->incrementPartInfo();
     703                }
     704          }
     705#endif
    658706      break;
    659707    }
     
    665713        m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 1) );
    666714        m_pcBinIf->encodeBin( 0, m_cCUPartSizeSCModel.get( 0, 0, 2) );
     715#if OL_DEPTHLIMIT
     716          if(pcCU->getPartDumpFlag())
     717          {
     718                //if (!pcCU->getSlice()->isIntra())
     719                {
     720                        pcCU->updatePartInfo(1,uiDepth); //2Nx2N here since we disable NxN in Inter
     721                        pcCU->incrementPartInfo();
     722                }
     723          }
     724#endif
     725      }
     726          else
     727          {
     728#if OL_DEPTHLIMIT
     729          if(pcCU->getPartDumpFlag())
     730          {
     731                //if (!pcCU->getSlice()->isIntra())
     732                {
     733                        pcCU->updatePartInfo(0,uiDepth); //2Nx2N here since we disable NxN in Inter
     734                        pcCU->incrementPartInfo();
     735                }
     736          }
     737#endif
    667738      }
    668739      break;
     
    828899  assert( uiCtx < 3 );
    829900  m_pcBinIf->encodeBin( uiCurrSplitFlag, m_cCUSplitFlagSCModel.get( 0, 0, uiCtx ) );
     901#if OL_DEPTHLIMIT
     902  if(pcCU->getPartDumpFlag())
     903  {
     904        if(pcCU->getSlice()->isIntra() || (!pcCU->getSlice()->isIntra() && uiCurrSplitFlag!=0))
     905        {
     906        pcCU->updatePartInfo(uiCurrSplitFlag,uiDepth);
     907        pcCU->incrementPartInfo();
     908        }
     909  }
     910#endif
    830911  DTRACE_CABAC_VL( g_nSymbolCounter++ )
    831912  DTRACE_CABAC_T( "\tSplitFlag\n" )
  • trunk/source/Lib/TLibEncoder/TEncSearch.cpp

    r100 r115  
    11291129  if ( m_pcRdCost->getUseVSO() )
    11301130  {
     1131#if LGE_WVSO_A0119
     1132    Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     1133    Int iVSOWeight = m_pcRdCost->getVSOWeight() * m_pcRdCost->getVSOWeight();
     1134    Dist iD = (Dist) m_pcRdCost->getDistPart( piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight );
     1135    Dist iVSO = m_pcRdCost->getDistVS  ( pcCU, uiAbsPartIdx, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight, false, 0 );
     1136    ruiDist += (iDWeight * iD + iVSOWeight * iVSO) / ( iDWeight + iVSOWeight);
     1137
     1138#else
    11311139    ruiDist += m_pcRdCost->getDistVS  ( pcCU, uiAbsPartIdx, piReco, uiStride, piOrg, uiStride, uiWidth, uiHeight, false, 0 );
     1140#endif
    11321141  }
    11331142  else
     
    19021911
    19031912            uiSad = (Dist) ( m_pcRdCost->getDistPart( piPred, uiStride, piOrg, uiStride, pcVirRec->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiPartOffset), pcVirOrg->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiPartOffset), pcVirRec->getStride(), uiWidth, uiHeight ) );
     1913#if LGE_WVSO_A0119
     1914            Int iDWeight = m_pcRdCost->getDWeight();
     1915            Int iVSDWeight = m_pcRdCost->getVSDWeight();
     1916            Dist iD = (Dist) m_pcRdCost->calcHAD( piOrg, uiStride, piPred, uiStride, uiWidth, uiHeight );
     1917            uiSad = (Dist) (iDWeight * iD + iVSDWeight * uiSad) / (iDWeight + iVSDWeight);
     1918#endif
    19041919          }
    19051920          else
     
    43914406    {
    43924407      uiDistortion = m_pcRdCost->getDistVS( pcCU, 0, rpcYuvRec->getLumaAddr(), rpcYuvRec->getStride(),  pcYuvOrg->getLumaAddr(), pcYuvOrg->getStride(),  uiWidth,      uiHeight     , false, 0 );
     4408#if LGE_WVSO_A0119
     4409      Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     4410      Int iVSOWeight = m_pcRdCost->getVSOWeight() * m_pcRdCost->getVSOWeight();
     4411      Dist iD   = (Dist) m_pcRdCost->getDistPart( rpcYuvRec->getLumaAddr(), rpcYuvRec->getStride(),  pcYuvOrg->getLumaAddr(), pcYuvOrg->getStride(),  uiWidth,      uiHeight      );
     4412      uiDistortion = (iDWeight * iD + iVSOWeight * (Dist)uiDistortion) / ( iDWeight + iVSOWeight);
     4413#endif
    43934414    }
    43944415    else   
     
    47504771  {
    47514772    uiDistortionBest = m_pcRdCost->getDistVS  ( pcCU, 0, rpcYuvRec->getLumaAddr(), rpcYuvRec->getStride(),  pcYuvOrg->getLumaAddr(), pcYuvOrg->getStride(),  uiWidth,      uiHeight, false, 0    );
     4773#if LGE_WVSO_A0119
     4774    Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     4775    Int iVSOWeight = m_pcRdCost->getVSOWeight() * m_pcRdCost->getVSOWeight();
     4776    Dist iD        = (Dist) m_pcRdCost->getDistPart( rpcYuvRec->getLumaAddr(), rpcYuvRec->getStride(),  pcYuvOrg->getLumaAddr(), pcYuvOrg->getStride(),  uiWidth,      uiHeight      );
     4777    uiDistortionBest = (iDWeight * iD + iVSOWeight * (Dist) uiDistortionBest) / ( iDWeight + iVSOWeight);
     4778#endif
    47524779  }
    47534780  else
     
    49855012        TComPicYuv* pcVirOrg = m_pcRdCost->getDepthPicYuv();
    49865013        uiDistY = m_pcRdCost->getDistPart( m_pTempPel, 1<< uiLog2TrSize, pcResi->getLumaAddr( uiAbsPartIdx ), pcResi->getStride(), pcVirRec->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiAbsPartIdx), pcVirOrg->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiAbsPartIdx), pcVirRec->getStride(), 1<< uiLog2TrSize, 1<< uiLog2TrSize );
     5014#if LGE_WVSO_A0119
     5015        Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     5016        Int iVSDWeight = m_pcRdCost->getVSDWeight() * m_pcRdCost->getVSDWeight();
     5017        Dist iD   = (Dist) m_pcRdCost->getDistPart( m_pTempPel, trWidth, pcResi->getLumaAddr( absTUPartIdx ), pcResi->getStride(), trWidth, trHeight );
     5018        uiDistY = (iDWeight * iD + iVSDWeight * (Dist)uiDistY) / ( iDWeight + iVSDWeight);
     5019#endif
    49875020      }
    49885021      else
     
    50355068          TComPicYuv* pcVirOrg = m_pcRdCost->getDepthPicYuv();
    50365069          uiNonzeroDistY = m_pcRdCost->getDistPart( m_pcQTTempTComYuv[uiQTTempAccessLayer].getLumaAddr( uiAbsPartIdx ), m_pcQTTempTComYuv[uiQTTempAccessLayer].getStride(), pcResi->getLumaAddr( uiAbsPartIdx ), pcResi->getStride(), pcVirRec->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU()+uiAbsPartIdx ), pcVirOrg->getLumaAddr( pcCU->getAddr(), pcCU->getZorderIdxInCU()+uiAbsPartIdx ), pcVirRec->getStride(), 1<< uiLog2TrSize,    1<< uiLog2TrSize );
     5070#if LGE_WVSO_A0119
     5071          Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     5072          Int iVSDWeight = m_pcRdCost->getVSDWeight() * m_pcRdCost->getVSDWeight();
     5073          Dist iD = (Dist) m_pcRdCost->getDistPart( m_pcQTTempTComYuv[uiQTTempAccessLayer].getLumaAddr( absTUPartIdx ), m_pcQTTempTComYuv[uiQTTempAccessLayer].getStride(),pcResi->getLumaAddr( absTUPartIdx ), pcResi->getStride(), trWidth,trHeight );
     5074          uiNonzeroDistY = (iDWeight * iD + iVSDWeight * (Dist) uiNonzeroDistY) / ( iDWeight + iVSDWeight);
     5075#endif
    50375076        }
    50385077        else
     
    61196158          TComPicYuv* pcVirOrg = m_pcRdCost->getDepthPicYuv();
    61206159          uiActDist = m_pcRdCost->getDistPart( piPredic, uiStride, piOrig, uiStride, pcVirRec->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()), pcVirOrg->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()), pcVirRec->getStride(), uiWidth, uiHeight );
     6160#if LGE_WVSO_A0119
     6161          Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     6162          Int iVSDWeight = m_pcRdCost->getVSDWeight() * m_pcRdCost->getVSDWeight();
     6163          Dist iD = (Dist) m_pcRdCost->getDistPart( piPredic, uiStride, piOrig, uiStride, uiWidth, uiHeight, false, DF_SAD );
     6164          uiActDist = (iDWeight * iD + iVSDWeight * (Dist) uiActDist) / ( iDWeight + iVSDWeight);
     6165#endif
    61216166        }
    61226167        else       
     
    62326277        TComPicYuv* pcVirOrg = m_pcRdCost->getDepthPicYuv();
    62336278        uiActDist = m_pcRdCost->getDistPart( piPred, uiPredStride, piRef, uiRefStride, pcVirRec->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()), pcVirOrg->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()), pcVirRec->getStride(), uiWidth, uiHeight );
     6279#if LGE_WVSO_A0119
     6280        Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     6281        Int iVSDWeight = m_pcRdCost->getVSDWeight() * m_pcRdCost->getVSDWeight();
     6282        Dist iD = (Dist) m_pcRdCost->getDistPart( piPred, uiPredStride, piRef, uiRefStride, uiWidth, uiHeight, false, DF_SAD );
     6283        uiActDist = (iDWeight * iD + iVSDWeight * (Int) uiActDist) / ( iDWeight + iVSDWeight);
     6284#endif
    62346285      }
    62356286      else
     
    62986349        TComPicYuv* pcVirOrg = m_pcRdCost->getDepthPicYuv();
    62996350        uiActDist = m_pcRdCost->getDistPart( piPred, uiPredStride, piRef, uiRefStride, pcVirRec->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiAbsPtIdx), pcVirOrg->getLumaAddr(pcCU->getAddr(),pcCU->getZorderIdxInCU()+uiAbsPtIdx), pcVirRec->getStride(), uiWidth, uiHeight );
     6351#if LGE_WVSO_A0119
     6352        Int iDWeight = m_pcRdCost->getDWeight() * m_pcRdCost->getDWeight();
     6353        Int iVSDWeight = m_pcRdCost->getVSDWeight() * m_pcRdCost->getVSDWeight();
     6354        Dist iD = (Dist) m_pcRdCost->getDistPart( piPred, uiPredStride, piRef, uiRefStride, uiWidth, uiHeight, false, DF_SAD );
     6355        uiActDist = (iDWeight * iD + iVSDWeight * (Int) uiActDist) / ( iDWeight + iVSDWeight);
     6356#endif
    63006357      }
    63016358      else
  • trunk/source/Lib/TLibEncoder/TEncSlice.cpp

    r102 r115  
    376376  m_pcRdCost->setDisparityCoeff( m_pcCfg->getDispCoeff() );
    377377#endif
    378 
     378#if LGE_WVSO_A0119
     379  if( m_pcCfg->getWVSO() && m_pcCfg->isDepthCoder() )
     380  {
     381
     382    Int iDWeight, iVSOWeight, iVSDWeight;
     383    iDWeight = m_pcCfg->getDWeight();
     384    iVSOWeight = m_pcCfg->getVSOWeight();
     385    iVSDWeight = m_pcCfg->getVSDWeight();
     386    //    if( rpcSlice->getViewId() )  iDWeight = ( iDWeight >> 1 );
     387    //    if( rpcSlice->getPOC() % 8 != 0 )  iDWeight = ( iDWeight >> 1 );
     388    //    if( rpcSlice->getPOC() % 4 != 0 )  iDWeight = ( iDWeight >> 1 );
     389    //    if( rpcSlice->getPOC() % 2 != 0 )  iDWeight = ( iDWeight >> 1 );
     390
     391    m_pcRdCost->setDWeight( iDWeight );
     392    m_pcRdCost->setVSOWeight( iVSOWeight );
     393    m_pcRdCost->setVSDWeight( iVSDWeight );
     394
     395  }
     396#endif
    379397#if RDOQ_CHROMA_LAMBDA
    380398// for RDOQ
     
    831849#endif
    832850
     851#if OL_DEPTHLIMIT //stop dumping partition information
     852        b_dumpPartInfo = 0;
     853        pcCU->setPartDumpFlag(b_dumpPartInfo);
     854#endif
    833855
    834856    // inherit from TR if necessary, select substream to use.
     
    12901312
    12911313    TComDataCU*& pcCU = rpcPic->getCU( uiCUAddr );   
     1314#if OL_DEPTHLIMIT
     1315        pcCU->setPartDumpFlag(b_dumpPartInfo);
     1316        pcCU->resetPartInfo();
     1317#endif
    12921318#if !REMOVE_TILE_DEPENDENCE
    12931319    if( (rpcPic->getPicSym()->getTileBoundaryIndependenceIdr()==0) && (rpcPic->getPicSym()->getNumColumnsMinus1()!=0) )
  • trunk/source/Lib/TLibEncoder/TEncSlice.h

    r77 r115  
    101101 
    102102  UInt                    m_uiSliceIdx;
     103#if OL_DEPTHLIMIT //flag to signal to start dumping
     104  bool                                    b_dumpPartInfo;
     105#endif
    103106public:
    104107  TEncSlice();
     
    128131  UInt    getSliceIdx()         { return m_uiSliceIdx;                    }
    129132  Void    setSliceIdx(UInt i)   { m_uiSliceIdx = i;                       }
     133#if OL_DEPTHLIMIT //flag to signal to start dumping
     134  Void    setPartDumpFlag(bool flag)    {b_dumpPartInfo = flag;};
     135#endif
    130136};
    131137
  • trunk/source/Lib/TLibEncoder/TEncTop.cpp

    r105 r115  
    768768  m_cSPS.setUseDMM( m_bUseDMM );
    769769#endif
     770#if OL_DEPTHLIMIT
     771  m_cSPS.setUseDPL( m_bDepthPartitionLimiting );
     772#endif
    770773#if HHI_MPI
    771774  m_cSPS.setUseMVI( m_bUseMVI );
Note: See TracChangeset for help on using the changeset viewer.