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

📄 sliceheaderbase.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    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 + -