Changeset 1391 in SHVCSoftware for branches/SHM-dev/source/Lib/TLibEncoder


Ignore:
Timestamp:
4 Aug 2015, 03:15:00 (9 years ago)
Author:
seregin
Message:

port rev 4529

Location:
branches/SHM-dev/source/Lib/TLibEncoder
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncCfg.h

    r1369 r1391  
    108108  Int       m_framesToBeEncoded;
    109109  Double    m_adLambdaModifier[ MAX_TLAYER ];
     110  std::vector<Double> m_adIntraLambdaModifier;
     111  Double    m_dIntraQpFactor;                                 ///< Intra Q Factor. If negative, use a default equation: 0.57*(1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? (GopSize-1)/2 : GopSize-1) ))
    110112
    111113  Bool      m_printMSEBasedSequencePSNR;
     
    597599  Int       getSourceHeight                 ()      { return  m_iSourceHeight; }
    598600  Int       getFramesToBeEncoded            ()      { return  m_framesToBeEncoded; }
    599   Void setLambdaModifier                    ( UInt uiIndex, Double dValue ) { m_adLambdaModifier[ uiIndex ] = dValue; }
    600   Double getLambdaModifier                  ( UInt uiIndex ) const { return m_adLambdaModifier[ uiIndex ]; }
     601 
     602  //====== Lambda Modifiers ========
     603  Void      setLambdaModifier               ( UInt uiIndex, Double dValue ) { m_adLambdaModifier[ uiIndex ] = dValue; }
     604  Double    getLambdaModifier               ( UInt uiIndex )          const { return m_adLambdaModifier[ uiIndex ]; }
     605  Void      setIntraLambdaModifier          ( const std::vector<Double> &dValue )               { m_adIntraLambdaModifier = dValue;       }
     606  const std::vector<Double>& getIntraLambdaModifier()                        const { return m_adIntraLambdaModifier;         }
     607  Void      setIntraQpFactor                ( Double dValue )               { m_dIntraQpFactor = dValue;              }
     608  Double    getIntraQpFactor                ()                        const { return m_dIntraQpFactor;                }
    601609
    602610  //==== Coding Structure ========
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncSlice.cpp

    r1390 r1391  
    236236 */
    237237
    238 Void TEncSlice::initEncSlice( TComPic* pcPic, Int pocLast, Int pocCurr, Int iGOPid, TComSlice*& rpcSlice, Bool isField )
     238Void TEncSlice::initEncSlice( TComPic* pcPic, const Int pocLast, const Int pocCurr, const Int iGOPid, TComSlice*& rpcSlice, const Bool isField )
    239239{
    240240  Double dQP;
     
    377377    Int    SHIFT_QP = 12;
    378378
    379     Double dLambda_scale = 1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? NumberBFrames/2 : NumberBFrames) );
    380 
    381379#if FULL_NBIT
    382380#if SVC_EXTENSION
     
    396394    if ( eSliceType==I_SLICE )
    397395    {
    398       dQPFactor=0.57*dLambda_scale;
    399     }
     396      if (m_pcCfg->getIntraQpFactor()>=0.0 && m_pcCfg->getGOPEntry(iGOPid).m_sliceType != I_SLICE)
     397      {
     398        dQPFactor=m_pcCfg->getIntraQpFactor();
     399      }
     400      else
     401      {
     402        Double dLambda_scale = 1.0 - Clip3( 0.0, 0.5, 0.05*(Double)(isField ? NumberBFrames/2 : NumberBFrames) );
     403       
     404        dQPFactor=0.57*dLambda_scale;
     405      }
     406    }
     407   
    400408    dLambda = dQPFactor*pow( 2.0, qp_temp/3.0 );
    401409
     
    431439  iQP     = m_piRdPicQp    [0];
    432440
    433   if( rpcSlice->getSliceType( ) != I_SLICE )
    434   {
    435     dLambda *= m_pcCfg->getLambdaModifier( m_pcCfg->getGOPEntry(iGOPid).m_temporalId );
    436   }
     441  const Int temporalId=m_pcCfg->getGOPEntry(iGOPid).m_temporalId;
     442  const std::vector<Double> &intraLambdaModifiers=m_pcCfg->getIntraLambdaModifier();
     443
     444  Double lambdaModifier;
     445  if( rpcSlice->getSliceType( ) != I_SLICE || intraLambdaModifiers.empty())
     446  {
     447    lambdaModifier = m_pcCfg->getLambdaModifier( temporalId );
     448  }
     449  else
     450  {
     451    lambdaModifier = intraLambdaModifiers[ (temporalId < intraLambdaModifiers.size()) ? temporalId : (intraLambdaModifiers.size()-1) ];
     452  }
     453
     454  dLambda *= lambdaModifier;
    437455
    438456#if JCTVC_M0259_LAMBDAREFINEMENT
     
    524542  rpcSlice->setDepth            ( depth );
    525543
    526   pcPic->setTLayer( m_pcCfg->getGOPEntry(iGOPid).m_temporalId );
     544  pcPic->setTLayer( temporalId );
    527545  if(eSliceType==I_SLICE)
    528546  {
  • branches/SHM-dev/source/Lib/TLibEncoder/TEncSlice.h

    r1389 r1391  
    120120
    121121  /// preparation of slice encoding (reference marking, QP and lambda)
    122   Void    initEncSlice        ( TComPic*  pcPic, Int pocLast, Int pocCurr,
    123                                 Int iGOPid,   TComSlice*& rpcSlice, Bool isField );
     122  Void    initEncSlice        ( TComPic*  pcPic, const Int pocLast, const Int pocCurr,
     123                                const Int iGOPid,   TComSlice*& rpcSlice, const Bool isField );
    124124  Void    resetQP             ( TComPic* pic, Int sliceQP, Double lambda );
    125125  // compress and encode slice
Note: See TracChangeset for help on using the changeset viewer.