📄 sliceheaderbase.cpp
字号:
RNOK( get( uiIndex ).read( rcReadIf, uiLumaLog2WeightDenom, uiChromaLog2WeightDenom ) );
}
return Err::m_nOK;
}
DBFilterParameter::DBFilterParameter( Bool bInterLayerParameters )
: m_bInterLayerParameters ( bInterLayerParameters )
, m_uiDisableDeblockingFilterIdc( false )
, m_iSliceAlphaC0OffsetDiv2 ( 0 )
, m_iSliceBetaOffsetDiv2 ( 0 )
{
}
DBFilterParameter::DBFilterParameter( const DBFilterParameter& rcDBFilterParameter )
: m_bInterLayerParameters ( rcDBFilterParameter.m_bInterLayerParameters )
, m_uiDisableDeblockingFilterIdc( rcDBFilterParameter.m_uiDisableDeblockingFilterIdc )
, m_iSliceAlphaC0OffsetDiv2 ( rcDBFilterParameter.m_iSliceAlphaC0OffsetDiv2 )
, m_iSliceBetaOffsetDiv2 ( rcDBFilterParameter.m_iSliceBetaOffsetDiv2 )
{
}
DBFilterParameter::~DBFilterParameter()
{
}
Void
DBFilterParameter::clear( Bool bInterLayerParameters )
{
m_bInterLayerParameters = bInterLayerParameters;
m_uiDisableDeblockingFilterIdc = false;
m_iSliceAlphaC0OffsetDiv2 = 0;
m_iSliceBetaOffsetDiv2 = 0;
}
Void
DBFilterParameter::copy( const DBFilterParameter& rcDBFilterParameter )
{
m_bInterLayerParameters = rcDBFilterParameter.m_bInterLayerParameters;
m_uiDisableDeblockingFilterIdc = rcDBFilterParameter.m_uiDisableDeblockingFilterIdc;
m_iSliceAlphaC0OffsetDiv2 = rcDBFilterParameter.m_iSliceAlphaC0OffsetDiv2;
m_iSliceBetaOffsetDiv2 = rcDBFilterParameter.m_iSliceBetaOffsetDiv2;
}
ErrVal
DBFilterParameter::write( HeaderSymbolWriteIf& rcWriteIf ) const
{
if( ! m_bInterLayerParameters )
{
RNOK ( rcWriteIf.writeUvlc( m_uiDisableDeblockingFilterIdc, "SH: disable_deblocking_filter_idc" ) );
if( m_uiDisableDeblockingFilterIdc != 1 )
{
RNOK( rcWriteIf.writeSvlc( m_iSliceAlphaC0OffsetDiv2, "SH: slice_alpha_c0_offset_div2" ) );
RNOK( rcWriteIf.writeSvlc( m_iSliceBetaOffsetDiv2, "SH: slice_beta_offset_div2" ) );
}
}
else
{
RNOK ( rcWriteIf.writeUvlc( m_uiDisableDeblockingFilterIdc, "SH: disable_inter_layer_deblocking_filter_idc" ) );
if( m_uiDisableDeblockingFilterIdc != 1 )
{
RNOK( rcWriteIf.writeSvlc( m_iSliceAlphaC0OffsetDiv2, "SH: inter_layer_slice_alpha_c0_offset_div2" ) );
RNOK( rcWriteIf.writeSvlc( m_iSliceBetaOffsetDiv2, "SH: inter_layer_slice_beta_offset_div2" ) );
}
}
return Err::m_nOK;
}
ErrVal
DBFilterParameter::read( HeaderSymbolReadIf& rcReadIf, Bool bSVCNalUnit )
{
if( ! m_bInterLayerParameters )
{
RNOK ( rcReadIf.getUvlc( m_uiDisableDeblockingFilterIdc, "SH: disable_deblocking_filter_idc" ) );
if( m_uiDisableDeblockingFilterIdc != 1 )
{
RNOK( rcReadIf.getSvlc( m_iSliceAlphaC0OffsetDiv2, "SH: slice_alpha_c0_offset_div2" ) );
RNOK( rcReadIf.getSvlc( m_iSliceBetaOffsetDiv2, "SH: slice_beta_offset_div2" ) );
}
}
else
{
RNOK ( rcReadIf.getUvlc( m_uiDisableDeblockingFilterIdc, "SH: disable_inter_layer_deblocking_filter_idc" ) );
if( m_uiDisableDeblockingFilterIdc != 1 )
{
RNOK( rcReadIf.getSvlc( m_iSliceAlphaC0OffsetDiv2, "SH: inter_layer_slice_alpha_c0_offset_div2" ) );
RNOK( rcReadIf.getSvlc( m_iSliceBetaOffsetDiv2, "SH: inter_layer_slice_beta_offset_div2" ) );
}
}
ROT( bSVCNalUnit && m_uiDisableDeblockingFilterIdc > 6 );
ROT( !bSVCNalUnit && m_uiDisableDeblockingFilterIdc > 2 );
ROT( m_iSliceAlphaC0OffsetDiv2 < -6 || m_iSliceAlphaC0OffsetDiv2 > 6 );
ROT( m_iSliceBetaOffsetDiv2 < -6 || m_iSliceBetaOffsetDiv2 > 6 );
return Err::m_nOK;
}
NalUnitHeader::NalUnitHeader()
: m_bForbiddenZeroBit ( false )
, m_eNalRefIdc ( NAL_REF_IDC_PRIORITY_LOWEST )
, m_eNalUnitType ( NAL_UNIT_UNSPECIFIED_0 )
, m_bReservedOneBit ( true )
, m_bIdrFlag ( false )
, m_uiPriorityId ( 0 )
, m_bNoInterLayerPredFlag ( true )
, m_uiDependencyId ( 0 )
, m_uiQualityId ( 0 )
, m_uiTemporalId ( 0 )
, m_bUseRefBasePicFlag ( false )
, m_bDiscardableFlag ( false )
, m_bOutputFlag ( true )
, m_uiReservedThree2Bits ( 3 )
{
}
NalUnitHeader::NalUnitHeader( const NalUnitHeader& rcNalUnitHeader )
: m_bForbiddenZeroBit ( rcNalUnitHeader.m_bForbiddenZeroBit )
, m_eNalRefIdc ( rcNalUnitHeader.m_eNalRefIdc )
, m_eNalUnitType ( rcNalUnitHeader.m_eNalUnitType )
, m_bReservedOneBit ( rcNalUnitHeader.m_bReservedOneBit )
, m_bIdrFlag ( rcNalUnitHeader.m_bIdrFlag )
, m_uiPriorityId ( rcNalUnitHeader.m_uiPriorityId )
, m_bNoInterLayerPredFlag ( rcNalUnitHeader.m_bNoInterLayerPredFlag )
, m_uiDependencyId ( rcNalUnitHeader.m_uiDependencyId )
, m_uiQualityId ( rcNalUnitHeader.m_uiQualityId )
, m_uiTemporalId ( rcNalUnitHeader.m_uiTemporalId )
, m_bUseRefBasePicFlag ( rcNalUnitHeader.m_bUseRefBasePicFlag )
, m_bDiscardableFlag ( rcNalUnitHeader.m_bDiscardableFlag )
, m_bOutputFlag ( rcNalUnitHeader.m_bOutputFlag )
, m_uiReservedThree2Bits ( rcNalUnitHeader.m_uiReservedThree2Bits )
{
}
NalUnitHeader::~NalUnitHeader()
{
}
Void
NalUnitHeader::copy( const NalUnitHeader& rcNalUnitHeader, Bool bInclusiveSVCExtension )
{
m_bForbiddenZeroBit = rcNalUnitHeader.m_bForbiddenZeroBit;
m_eNalRefIdc = rcNalUnitHeader.m_eNalRefIdc;
m_eNalUnitType = rcNalUnitHeader.m_eNalUnitType;
ROFVS( bInclusiveSVCExtension );
m_bReservedOneBit = rcNalUnitHeader.m_bReservedOneBit;
m_bIdrFlag = rcNalUnitHeader.m_bIdrFlag;
m_uiPriorityId = rcNalUnitHeader.m_uiPriorityId;
m_bNoInterLayerPredFlag = rcNalUnitHeader.m_bNoInterLayerPredFlag;
m_uiDependencyId = rcNalUnitHeader.m_uiDependencyId;
m_uiQualityId = rcNalUnitHeader.m_uiQualityId;
m_uiTemporalId = rcNalUnitHeader.m_uiTemporalId;
m_bUseRefBasePicFlag = rcNalUnitHeader.m_bUseRefBasePicFlag;
m_bDiscardableFlag = rcNalUnitHeader.m_bDiscardableFlag;
m_bOutputFlag = rcNalUnitHeader.m_bOutputFlag;
m_uiReservedThree2Bits = rcNalUnitHeader.m_uiReservedThree2Bits;
}
ErrVal
NalUnitHeader::write( HeaderSymbolWriteIf& rcWriteIf ) const
{
RNOK( rcWriteIf.writeFlag( m_bForbiddenZeroBit, "NAL unit header: forbidden_zero_bit" ) );
RNOK( rcWriteIf.writeCode( m_eNalRefIdc, 2, "NAL unit header: nal_ref_idc" ) );
RNOK( rcWriteIf.writeCode( m_eNalUnitType, 5, "NAL unit header: nal_unit_type" ) );
if( m_eNalUnitType == NAL_UNIT_PREFIX || m_eNalUnitType == NAL_UNIT_CODED_SLICE_SCALABLE )
{
RNOK( rcWriteIf.writeFlag( m_bReservedOneBit, "NAL unit header: reserved_one_bit" ) );
RNOK( rcWriteIf.writeFlag( m_bIdrFlag, "NAL unit header: idr_flag" ) );
RNOK( rcWriteIf.writeCode( m_uiPriorityId, 6, "NAL unit header: priority_id" ) );
RNOK( rcWriteIf.writeFlag( m_bNoInterLayerPredFlag, "NAL unit header: no_inter_layer_pred_flag" ) );
RNOK( rcWriteIf.writeCode( m_uiDependencyId, 3, "NAL unit header: dependency_id" ) );
RNOK( rcWriteIf.writeCode( m_uiQualityId, 4, "NAL unit header: quality_id" ) );
RNOK( rcWriteIf.writeCode( m_uiTemporalId, 3, "NAL unit header: temporal_id" ) );
RNOK( rcWriteIf.writeFlag( m_bUseRefBasePicFlag, "NAL unit header: use_ref_base_pic_flag" ) );
RNOK( rcWriteIf.writeFlag( m_bDiscardableFlag, "NAL unit header: discardable_flag" ) );
RNOK( rcWriteIf.writeFlag( m_bOutputFlag, "NAL unit header: output_flag" ) );
RNOK( rcWriteIf.writeCode( m_uiReservedThree2Bits, 2, "NAL unit header: reserved_three_2bits" ) );
}
return Err::m_nOK;
}
ErrVal
NalUnitHeader::read( HeaderSymbolReadIf& rcReadIf )
{
UInt uiNalRefIdc = 0;
UInt uiNalUnitType = 0;
RNOK( rcReadIf.getFlag( m_bForbiddenZeroBit, "NAL unit header: forbidden_zero_bit" ) );
RNOK( rcReadIf.getCode( uiNalRefIdc, 2, "NAL unit header: nal_ref_idc" ) );
RNOK( rcReadIf.getCode( uiNalUnitType, 5, "NAL unit header: nal_unit_type" ) );
m_eNalRefIdc = NalRefIdc ( uiNalRefIdc );
m_eNalUnitType = NalUnitType ( uiNalUnitType );
if( m_eNalUnitType == NAL_UNIT_PREFIX || m_eNalUnitType == NAL_UNIT_CODED_SLICE_SCALABLE )
{
RNOK( rcReadIf.getFlag( m_bReservedOneBit, "NAL unit header: reserved_one_bit" ) );
RNOK( rcReadIf.getFlag( m_bIdrFlag, "NAL unit header: idr_flag" ) );
RNOK( rcReadIf.getCode( m_uiPriorityId, 6, "NAL unit header: priority_id" ) );
RNOK( rcReadIf.getFlag( m_bNoInterLayerPredFlag, "NAL unit header: no_inter_layer_pred_flag" ) );
RNOK( rcReadIf.getCode( m_uiDependencyId, 3, "NAL unit header: dependency_id" ) );
RNOK( rcReadIf.getCode( m_uiQualityId, 4, "NAL unit header: quality_id" ) );
RNOK( rcReadIf.getCode( m_uiTemporalId, 3, "NAL unit header: temporal_id" ) );
RNOK( rcReadIf.getFlag( m_bUseRefBasePicFlag, "NAL unit header: use_ref_base_pic_flag" ) );
RNOK( rcReadIf.getFlag( m_bDiscardableFlag, "NAL unit header: discardable_flag" ) );
RNOK( rcReadIf.getFlag( m_bOutputFlag, "NAL unit header: output_flag" ) );
RNOK( rcReadIf.getCode( m_uiReservedThree2Bits, 2, "NAL unit header: reserved_three_2bits" ) );
}
else // set NAL unit header SVC extension to default values
{
m_bIdrFlag = ( m_eNalUnitType == NAL_UNIT_CODED_SLICE_IDR );
m_uiPriorityId = 0;
m_bNoInterLayerPredFlag = true;
m_uiDependencyId = 0;
m_uiQualityId = 0;
m_uiTemporalId = 0;
m_bUseRefBasePicFlag = false;
m_bDiscardableFlag = false;
m_bOutputFlag = ( m_eNalUnitType == NAL_UNIT_CODED_SLICE_IDR ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE_DATAPART_A ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE_DATAPART_B ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE_DATAPART_C );
}
//----- check forbidden and reserved bits -----
if( m_bForbiddenZeroBit || !m_bReservedOneBit || m_uiReservedThree2Bits != 3 )
{
m_bForbiddenZeroBit = false;
m_bReservedOneBit = true;
m_uiReservedThree2Bits = 3;
ROT( true );
}
return Err::m_nOK;
}
AUDelimiter::AUDelimiter()
: m_uiPrimaryPicType ( 0 )
{
}
AUDelimiter::AUDelimiter( const NalUnitHeader& rcNalUnitHeader )
: NalUnitHeader ( rcNalUnitHeader )
, m_uiPrimaryPicType ( 0 )
{
}
AUDelimiter::AUDelimiter( const AUDelimiter& rcAUDelimiter )
: NalUnitHeader ( rcAUDelimiter )
, m_uiPrimaryPicType ( rcAUDelimiter.m_uiPrimaryPicType )
{
}
AUDelimiter::~AUDelimiter()
{
}
Void
AUDelimiter::copy( const AUDelimiter& rcAUDelimiter, Bool bInclusiveNALUnitHeader )
{
if( bInclusiveNALUnitHeader )
{
NalUnitHeader::copy( rcAUDelimiter );
}
m_uiPrimaryPicType = rcAUDelimiter.m_uiPrimaryPicType;
}
ErrVal
AUDelimiter::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNALUnitHeader ) const
{
if( bInclusiveNALUnitHeader )
{
RNOK( NalUnitHeader::write( rcWriteIf ) );
}
RNOK( rcWriteIf.writeCode( m_uiPrimaryPicType, 3, "primary_pic_type" ) );
return Err::m_nOK;
}
ErrVal
AUDelimiter::read( HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNALUnitHeader )
{
if( bInclusiveNALUnitHeader )
{
RNOK( NalUnitHeader::read( rcReadIf ) );
}
RNOK( rcReadIf.getCode( m_uiPrimaryPicType, 3, "primary_pic_type" ) );
return Err::m_nOK;
}
EndOfSequence::EndOfSequence()
{
}
EndOfSequence::EndOfSequence( const NalUnitHeader& rcNalUnitHeader )
: NalUnitHeader( rcNalUnitHeader )
{
}
EndOfSequence::EndOfSequence( const EndOfSequence& rcEndOfSequence )
: NalUnitHeader( rcEndOfSequence )
{
}
EndOfSequence::~EndOfSequence()
{
}
Void
EndOfSequence::copy( const EndOfSequence& rcEndOfSequence, Bool bInclusiveNALUnitHeader )
{
if( bInclusiveNALUnitHeader )
{
NalUnitHeader::copy( rcEndOfSequence );
}
}
ErrVal
EndOfSequence::write( HeaderSymbolWriteIf& rcWriteIf, Bool bInclusiveNALUnitHeader ) const
{
if( bInclusiveNALUnitHeader )
{
RNOK( NalUnitHeader::write( rcWriteIf ) );
}
return Err::m_nOK;
}
ErrVal
EndOfSequence::read( HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNALUnitHeader )
{
if( bInclusiveNALUnitHeader )
{
RNOK( NalUnitHeader::read( rcReadIf ) );
}
return Err::m_nOK;
}
EndOfStream::EndOfStream()
{
}
EndOfStream::EndOfStream( const NalUnitHeader& rcNalUnitHeader )
: NalUnitHeader( rcNalUnitHeader )
{
}
EndOfStream::EndOfStream( const EndOfStream& rcEndOfStream )
: NalUnitHeader( rcEndOfStream )
{
}
EndOfStream::~EndOfStream()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -