📄 sliceheaderbase.cpp
字号:
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 + -