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

📄 sliceheaderbase.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 5 页
字号:
Void
EndOfStream::copy( const EndOfStream& rcEndOfStream, Bool bInclusiveNALUnitHeader )
{
  if( bInclusiveNALUnitHeader )
  {
    NalUnitHeader::copy( rcEndOfStream );
  }
}

ErrVal
EndOfStream::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNALUnitHeader )  const
{
  if( bInclusiveNALUnitHeader )
  {
    RNOK( NalUnitHeader::write( rcWriteIf ) );
  }
  return Err::m_nOK;
}

ErrVal
EndOfStream::read( HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNALUnitHeader )
{
  if( bInclusiveNALUnitHeader )
  {
    RNOK( NalUnitHeader::read( rcReadIf ) );
  }
  return Err::m_nOK;
}



FillerData::FillerData()
: m_uiNumFFBytes( 0 )
{
}

FillerData::FillerData( const NalUnitHeader& rcNalUnitHeader )
: NalUnitHeader ( rcNalUnitHeader )
, m_uiNumFFBytes( 0 )
{
}

FillerData::FillerData( const FillerData& rcFillerData )
: NalUnitHeader ( rcFillerData )
, m_uiNumFFBytes( rcFillerData.m_uiNumFFBytes )
{
}

FillerData::~FillerData()
{
}

Void
FillerData::copy( const FillerData& rcFillerData, Bool bInclusiveNalUnitHeader )
{
  if( bInclusiveNalUnitHeader )
  {
    NalUnitHeader::copy( rcFillerData );
  }
  m_uiNumFFBytes = rcFillerData.m_uiNumFFBytes;
}

ErrVal
FillerData::writePrefix( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNalUnitHeader ) const
{
  PrefixHeader cPrefixHeader( *this );
  cPrefixHeader.setNalUnitType( NAL_UNIT_PREFIX );
  RNOK( cPrefixHeader.write( rcWriteIf, bInclusiveNalUnitHeader ) );
  return Err::m_nOK;
}

ErrVal
FillerData::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNalUnitHeader ) const
{
  if( bInclusiveNalUnitHeader )
  {
    RNOK( NalUnitHeader::write( rcWriteIf ) );
  }
  for( UInt uiIndex = 0; uiIndex < m_uiNumFFBytes; uiIndex++ )
  {
    RNOK( rcWriteIf.writeCode( 0xFF, 8, "ff_byte" ) );
  }
  return Err::m_nOK;
}

ErrVal
FillerData::read( HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNalUnitHeader )
{
  if( bInclusiveNalUnitHeader )
  {
    RNOK( NalUnitHeader::read( rcReadIf ) );
  }
  for( m_uiNumFFBytes = 0; rcReadIf.moreRBSPData(); m_uiNumFFBytes++ )
  {
    UInt  uiFFByte;
    RNOK( rcReadIf.getCode( uiFFByte, 8, "ff_byte" ) );
    ROF ( uiFFByte == 0xFF );
  }
  return Err::m_nOK;
}



PrefixHeader::PrefixHeader()
: m_bStoreRefBasePicFlag                  ( false )
, m_cDecRefBasePicMarking                 ( true  )
, m_bPrefixNalUnitAdditionalExtensionFlag ( false )
{
}

PrefixHeader::PrefixHeader( const NalUnitHeader& rcNalUnitHeader )
: NalUnitHeader                           ( rcNalUnitHeader )
, m_bStoreRefBasePicFlag                  ( false )
, m_cDecRefBasePicMarking                 ( true  )
, m_bPrefixNalUnitAdditionalExtensionFlag ( false )
{
}

PrefixHeader::PrefixHeader( const PrefixHeader &rcPrefixHeader )
: NalUnitHeader                           ( rcPrefixHeader )
, m_bStoreRefBasePicFlag                  ( rcPrefixHeader.m_bStoreRefBasePicFlag )
, m_cDecRefBasePicMarking                 ( rcPrefixHeader.m_cDecRefBasePicMarking )
, m_bPrefixNalUnitAdditionalExtensionFlag ( rcPrefixHeader.m_bPrefixNalUnitAdditionalExtensionFlag )
{
}

PrefixHeader::~PrefixHeader()
{
}

Void
PrefixHeader::copy( const h264::PrefixHeader &rcPrefixHeader, Bool bInclusiveNALUnitHeader )
{
  if( bInclusiveNALUnitHeader )
  {
    NalUnitHeader::copy( rcPrefixHeader );
  }
  m_bStoreRefBasePicFlag                  = rcPrefixHeader.m_bStoreRefBasePicFlag;
  m_cDecRefBasePicMarking            .copy( rcPrefixHeader.m_cDecRefBasePicMarking );
  m_bPrefixNalUnitAdditionalExtensionFlag = rcPrefixHeader.m_bPrefixNalUnitAdditionalExtensionFlag;
}

ErrVal
PrefixHeader::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNALUnitHeader ) const
{
  if( bInclusiveNALUnitHeader )
  {
    RNOK( NalUnitHeader::write( rcWriteIf ) );
  }
  if( getNalRefIdc() != NAL_REF_IDC_PRIORITY_LOWEST )
  {
    RNOK( rcWriteIf.writeFlag( m_bStoreRefBasePicFlag,                  "store_ref_base_pic_flag" ) );
    if( ( getUseRefBasePicFlag() || m_bStoreRefBasePicFlag ) && ! getIdrFlag() )
    {
      RNOK( m_cDecRefBasePicMarking.write( rcWriteIf ) );
    }
    RNOK( rcWriteIf.writeFlag( m_bPrefixNalUnitAdditionalExtensionFlag, "prefix_nal_unit_additional_extension_flag" ) );
    ROT ( m_bPrefixNalUnitAdditionalExtensionFlag ); // not supported
  }
  return Err::m_nOK;
}

ErrVal
PrefixHeader::read( HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNALUnitHeader )
{
  if( bInclusiveNALUnitHeader )
  {
    RNOK( NalUnitHeader::read( rcReadIf ) );
  }
  if( getNalRefIdc() != NAL_REF_IDC_PRIORITY_LOWEST )
  {
    RNOK( rcReadIf.getFlag( m_bStoreRefBasePicFlag,                   "store_ref_base_pic_flag" ) );
    if( ( getUseRefBasePicFlag() || m_bStoreRefBasePicFlag ) && ! getIdrFlag() )
    {
      RNOK( m_cDecRefBasePicMarking.read( rcReadIf ) );
    }
    RNOK( rcReadIf.getFlag( m_bPrefixNalUnitAdditionalExtensionFlag,  "prefix_nal_unit_additional_extension_flag" ) );
    ROT ( m_bPrefixNalUnitAdditionalExtensionFlag ); // not supported
  }
  return Err::m_nOK;
}



SliceHeaderSyntax::SliceHeaderSyntax()
{
  xInit();
}

SliceHeaderSyntax::SliceHeaderSyntax( const NalUnitHeader& rcNalUnitHeader )
: PrefixHeader( rcNalUnitHeader )
{
  xInit();
}

SliceHeaderSyntax::SliceHeaderSyntax( const PrefixHeader& rcPrefixHeader )
: PrefixHeader( rcPrefixHeader )
{
  xInit();
}

SliceHeaderSyntax::SliceHeaderSyntax( const SliceHeaderSyntax& rcSliceHeaderSyntax )
: PrefixHeader( rcSliceHeaderSyntax )
{
  xCopy( rcSliceHeaderSyntax );
}

SliceHeaderSyntax::SliceHeaderSyntax( const SequenceParameterSet& rcSPS,
                                      const PictureParameterSet&  rcPPS )
{
  xInit();
  ANOK( xInitParameterSets( rcSPS, rcPPS ) );
}

SliceHeaderSyntax::~SliceHeaderSyntax()
{
}

ErrVal
SliceHeaderSyntax::init( const SequenceParameterSet& rcSPS, const PictureParameterSet& rcPPS )
{
  xInit();
  RNOK( xInitParameterSets( rcSPS, rcPPS ) );
  return Err::m_nOK;
}

Void
SliceHeaderSyntax::copy( const SliceHeaderSyntax& rcSliceHeaderSyntax, Bool bInclusiveNalUnitHeader )
{
  PrefixHeader::copy( rcSliceHeaderSyntax, bInclusiveNalUnitHeader );
  xCopy( rcSliceHeaderSyntax );
}

ErrVal
SliceHeaderSyntax::writePrefix( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNalUnitHeader ) const
{
  NalUnitType eNalUnitType = getNalUnitType();
  const_cast<SliceHeaderSyntax&>(*this).setNalUnitType( NAL_UNIT_PREFIX );
  RNOK( PrefixHeader::write( rcWriteIf, bInclusiveNalUnitHeader ) );
  const_cast<SliceHeaderSyntax&>(*this).setNalUnitType( eNalUnitType );
  return Err::m_nOK;
}


ErrVal
SliceHeaderSyntax::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNalUnitHeader ) const 
{
  ROF( parameterSetsInitialized() );

  if( bInclusiveNalUnitHeader )
  {
    NalUnitHeader::write( rcWriteIf );
  }

  RNOK(         rcWriteIf.writeUvlc ( m_uiFirstMbInSlice,                             "SH: first_mb_in_slice" ) );
  RNOK(         rcWriteIf.writeUvlc ( m_eSliceType,                                   "SH: slice_type" ) );
  RNOK(         rcWriteIf.writeUvlc ( m_uiPicParameterSetId,                          "SH: pic_parameter_set_id" ) );
  RNOK(         rcWriteIf.writeCode ( m_uiFrameNum,
                                      getSPS().getLog2MaxFrameNum(),                  "SH: frame_num" ) );
  if( ! getSPS().getFrameMbsOnlyFlag() )
  {
    RNOK(       rcWriteIf.writeFlag ( m_bFieldPicFlag,                                "SH: field_pic_flag" ) );
    if( m_bFieldPicFlag )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bBottomFieldFlag,                             "SH: bottom_field_flag" ) );
    }
  }
  if( getIdrFlag() )
  {
    RNOK(       rcWriteIf.writeUvlc ( m_uiIdrPicId,                                   "SH: idr_pic_id" ) );
  }
  if( getSPS().getPicOrderCntType() == 0 )
  {
    RNOK(       rcWriteIf.writeCode ( m_uiPicOrderCntLsb,
                                      getSPS().getLog2MaxPicOrderCntLsb(),            "SH: pic_order_cnt_lsb" ) );
    if( getPPS().getPicOrderPresentFlag() && ! m_bFieldPicFlag )
    {
      RNOK(     rcWriteIf.writeSvlc ( m_iDeltaPicOrderCntBottom,                      "SH: delta_pic_order_cnt_bottom" ) );
    }
  }
  if( getSPS().getPicOrderCntType() == 1 && !getSPS().getDeltaPicOrderAlwaysZeroFlag() )
  {
    RNOK(       rcWriteIf.writeSvlc ( m_iDeltaPicOrderCnt0,                           "SH: delta_pic_order_cnt[0]" ) );
    if( getPPS().getPicOrderPresentFlag() && ! m_bFieldPicFlag )
    {
      RNOK(     rcWriteIf.writeSvlc ( m_iDeltaPicOrderCnt1,                           "SH: delta_pic_order_cnt[1]" ) );
    }
  }
  if( getPPS().getRedundantPicCntPresentFlag() )
  {
    RNOK(       rcWriteIf.writeUvlc ( m_uiRedundantPicCnt,                            "SH: redundant_pic_cnt" ) );
  }
  if( ! getQualityId() )
  {
    if( isBSlice() )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bDirectSpatialMvPredFlag,                     "SH: direct_spatial_mv_pred_flag" ) );
    }
    if( isInterSlice() )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bNumRefIdxActiveOverrideFlag,                 "SH: num_ref_idx_active_override_flag" ) );
      if( m_bNumRefIdxActiveOverrideFlag )
      {
        RNOK(   rcWriteIf.writeUvlc ( m_uiNumRefIdxL0ActiveMinus1,                    "SH: num_ref_idx_l0_active_minus1" ) );
        if( isBSlice() )
        {
          RNOK( rcWriteIf.writeUvlc ( m_uiNumRefIdxL1ActiveMinus1,                    "SH: num_ref_idx_l1_active_minus1" ) );
        }
      }
    }
    if( isInterSlice() )
    {
      RNOK(     m_cRefPicListReorderingL0.write( rcWriteIf ) );
    }
    if( isBSlice() )
    {
      RNOK(     m_cRefPicListReorderingL1.write( rcWriteIf ) );
    }
    if( ( getPPS().getWeightedPredFlag() && isPorSPSlice() ) || ( getPPS().getWeightedBiPredIdc() == 1 && isBSlice() ) )
    {
      if( ! getNoInterLayerPredFlag() ) 
      {
        RNOK(   rcWriteIf.writeFlag ( m_bBasePredWeightTableFlag,                     "SH: base_pred_weight_table_flag" ) );
      }
      if( getNoInterLayerPredFlag() || ! m_bBasePredWeightTableFlag )
      {
        RNOK(   rcWriteIf.writeUvlc ( m_uiLumaLog2WeightDenom,                        "PWT: luma_log_weight_denom" ) );
        RNOK(   rcWriteIf.writeUvlc ( m_uiChromaLog2WeightDenom,                      "PWT: chroma_log_weight_denom" ) );
        RNOK(   m_cPredWeightTableL0.write( rcWriteIf, m_uiNumRefIdxL0ActiveMinus1 ) );
        if( isBSlice() )
        {
          RNOK( m_cPredWeightTableL1.write( rcWriteIf, m_uiNumRefIdxL1ActiveMinus1 ) );
        }
      }
    }
    if( getNalRefIdc() )
    {
      if( getIdrFlag() )
      {
        RNOK(   rcWriteIf.writeFlag ( m_bNoOutputOfPriorPicsFlag,                     "DRPM: no_output_of_prior_pics_flag" ) );
        RNOK(   rcWriteIf.writeFlag ( m_bLongTermReferenceFlag,                       "DRPM: long_term_reference_flag" ) );
      }
      else
      {
        RNOK(   m_cDecRefPicMarking.write( rcWriteIf ) );
      }
      if( ! getSPS().getAVCHeaderRewriteFlag() && ! isH264AVCCompatible() )
      {
        RNOK(   rcWriteIf.writeFlag ( getStoreRefBasePicFlag(),                       "SH: store_ref_base_pic_flag" ) );
        if( ( getUseRefBasePicFlag() || getStoreRefBasePicFlag() ) && !getIdrFlag() )
        {
          RNOK( getDecRefBasePicMarking().write( rcWriteIf ) );
        }
      }
    }
  }
  if( getPPS().getEntropyCodingModeFlag() && !isIntraSlice() )
  {
    RNOK(       rcWriteIf.writeUvlc ( m_uiCabacInitIdc,                               "SH: cabac_init_idc" ) );
  }
  RNOK(         rcWriteIf.writeSvlc ( m_iSliceQpDelta,                                "SH: slice_qp_delta" ) );
  if( isSPSlice() || isSISlice() )
  {
    if( isSPSlice() )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bSPForSwitchFlag,                             "SH: sp_for_switch_flag" ) );
    }

⌨️ 快捷键说明

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