Changeset 635 in 3DVCSoftware for branches/HTM-8.2-dev0-KWU/source/App


Ignore:
Timestamp:
14 Oct 2013, 20:13:58 (11 years ago)
Author:
kwu-htm
Message:

"JCT3V-E0227 : Inter-view MAD prediction for 3D multi-view video" is integrated by KWU. Configuration has changed by adding rate control for URQ and the integrated view-wise target bitrate allocation and inter-view MAD prediction.

Location:
branches/HTM-8.2-dev0-KWU/source/App/TAppEncoder
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/HTM-8.2-dev0-KWU/source/App/TAppEncoder/TAppEncCfg.cpp

    r630 r635  
    8282  m_codedPivotValue = NULL;
    8383  m_targetPivotValue = NULL;
     84
     85#if KWU_RC_MADPRED_E0227
     86  m_uiDepthMADPred = 0;
     87#endif
    8488}
    8589
     
    594598  ( "InitialQP",           m_RCInitialQP,               0, "Rate control: initial QP" )
    595599  ( "RCForceIntraQP",      m_RCForceIntraQP,        false, "Rate control: force intra QP to be equal to initial QP" )
    596 #else
    597   ("RateCtrl,-rc", m_enableRateCtrl, false, "Rate control on/off")
     600
     601#if KWU_RC_VIEWRC_E0227
     602  ("ViewWiseTargetBits, -vtbr" ,  m_pchViewTargetBits,  std::vector<Int>(1, 32), "View-wise target bit-rate setting")
     603  ("TargetBitAssign, -ta", m_bViewWiseRateCtrl, false, "View-wise rate control on/off")
     604#endif
     605#if KWU_RC_MADPRED_E0227
     606  ("DepthMADPred, -dm", m_uiDepthMADPred, (UInt)0, "Depth based MAD prediction on/off")
     607#endif
     608#else
     609  ("RateControl,-rc", m_enableRateCtrl, false, "Rate control on/off")
    598610  ("TargetBitrate,-tbr", m_targetBitrate, 0, "Input target bitrate")
    599611  ("NumLCUInUnit,-nu", m_numLCUInUnit, 0, "Number of LCUs in an Unit")
     612
     613#if KWU_RC_VIEWRC_E0227
     614  ("ViewWiseTargetBits, -vtbr" ,  m_pchViewTargetBits,  std::vector<Int>(1, 32), "View-wise target bit-rate setting")
     615  ("TargetBitAssign, -ta", m_bViewWiseRateCtrl, false, "View-wise rate control on/off")
     616#endif
     617#if KWU_RC_MADPRED_E0227
     618  ("DepthMADPred, -dm", m_uiDepthMADPred, (UInt)0, "Depth based MAD prediction on/off")
     619#endif
    600620#endif
    601621
     
    21592179    xConfirmPara( (numLCUInPic % m_numLCUInUnit) != 0, "total number of LCUs in a frame should be completely divided by NumLCUInUnit" );
    21602180
    2161     m_iMaxDeltaQP       = MAX_DELTA_QP;
     2181    //m_iMaxDeltaQP       = MAX_DELTA_QP;
    21622182    m_iMaxCuDQPDepth    = MAX_CUDQP_DEPTH;
    21632183  }
     
    23012321    printf("InitialQP                    : %d\n", m_RCInitialQP );
    23022322    printf("ForceIntraQP                 : %d\n", m_RCForceIntraQP );
     2323
     2324#if KWU_RC_MADPRED_E0227
     2325    printf("Depth based MAD prediction   : %d\n", m_uiDepthMADPred);
     2326#endif
     2327#if KWU_RC_VIEWRC_E0227
     2328    printf("View-wise Rate control       : %d\n", m_bViewWiseRateCtrl);
     2329    if(m_bViewWiseRateCtrl)
     2330    {
     2331
     2332      printf("ViewWiseTargetBits           : ");
     2333      for (int i = 0 ; i < m_iNumberOfViews ; i++)
     2334        printf("%d ", m_pchViewTargetBits[i]);
     2335      printf("\n");
     2336    }
     2337    else
     2338    {
     2339      printf("TargetBitrate                : %d\n", m_RCTargetBitrate );
     2340    }
     2341#endif
    23032342  }
    23042343#else
     
    23082347    printf("TargetBitrate                : %d\n", m_targetBitrate);
    23092348    printf("NumLCUInUnit                 : %d\n", m_numLCUInUnit);
     2349
     2350#if KWU_RC_MADPRED_E0227
     2351    printf("Depth based MAD prediction   : %d\n", m_uiDepthMADPred);
     2352#endif
     2353#if KWU_RC_VIEWRC_E0227
     2354    printf("View-wise Rate control       : %d\n", m_bViewWiseRateCtrl);
     2355    if(m_bViewWiseRateCtrl)
     2356    {
     2357
     2358      printf("ViewWiseTargetBits           : ");
     2359      for (int i = 0 ; i < m_iNumberOfViews ; i++)
     2360        printf("%d ", m_pchViewTargetBits[i]);
     2361      printf("\n");
     2362    }
     2363    else
     2364    {
     2365      printf("TargetBitrate                : %d\n", m_targetBitrate );
     2366    }
     2367#endif
    23102368  }
    23112369#endif
  • branches/HTM-8.2-dev0-KWU/source/App/TAppEncoder/TAppEncCfg.h

    r622 r635  
    367367  Int       m_RCInitialQP;                        ///< inital QP for rate control
    368368  Bool      m_RCForceIntraQP;                     ///< force all intra picture to use initial QP or not
     369
     370#if KWU_RC_VIEWRC_E0227
     371  vector<Int>     m_pchViewTargetBits;
     372  bool      m_bViewWiseRateCtrl;                              ///< Flag for using view-wise rate control
     373#endif
     374#if KWU_RC_MADPRED_E0227
     375  UInt       m_uiDepthMADPred;
     376#endif
    369377#else
    370378  Bool      m_enableRateCtrl;                                   ///< Flag for using rate control algorithm
    371379  Int       m_targetBitrate;                                 ///< target bitrate
    372380  Int       m_numLCUInUnit;                                  ///< Total number of LCUs in a frame should be completely divided by the NumLCUInUnit
     381
     382#if KWU_RC_VIEWRC_E0227
     383  vector<Int>     m_pchViewTargetBits;
     384  bool      m_bViewWiseRateCtrl;                              ///< Flag for using view-wise rate control
     385#endif
     386#if KWU_RC_MADPRED_E0227
     387  UInt       m_uiDepthMADPred;
     388#endif
    373389#endif
    374390  Int       m_useScalingListId;                               ///< using quantization matrix
  • branches/HTM-8.2-dev0-KWU/source/App/TAppEncoder/TAppEncTop.cpp

    r622 r635  
    512512  m_cTEncTop.setSignHideFlag(m_signHideFlag);
    513513#if RATE_CONTROL_LAMBDA_DOMAIN
    514   m_cTEncTop.setUseRateCtrl         ( m_RCEnableRateControl );
     514  if(!m_cTEncTop.getIsDepth())    //only for texture
     515    m_cTEncTop.setUseRateCtrl         ( m_RCEnableRateControl );
     516  else
     517    m_cTEncTop.setUseRateCtrl         ( 0 );
     518#if !KWU_RC_VIEWRC_E0227
    515519  m_cTEncTop.setTargetBitrate       ( m_RCTargetBitrate );
     520#endif
    516521  m_cTEncTop.setKeepHierBit         ( m_RCKeepHierarchicalBit );
    517522  m_cTEncTop.setLCULevelRC          ( m_RCLCULevelRC );
     
    519524  m_cTEncTop.setInitialQP           ( m_RCInitialQP );
    520525  m_cTEncTop.setForceIntraQP        ( m_RCForceIntraQP );
    521 #else
    522   m_cTEncTop.setUseRateCtrl     ( m_enableRateCtrl);
    523   m_cTEncTop.setTargetBitrate   ( m_targetBitrate);
    524   m_cTEncTop.setNumLCUInUnit    ( m_numLCUInUnit);
     526
     527#if KWU_RC_MADPRED_E0227
     528  if(m_cTEncTop.getUseRateCtrl() && !m_cTEncTop.getIsDepth())
     529  {
     530    m_cTEncTop.setUseDepthMADPred(layerIdInVps ? m_uiDepthMADPred       : 0);
     531
     532    if(m_cTEncTop.getUseDepthMADPred())
     533      m_cTEncTop.setCamParam(&m_cCameraData);
     534  }
     535#endif
     536#if KWU_RC_VIEWRC_E0227
     537  if(m_cTEncTop.getUseRateCtrl() && !m_cTEncTop.getIsDepth())
     538  {
     539    m_cTEncTop.setUseViewWiseRateCtrl(m_bViewWiseRateCtrl);
     540
     541    if(m_iNumberOfViews == 1)
     542    {
     543      if(m_bViewWiseRateCtrl)
     544      {
     545        m_cTEncTop.setTargetBitrate(m_pchViewTargetBits[layerIdInVps>>1]);
     546      }
     547      else
     548        m_cTEncTop.setTargetBitrate       ( m_RCTargetBitrate );
     549    }
     550    else
     551    {
     552      if(m_bViewWiseRateCtrl)
     553      {
     554        m_cTEncTop.setTargetBitrate(m_pchViewTargetBits[layerIdInVps>>1]);
     555      }
     556      else
     557      {
     558        if(m_iNumberOfViews == 2)
     559        {
     560          if(m_cTEncTop.getViewId() == 0)
     561            m_cTEncTop.setTargetBitrate              ( (m_RCTargetBitrate*80)/100 );
     562          else if(m_cTEncTop.getViewId() == 1)
     563            m_cTEncTop.setTargetBitrate              ( (m_RCTargetBitrate*20)/100 );
     564        }
     565        else if(m_iNumberOfViews == 3)
     566        {
     567          if(m_cTEncTop.getViewId() == 0)
     568            m_cTEncTop.setTargetBitrate              ( (m_RCTargetBitrate*66)/100 );
     569          else if(m_cTEncTop.getViewId() == 1)
     570            m_cTEncTop.setTargetBitrate              ( (m_RCTargetBitrate*17)/100 );
     571          else if(m_cTEncTop.getViewId() == 2)
     572            m_cTEncTop.setTargetBitrate              ( (m_RCTargetBitrate*17)/100 );
     573        }
     574        else
     575          m_cTEncTop.setTargetBitrate              ( m_RCTargetBitrate );
     576      }
     577    }
     578  }
     579#endif
     580#else
     581  if(!m_cTEncTop.getIsDepth())    //only for texture
     582  {
     583    m_cTEncTop.setUseRateCtrl         ( m_enableRateCtrl );
     584#if !KWU_RC_VIEWRC_E0227
     585    m_cTEncTop.setTargetBitrate       ( m_targetBitrate );
     586#endif
     587    m_cTEncTop.setNumLCUInUnit        ( m_numLCUInUnit);
     588  }
     589  else
     590    m_cTEncTop.setUseRateCtrl         ( 0 );
     591 
     592#if KWU_RC_MADPRED_E0227
     593  if(m_cTEncTop.getUseRateCtrl() && !m_cTEncTop.getIsDepth())
     594  {
     595    m_cTEncTop.setUseDepthMADPred(layerIdInVps ? m_uiDepthMADPred       : 0);
     596
     597    if(m_cTEncTop.getUseDepthMADPred())
     598      m_cTEncTop.setCamParam(&m_cCameraData);
     599  }
     600#endif
     601
     602#if KWU_RC_VIEWRC_E0227
     603  if(m_cTEncTop.getUseRateCtrl() && !m_cTEncTop.getIsDepth())
     604  {
     605    m_cTEncTop.setUseViewWiseRateCtrl(m_bViewWiseRateCtrl);
     606    if(m_iNumberOfViews == 1)
     607    {
     608      if(m_bViewWiseRateCtrl)
     609      {
     610        m_cTEncTop.setTargetBitrate(m_pchViewTargetBits[layerIdInVps>>1]);
     611      }
     612      else
     613        m_cTEncTop.setTargetBitrate       ( m_targetBitrate );
     614    }
     615    else
     616    {
     617      if(m_bViewWiseRateCtrl)
     618      {
     619        m_cTEncTop.setTargetBitrate(m_pchViewTargetBits[layerIdInVps>>1]);
     620      }
     621      else
     622      {
     623        if(m_iNumberOfViews == 2)
     624        {
     625          if(m_cTEncTop.getViewId() == 0)
     626            m_cTEncTop.setTargetBitrate              ( (m_targetBitrate*80)/100 );
     627          else if(m_cTEncTop.getViewId() == 1)
     628            m_cTEncTop.setTargetBitrate              ( (m_targetBitrate*20)/100 );
     629        }
     630        else if(m_iNumberOfViews == 3)
     631        {
     632          if(m_cTEncTop.getViewId() == 0)
     633            m_cTEncTop.setTargetBitrate              ( (m_targetBitrate*66)/100 );
     634          else if(m_cTEncTop.getViewId() == 1)
     635            m_cTEncTop.setTargetBitrate              ( (m_targetBitrate*17)/100 );
     636          else if(m_cTEncTop.getViewId() == 2)
     637            m_cTEncTop.setTargetBitrate              ( (m_targetBitrate*17)/100 );
     638        }
     639        else
     640          m_cTEncTop.setTargetBitrate              ( m_targetBitrate );
     641      }
     642    }
     643  }
     644#endif
    525645#endif
    526646  m_cTEncTop.setTransquantBypassEnableFlag(m_TransquantBypassEnableFlag);
     
    669789  for(Int layer=0; layer<m_numberOfLayers; layer++)
    670790  {
     791#if KWU_RC_MADPRED_E0227
     792    m_acTEncTopList[layer]->init( this );
     793#else
    671794    m_acTEncTopList[layer]->init( );
     795#endif
    672796  }
    673797#else
     
    789913      }
    790914    }
     915
     916#if !RATE_CONTROL_LAMBDA_DOMAIN
     917    for(Int layer=0; layer < m_numberOfLayers; layer++ )
     918    {
     919      if(m_acTEncTopList[layer]->getUseRateCtrl()  && !m_acTEncTopList[layer]->getIsDepth())
     920      {
     921        m_acTEncTopList[layer]->getRateCtrl()->updateRCGOPStatus();
     922      }
     923    }
     924#endif
     925
    791926    gopSize = maxGopSize;
    792927  }
  • branches/HTM-8.2-dev0-KWU/source/App/TAppEncoder/TAppEncTop.h

    r622 r635  
    5050#endif
    5151
     52#if KWU_RC_MADPRED_E0227
     53class TEncTop;
     54#endif
    5255//! \ingroup TAppEncoder
    5356//! \{
Note: See TracChangeset for help on using the changeset viewer.