⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbdatactrl.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      uiSliceId = m_uiSliceId;
      rcMbDataCurr.getMbTCoeffs().clear();
      rcMbDataCurr.initMbData( m_ucLastMbQp, m_ucLastMbQp4LF, uiSliceId, m_pcSliceHeader->getSliceType() );
      rcMbDataCurr.clear();
      m_uiMbProcessed++;
    }
    else
    {
      //allready assigned;
      if( ENCODE_PROCESS != m_eProcessingState )
      {
       AF();
      }
      else
      {
        if( iForceQp != -1 )
        {
          m_ucLastMbQp = iForceQp;
        }
      }
    }
  }

  const Bool bColocatedField = ( m_pcMbDataCtrl0L1 == NULL ) ? true : m_pcMbDataCtrl0L1->isPicCodedField();

  Int icurrSliceGroupID = getSliceGroupIDofMb(uiMbY * (m_uiMbStride>>(UInt)m_pcSliceHeader->getFieldPicFlag()) + uiMbX ); //TMM_INTERLACE

  m_pcMbDataAccess = new (m_pcMbDataAccess) MbDataAccess( rcMbDataCurr,                                      // current
                                                          	rcMbDataComp,                                    // complementary
                                                          xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY,   uiMbX-1, bLf ), // left        
                                                          xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-1, uiMbX  , bLf ), // above                                                                 
                                                          xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-1, uiMbX-1, bLf ), // above left  
																													((bMbAff && (uiMbY % 2 == 1)) ? xGetOutMbData() : xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-1, uiMbX+1, bLf )), // above right
																													xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-2, uiMbX  , bLf ), // above above
																													xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-2, uiMbX-1, bLf ), // above above left
																													xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY-2, uiMbX+1, bLf ), // above above right
																													xGetRefMbData( uiSliceId, icurrSliceGroupID, uiMbY+1, uiMbX-1, bLf ), // below left
                                                          xGetOutMbData(),                                   // unvalid
																													xGetColMbData( uiIdxColTop ),
																													xGetColMbData( uiIdxColBot ),
                                                         *m_pcSliceHeader,
                                                          uiMbX,
                                                          uiMbY,
																													bTopMb,
																													m_bUseTopField,
                                                          bColocatedField,// TMM_INTERLACE
                                                          m_ucLastMbQp, m_ucLastMbQp4LF );

  ROT( NULL == m_pcMbDataAccess );

  rpcMbDataAccess = m_pcMbDataAccess;

  return Err::m_nOK;
}






ControlData::ControlData()
: m_pcMbDataCtrl         ( 0   )
, m_pcMbDataCtrl0L1( 0 )
, m_pcSliceHeader        ( 0   )
, m_pcSliceHeaderBot     ( 0 )
, m_dLambda              ( 0   )
, m_pcBaseLayerRec       ( 0   )
, m_pcBaseLayerSbb       ( 0   )
, m_pcBaseLayerCtrl      ( 0   )
, m_pcBaseLayerCtrlField ( 0   )
, m_pcBaseCtrlData       ( 0   )
, m_uiUseBLMotion        ( 0   )
, m_dScalingFactor       ( 1.0 )
, m_pacFGSMbQP           ( 0 )
, m_pacFGSMbQP4LF        ( 0 )
, m_pauiFGSMbCbp         ( 0 )
, m_pabFGS8x8Trafo       ( 0 )
, m_bIsNormalMbDataCtrl  ( true )
, m_pacBQMbQP            ( 0 )
, m_pacBQMbQP4LF         ( 0 )
, m_pauiBQMbCbp          ( 0 )
, m_pabBQ8x8Trafo        ( 0 )
, m_paeBQMbMode          ( 0 )
, m_pusBQFwdBwd          ( 0 )
, m_bSpatialScalability  ( false)
{
  m_paacBQMotionData[0] = m_paacBQMotionData[1] = 0;
}

ControlData::~ControlData()
{
  AOT( m_pacBQMbQP );
  AOT( m_pacBQMbQP4LF );
  AOT( m_pauiBQMbCbp );
  AOT( m_pabBQ8x8Trafo );
  AOT( m_pacFGSMbQP );
  AOT( m_pacFGSMbQP4LF );
  AOT( m_pauiFGSMbCbp );
  AOT( m_pabFGS8x8Trafo );
}

Void
ControlData::clear()
{
  m_pcMbDataCtrl0L1 = 0;
  m_pcBaseLayerRec       = 0;
  m_pcBaseLayerSbb       = 0;
  m_pcBaseLayerCtrl      = 0;
  m_pcBaseLayerCtrlField = 0;
  m_uiUseBLMotion        = 0;
  m_dScalingFactor       = 1.0;

  m_bIsNormalMbDataCtrl = true;
}

ErrVal
ControlData::init( SliceHeader*  pcSliceHeader,
                   MbDataCtrl*   pcMbDataCtrl,
                   Double        dLambda )
{
  ROF( pcSliceHeader );
  ROF( pcMbDataCtrl  );

  m_pcSliceHeader = pcSliceHeader;
  m_pcMbDataCtrl  = pcMbDataCtrl;
  m_dLambda       = dLambda;
  
  m_pcMbDataCtrl0L1 = 0;
  m_pcBaseLayerRec       = 0;
  m_pcBaseLayerSbb       = 0;
  m_pcBaseLayerCtrl      = 0;
  m_pcBaseLayerCtrlField = 0;
  m_uiUseBLMotion        = 0;

  return Err::m_nOK;
}

ErrVal
ControlData::init( SliceHeader*  pcSliceHeader )
{
  ROF( pcSliceHeader );
  ROF( m_pcMbDataCtrl  );

  m_pcSliceHeader = pcSliceHeader;
  
  m_pcMbDataCtrl0L1 = 0;
  m_pcBaseLayerRec       = 0;
  m_pcBaseLayerSbb       = 0;
  m_pcBaseLayerCtrl      = 0;
  m_pcBaseLayerCtrlField = 0; 
  m_uiUseBLMotion        = 0;

  return Err::m_nOK;
}

ErrVal
ControlData::initBQData( UInt uiNumMb )
{
  ROT( m_pacBQMbQP );
  ROT( m_pacBQMbQP4LF );
  ROT( m_pauiBQMbCbp );
  ROT( m_pabBQ8x8Trafo );
  ROFS( ( m_pacBQMbQP      = new UChar [uiNumMb] ) );
  ROFS( ( m_pacBQMbQP4LF   = new UChar [uiNumMb] ) );
  ROFS( ( m_pauiBQMbCbp    = new UInt  [uiNumMb] ) );
  ROFS( ( m_pabBQ8x8Trafo  = new Bool  [uiNumMb] ) );
  ROFS( ( m_paeBQMbMode    = new MbMode[uiNumMb] ) );
  ROFS( ( m_pusBQFwdBwd    = new UShort[uiNumMb] ) );
  ROFS( ( m_paacBQMotionData[0] = new MbMotionData[uiNumMb] ) );
  ROFS( ( m_paacBQMotionData[1] = new MbMotionData[uiNumMb] ) );
  return Err::m_nOK;
}

ErrVal
ControlData::uninitBQData()
{
  delete [] m_pacBQMbQP;
  delete [] m_pacBQMbQP4LF;
  delete [] m_pauiBQMbCbp;
  delete [] m_pabBQ8x8Trafo;
  delete [] m_paeBQMbMode;
  delete [] m_pusBQFwdBwd;
  delete [] m_paacBQMotionData[0];
  delete [] m_paacBQMotionData[1];
  m_pacBQMbQP     = 0;
  m_pacBQMbQP4LF  = 0;
  m_pauiBQMbCbp   = 0;
  m_pabBQ8x8Trafo = 0;
  m_paeBQMbMode   = 0;
  m_pusBQFwdBwd   = 0;
  m_paacBQMotionData[0] = 0;
  m_paacBQMotionData[1] = 0;
  return Err::m_nOK;
}


ErrVal
ControlData::storeBQLayerQpAndCbp()
{
  ROF( m_pacBQMbQP );
  ROF( m_pacBQMbQP4LF );
  ROF( m_pauiBQMbCbp );
  ROF( m_pabBQ8x8Trafo );
  for( UInt uiMbIndex = 0; uiMbIndex < m_pcMbDataCtrl->getSize(); uiMbIndex++ )
  {
    m_pacBQMbQP     [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp();
    m_pacBQMbQP4LF  [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp4LF();
    m_pauiBQMbCbp   [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbExtCbp();
    m_pabBQ8x8Trafo [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).isTransformSize8x8();
    m_paeBQMbMode   [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbMode();
    m_pusBQFwdBwd   [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getFwdBwd();
    m_paacBQMotionData[0][uiMbIndex].copyFrom( m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbMotionData( ListIdx( 0 ) ) );
    m_paacBQMotionData[1][uiMbIndex].copyFrom( m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbMotionData( ListIdx( 1 ) ) );
  }
  return Err::m_nOK;
}

ErrVal
ControlData::switchBQLayerQpAndCbp()
{
  ROF( m_pacBQMbQP );
  ROF( m_pacBQMbQP4LF );
  ROF( m_pauiBQMbCbp );
  ROF( m_pabBQ8x8Trafo );
  for( UInt uiMbIndex = 0; uiMbIndex < m_pcMbDataCtrl->getSize(); uiMbIndex++ )
  {
    UChar ucQP    = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp();
    UChar ucQP4LF = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp4LF();
    UInt  uiCbp   = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbExtCbp();
    Bool  bT8x8   = m_pcMbDataCtrl->getMbData( uiMbIndex ).isTransformSize8x8();

    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setQp               ( m_pacBQMbQP     [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setQp4LF            ( m_pacBQMbQP4LF  [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setMbExtCbp         ( m_pauiBQMbCbp   [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setTransformSize8x8 ( m_pabBQ8x8Trafo [uiMbIndex] );

    m_pacBQMbQP     [uiMbIndex] = ucQP;
    m_pacBQMbQP4LF  [uiMbIndex] = ucQP4LF;
    m_pauiBQMbCbp   [uiMbIndex] = uiCbp;
    m_pabBQ8x8Trafo [uiMbIndex] = bT8x8;

    MbMode       eMbMode  = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbMode();
    UShort       usFwdBwd = m_pcMbDataCtrl->getMbData( uiMbIndex ).getFwdBwd();

    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setMbMode           ( m_paeBQMbMode [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setFwdBwd           ( m_pusBQFwdBwd [uiMbIndex] );

    m_paeBQMbMode   [uiMbIndex] = eMbMode;
    m_pusBQFwdBwd   [uiMbIndex] = usFwdBwd;

    for( UInt ui = 0; ui < 2; ui++ )
    {
      MbMotionData cMbMotionData;
      cMbMotionData.copyFrom( m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbMotionData( ListIdx( ui ) ) );
      m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).getMbMotionData( ListIdx( ui ) ).copyFrom( m_paacBQMotionData[ui][uiMbIndex] );
      m_paacBQMotionData[ui][uiMbIndex].copyFrom( cMbMotionData );
    }
  }
  return Err::m_nOK;
}




ErrVal
ControlData::initFGSData( UInt uiNumMb )
{
  ROT( m_pacFGSMbQP );
  ROT( m_pacFGSMbQP4LF );
  ROT( m_pauiFGSMbCbp );
  ROT( m_pabFGS8x8Trafo );
  ROFS( ( m_pacFGSMbQP      = new UChar [uiNumMb] ) );
  ROFS( ( m_pacFGSMbQP4LF   = new UChar [uiNumMb] ) );
  ROFS( ( m_pauiFGSMbCbp    = new UInt  [uiNumMb] ) );
  ROFS( ( m_pabFGS8x8Trafo  = new Bool  [uiNumMb] ) );
  return Err::m_nOK;
}

ErrVal
ControlData::uninitFGSData()
{
  delete [] m_pacFGSMbQP;
  delete [] m_pacFGSMbQP4LF;
  delete [] m_pauiFGSMbCbp;
  delete [] m_pabFGS8x8Trafo;
  m_pacFGSMbQP      = 0;
  m_pacFGSMbQP4LF   = 0;
  m_pauiFGSMbCbp    = 0;
  m_pabFGS8x8Trafo  = 0;
  return Err::m_nOK;
}

ErrVal
ControlData::storeFGSLayerQpAndCbp()
{
  ROF( m_pacFGSMbQP );
  ROF( m_pacFGSMbQP4LF );
  ROF( m_pauiFGSMbCbp );
  ROF( m_pabFGS8x8Trafo );
  for( UInt uiMbIndex = 0; uiMbIndex < m_pcMbDataCtrl->getSize(); uiMbIndex++ )
  {
    m_pacFGSMbQP     [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp();
    m_pacFGSMbQP4LF  [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp4LF();
    m_pauiFGSMbCbp   [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbExtCbp();
    m_pabFGS8x8Trafo [uiMbIndex] = m_pcMbDataCtrl->getMbData( uiMbIndex ).isTransformSize8x8();
  }
  return Err::m_nOK;
}

ErrVal
ControlData::switchFGSLayerQpAndCbp()
{
  ROF( m_pacFGSMbQP );
  ROF( m_pacFGSMbQP4LF );
  ROF( m_pauiFGSMbCbp );
  ROF( m_pabFGS8x8Trafo );
  for( UInt uiMbIndex = 0; uiMbIndex < m_pcMbDataCtrl->getSize(); uiMbIndex++ )
  {
    UChar ucQP      = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp();
    UChar ucQP4LF   = m_pcMbDataCtrl->getMbData( uiMbIndex ).getQp4LF();
    UInt  uiCbp     = m_pcMbDataCtrl->getMbData( uiMbIndex ).getMbExtCbp();
    Bool  bT8x8     = m_pcMbDataCtrl->getMbData( uiMbIndex ).isTransformSize8x8();

    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setQp               ( m_pacFGSMbQP     [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setQp4LF            ( m_pacFGSMbQP4LF  [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setMbExtCbp         ( m_pauiFGSMbCbp   [uiMbIndex] );
    m_pcMbDataCtrl->getMbDataByIndex( uiMbIndex ).setTransformSize8x8 ( m_pabFGS8x8Trafo [uiMbIndex] );

    m_pacFGSMbQP     [uiMbIndex] = ucQP;
    m_pacFGSMbQP4LF  [uiMbIndex] = ucQP4LF;
    m_pauiFGSMbCbp   [uiMbIndex] = uiCbp;
    m_pabFGS8x8Trafo [uiMbIndex] = bT8x8;
  }
  return Err::m_nOK;
}


const Int MbDataCtrl::getSliceGroupIDofMb(Int mb)
{
  Int iRefSliceID ;
  if(m_pcSliceHeader->getFMO() != NULL)
	iRefSliceID =m_pcSliceHeader->getFMO()->getSliceGroupId(mb );
  else
	iRefSliceID =-1;

  return iRefSliceID ;
}


ErrVal 
MbDataCtrl::getBoundaryMask( Int i

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -