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

📄 sliceheaderbase.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    RNOK(       rcWriteIf.writeSvlc ( m_iSliceQsDelta,                                "SH: slice_qs_delta" ) );
  }
  if( getPPS().getDeblockingFilterParametersPresentFlag() )
  {
    RNOK(       m_cDeblockingFilterParameter.write( rcWriteIf ) );
  }
  if( getQualityId() == 0 &&
      getPPS().getNumSliceGroupsMinus1() > 0 &&
      getPPS().getSliceGroupMapType() >= 3 && getPPS().getSliceGroupMapType() <= 5 )
  {    
    RNOK(       rcWriteIf.writeCode ( m_uiSliceGroupChangeCycle,
                                      getPPS().getLog2MaxSliceGroupChangeCycle( getSPS().getMbInFrame() ),
                                                                                      "SH: slice_group_change_cycle" ) );
  }
  if( !getNoInterLayerPredFlag() && getQualityId() == 0 )
  {
    RNOK(       rcWriteIf.writeUvlc ( m_uiRefLayerDQId,                               "SH: ref_layer_dq_id" ) );
    if( getSPS().getInterlayerDeblockingPresent() )
    {
      RNOK(     m_cInterLayerDeblockingFilterParameter.write( rcWriteIf ) );
    }
    RNOK(       rcWriteIf.writeFlag ( m_bConstrainedIntraResamplingFlag,              "SH: constrained_intra_resampling_flag"));
    if( getSPS().getExtendedSpatialScalability() == ESS_PICT )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bRefLayerChromaPhaseXPlus1Flag,               "SH: ref_layer_chroma_phase_x_plus1_flag" ) );
      RNOK(     rcWriteIf.writeCode ( m_uiRefLayerChromaPhaseYPlus1, 2,               "SH: ref_layer_chroma_phase_y_plus1" ) );				
      RNOK(     rcWriteIf.writeSvlc ( m_iScaledRefLayerLeftOffset,                    "SH: scaled_ref_layer_left_offset" ) );
      RNOK(     rcWriteIf.writeSvlc ( m_iScaledRefLayerTopOffset,                     "SH: scaled_ref_layer_top_offset" ) );
      RNOK(     rcWriteIf.writeSvlc ( m_iScaledRefLayerRightOffset,                   "SH: scaled_ref_layer_right_offset" ) );
      RNOK(     rcWriteIf.writeSvlc ( m_iScaledRefLayerBottomOffset,                  "SH: scaled_ref_layer_bottom_offset" ) );
    }
  }
  if( !getNoInterLayerPredFlag() )
  {
    RNOK(       rcWriteIf.writeFlag ( m_bSliceSkipFlag,                               "SH: slice_skip_flag" ) );
    if( m_bSliceSkipFlag )
    {
      RNOK(     rcWriteIf.writeUvlc ( m_uiNumMbsInSliceMinus1,                        "SH: num_mbs_in_slice_minus1" ) );
    }
    else
    {
      RNOK(     rcWriteIf.writeFlag ( m_bAdaptiveBaseModeFlag,                        "SH: adaptive_base_mode_flag" ) );
      if( !m_bAdaptiveBaseModeFlag ) 
      {
        RNOK(   rcWriteIf.writeFlag ( m_bDefaultBaseModeFlag,                         "SH: default_base_mode_flag" ) );
      }
      if( !m_bDefaultBaseModeFlag ) 
      {
        RNOK(   rcWriteIf.writeFlag ( m_bAdaptiveMotionPredictionFlag,                "SH: adaptive_motion_prediction_flag" ) );
        if( !m_bAdaptiveMotionPredictionFlag )
        {
          RNOK( rcWriteIf.writeFlag ( m_bDefaultMotionPredictionFlag,                 "SH: default_motion_prediction_flag" ) );
        }
      }
      RNOK(     rcWriteIf.writeFlag ( m_bAdaptiveResidualPredictionFlag,              "SH: adaptive_residual_prediction_flag" ) );
      if( !m_bAdaptiveResidualPredictionFlag )
      {
        RNOK(   rcWriteIf.writeFlag ( m_bDefaultResidualPredictionFlag,               "SH: default_residual_prediction_flag" ) );
      }
    }
    if( getSPS().getAVCAdaptiveRewriteFlag() )
    {
      RNOK(     rcWriteIf.writeFlag ( m_bTCoeffLevelPredictionFlag,                   "SH: tcoeff_level_prediction_flag" ) );	
    }
  }
  if( !getSPS().getAVCHeaderRewriteFlag() && ! isH264AVCCompatible() && ! m_bSliceSkipFlag ) 
  {
    UInt  uiScanIdxStart  = ( m_uiScanIdxStart == m_uiScanIdxStop ? 1 : m_uiScanIdxStart );
    UInt  uiScanIdxEnd    = ( m_uiScanIdxStart == m_uiScanIdxStop ? 0 : m_uiScanIdxStop - 1 );
    RNOK(       rcWriteIf.writeCode ( uiScanIdxStart, 4,                              "SH: scan_idx_start" ) );
    RNOK(       rcWriteIf.writeCode ( uiScanIdxEnd,   4,                              "SH: scan_idx_end" ) );
  }
  return Err::m_nOK;
}


ErrVal
SliceHeaderSyntax::read( ParameterSetMng& rcParameterSetMng, HeaderSymbolReadIf& rcReadIf, Bool bInclusiveNalUnitHeader )
{
  if( bInclusiveNalUnitHeader )
  {
    NalUnitHeader::read( rcReadIf );
  }

  RNOK(         rcReadIf.getUvlc ( m_uiFirstMbInSlice,                             "SH: first_mb_in_slice" ) );
  UInt uiSliceType;
  RNOK(         rcReadIf.getUvlc ( uiSliceType,                                    "SH: slice_type" ) );
  m_eSliceType = SliceType( uiSliceType );
  RNOK(         rcReadIf.getUvlc ( m_uiPicParameterSetId,                          "SH: pic_parameter_set_id" ) );
  RNOK( xInitParameterSets( rcParameterSetMng, m_uiPicParameterSetId, getNalUnitType() == NAL_UNIT_CODED_SLICE_SCALABLE ) );
  
  RNOK(         rcReadIf.getCode ( m_uiFrameNum,
                                   getSPS().getLog2MaxFrameNum(),                  "SH: frame_num" ) );
  if( ! getSPS().getFrameMbsOnlyFlag() )
  {
    RNOK(       rcReadIf.getFlag ( m_bFieldPicFlag,                                "SH: field_pic_flag" ) );
    if( m_bFieldPicFlag )
    {
      RNOK(     rcReadIf.getFlag ( m_bBottomFieldFlag,                             "SH: bottom_field_flag" ) );
    }
  }
  if( getIdrFlag() )
  {
    RNOK(       rcReadIf.getUvlc ( m_uiIdrPicId,                                   "SH: idr_pic_id" ) );
  }
  if( getSPS().getPicOrderCntType() == 0 )
  {
    RNOK(       rcReadIf.getCode ( m_uiPicOrderCntLsb,
                                   getSPS().getLog2MaxPicOrderCntLsb(),            "SH: pic_order_cnt_lsb" ) );
    if( getPPS().getPicOrderPresentFlag() && ! m_bFieldPicFlag )
    {
      RNOK(     rcReadIf.getSvlc ( m_iDeltaPicOrderCntBottom,                      "SH: delta_pic_order_cnt_bottom" ) );
    }
  }
  if( getSPS().getPicOrderCntType() == 1 && !getSPS().getDeltaPicOrderAlwaysZeroFlag() )
  {
    RNOK(       rcReadIf.getSvlc ( m_iDeltaPicOrderCnt0,                           "SH: delta_pic_order_cnt[0]" ) );
    if( getPPS().getPicOrderPresentFlag() && ! m_bFieldPicFlag )
    {
      RNOK(     rcReadIf.getSvlc ( m_iDeltaPicOrderCnt1,                           "SH: delta_pic_order_cnt[1]" ) );
    }
  }
  if( getPPS().getRedundantPicCntPresentFlag() )
  {
    RNOK(       rcReadIf.getUvlc ( m_uiRedundantPicCnt,                            "SH: redundant_pic_cnt" ) );
  }
  if( ! getQualityId() )
  {
    if( isBSlice() )
    {
      RNOK(     rcReadIf.getFlag ( m_bDirectSpatialMvPredFlag,                     "SH: direct_spatial_mv_pred_flag" ) );
    }
    if( isInterSlice() )
    {
      RNOK(     rcReadIf.getFlag ( m_bNumRefIdxActiveOverrideFlag,                 "SH: num_ref_idx_active_override_flag" ) );
      if( m_bNumRefIdxActiveOverrideFlag )
      {
        RNOK(   rcReadIf.getUvlc ( m_uiNumRefIdxL0ActiveMinus1,                    "SH: num_ref_idx_l0_active_minus1" ) );
        if( isBSlice() )
        {
          RNOK( rcReadIf.getUvlc ( m_uiNumRefIdxL1ActiveMinus1,                    "SH: num_ref_idx_l1_active_minus1" ) );
        }
      }
    }
    if( isInterSlice() )
    {
      RNOK(     m_cRefPicListReorderingL0.read( rcReadIf ) );
    }
    if( isBSlice() )
    {
      RNOK(     m_cRefPicListReorderingL1.read( rcReadIf ) );
    }
    if( ( getPPS().getWeightedPredFlag() && isPorSPSlice() ) || ( getPPS().getWeightedBiPredIdc() == 1 && isBSlice() ) )
    {
      if( ! getNoInterLayerPredFlag() ) 
      {
        RNOK(   rcReadIf.getFlag ( m_bBasePredWeightTableFlag,                     "SH: base_pred_weight_table_flag" ) );
      }
      if( getNoInterLayerPredFlag() || ! m_bBasePredWeightTableFlag )
      {
        RNOK(   rcReadIf.getUvlc ( m_uiLumaLog2WeightDenom,                        "PWT: luma_log_weight_denom" ) );
        RNOK(   rcReadIf.getUvlc ( m_uiChromaLog2WeightDenom,                      "PWT: chroma_log_weight_denom" ) );
        RNOK(   m_cPredWeightTableL0.read( rcReadIf, m_uiNumRefIdxL0ActiveMinus1, m_uiLumaLog2WeightDenom, m_uiChromaLog2WeightDenom ) );
        if( isBSlice() )
        {
          RNOK( m_cPredWeightTableL1.read( rcReadIf, m_uiNumRefIdxL1ActiveMinus1, m_uiLumaLog2WeightDenom, m_uiChromaLog2WeightDenom ) );
        }
      }
    }
    if( getNalRefIdc() )
    {
      if( getIdrFlag() )
      {
        RNOK(   rcReadIf.getFlag ( m_bNoOutputOfPriorPicsFlag,                     "DRPM: no_output_of_prior_pics_flag" ) );
        RNOK(   rcReadIf.getFlag ( m_bLongTermReferenceFlag,                       "DRPM: long_term_reference_flag" ) );
      }
      else
      {
        RNOK(   m_cDecRefPicMarking.read( rcReadIf ) );
      }
      if( ! getSPS().getAVCHeaderRewriteFlag() && ! isH264AVCCompatible() )
      {
        Bool bStoreRefBasePicFlag;
        RNOK(   rcReadIf.getFlag ( bStoreRefBasePicFlag,                           "SH: store_ref_base_pic_flag" ) );
        setStoreRefBasePicFlag( bStoreRefBasePicFlag );
        if( ( getUseRefBasePicFlag() || getStoreRefBasePicFlag() ) && !getIdrFlag() )
        {
          RNOK( getDecRefBasePicMarking().read( rcReadIf ) );
        }
      }
    }
  }
  if( getPPS().getEntropyCodingModeFlag() && !isIntraSlice() )
  {
    RNOK(       rcReadIf.getUvlc ( m_uiCabacInitIdc,                               "SH: cabac_init_idc" ) );
  }
  RNOK(         rcReadIf.getSvlc ( m_iSliceQpDelta,                                "SH: slice_qp_delta" ) );
  if( isSPSlice() || isSISlice() )
  {
    if( isSPSlice() )
    {
      RNOK(     rcReadIf.getFlag ( m_bSPForSwitchFlag,                             "SH: sp_for_switch_flag" ) );
    }
    RNOK(       rcReadIf.getSvlc ( m_iSliceQsDelta,                                "SH: slice_qs_delta" ) );
  }
  if( getPPS().getDeblockingFilterParametersPresentFlag() )
  {
    RNOK(       m_cDeblockingFilterParameter.read( rcReadIf, getNalUnitType() == NAL_UNIT_CODED_SLICE_SCALABLE ) );
  }
  if( getQualityId() == 0 &&
      getPPS().getNumSliceGroupsMinus1() > 0 &&
      getPPS().getSliceGroupMapType() >= 3 && getPPS().getSliceGroupMapType() <= 5 )
  {    
    RNOK(       rcReadIf.getCode ( m_uiSliceGroupChangeCycle,
                                   getPPS().getLog2MaxSliceGroupChangeCycle( getSPS().getMbInFrame() ),
                                                                                   "SH: slice_group_change_cycle" ) );
  }
  if( !getNoInterLayerPredFlag() && getQualityId() == 0 )
  {
    RNOK(       rcReadIf.getUvlc ( m_uiRefLayerDQId,                               "SH: ref_layer_dq_id" ) );
    if( getSPS().getInterlayerDeblockingPresent() )
    {
      RNOK(     m_cInterLayerDeblockingFilterParameter.read( rcReadIf, getNalUnitType() == NAL_UNIT_CODED_SLICE_SCALABLE ) );
    }
    RNOK(       rcReadIf.getFlag ( m_bConstrainedIntraResamplingFlag,              "SH: constrained_intra_resampling_flag"));
    if( getSPS().getExtendedSpatialScalability() == ESS_PICT )
    {
      RNOK(     rcReadIf.getFlag ( m_bRefLayerChromaPhaseXPlus1Flag,               "SH: ref_layer_chroma_phase_x_plus1_flag" ) );
      RNOK(     rcReadIf.getCode ( m_uiRefLayerChromaPhaseYPlus1, 2,               "SH: ref_layer_chroma_phase_y_plus1" ) );				
      RNOK(     rcReadIf.getSvlc ( m_iScaledRefLayerLeftOffset,                    "SH: scaled_ref_layer_left_offset" ) );
      RNOK(     rcReadIf.getSvlc ( m_iScaledRefLayerTopOffset,                     "SH: scaled_ref_layer_top_offset" ) );
      RNOK(     rcReadIf.getSvlc ( m_iScaledRefLayerRightOffset,                   "SH: scaled_ref_layer_right_offset" ) );
      RNOK(     rcReadIf.getSvlc ( m_iScaledRefLayerBottomOffset,                  "SH: scaled_ref_layer_bottom_offset" ) );
    }
  }
  else
  {
    if( getNoInterLayerPredFlag() )
    {
      m_uiRefLayerDQId  = MSYS_UINT_MAX;
    }
    else
    {
      m_uiRefLayerDQId  = ( getDependencyId() << 4 ) + getQualityId() - 1;
    }
  }
  if( !getNoInterLayerPredFlag() )
  {
    RNOK(       rcReadIf.getFlag ( m_bSliceSkipFlag,                               "SH: slice_skip_flag" ) );
    if( m_bSliceSkipFlag )
    {
      RNOK(     rcReadIf.getUvlc ( m_uiNumMbsInSliceMinus1,                        "SH: num_mbs_in_slice_minus1" ) );
    }
    else
    {
      RNOK(     rcReadIf.getFlag ( m_bAdaptiveBaseModeFlag,                        "SH: adaptive_base_mode_flag" ) );
      if( !m_bAdaptiveBaseModeFlag ) 
      {
        RNOK(   rcReadIf.getFlag ( m_bDefaultBaseModeFlag,                         "SH: default_base_mode_flag" ) );
      }
      if( !m_bDefaultBaseModeFlag ) 
      {
        RNOK(   rcReadIf.getFlag ( m_bAdaptiveMotionPredictionFlag,                "SH: adaptive_motion_prediction_flag" ) );
        if( !m_bAdaptiveMotionPredictionFlag )
        {
          RNOK( rcReadIf.getFlag ( m_bDefaultMotionPredictionFlag,                 "SH: default_motion_prediction_flag" ) );
        }
      }
      RNOK(     rcReadIf.getFlag ( m_bAdaptiveResidualPredictionFlag,              "SH: adaptive_residual_prediction_flag" ) );
      if( !m_bAdaptiveResidualPredictionFlag )
      {
        RNOK(   rcReadIf.getFlag ( m_bDefaultResidualPredictionFlag,               "SH: default_residual_prediction_flag" ) );
      }
    }
    if( getSPS().getAVCAdaptiveRewriteFlag() )
    {
      RNOK(     rcReadIf.getFlag ( m_bTCoeffLevelPredictionFlag,                   "SH: tcoeff_level_prediction_flag" ) );	
    }
  }
  if( !getSPS().getAVCHeaderRewriteFlag() && ! isH264AVCCompatible() && ! m_bSliceSkipFlag ) 
  {
    RNOK(       rcReadIf.getCode ( m_uiScanIdxStart, 4,                            "SH: scan_idx_start" ) );
    RNOK(       rcReadIf.getCode ( m_uiScanIdxStop,  4,                            "SH: scan_idx_end" ) );
    if( m_uiScanIdxStart > m_uiScanIdxStop )
    {
      m_uiScanIdxStart  = 0;
      m_uiScanIdxStop   = 0;
    }
    else
    {
      m_uiScanIdxStop++;
    }
  }
  return Err::m_nOK;
}


Void
SliceHeaderSyntax::xInit()
{
  m_uiFirstMbInSlice                      = 0;
  m_eSliceType                            = I_SLICE;
  m_uiPicParameterSetId                   = 0;
  m_uiColourPlaneId                       = 0;
  m_uiFrameNum                            = 0;
  m_bFieldPicFlag                         = false;
  m_bBottomFieldFlag                      = false;
  m_uiIdrPicId                            = 0;
  m_uiPicOrderCntLsb                      = 0;
  m_iDeltaPicOrderCntBottom               = 0;
  m_iDeltaPicOrderCnt0                    = 0;
  m_iDeltaPicOrderCnt1                    = 0;
  m_uiRedundantPicCnt                     = 0;
  m_bDirectSpatialMvPredFlag              = true;
  m_bNumRefIdxActiveOverrideFlag          = false;
  m_uiNumRefIdxL0ActiveMinus1             = 0;
  m_uiNumRefIdxL1ActiveMinus1             = 0;
  m_cRefPicListReorderingL0               .clear( false );
  m_cRefPicListReorderingL1               .clear( false );
  m_bBasePredWeightTableFlag              = false;
  m_uiLumaLog2WeightDenom                 = 0;
  m_uiChromaLog2WeightDenom               = 0;
  m_cPredWeightTableL0                    .clear();
  m_cPredWeightTableL1                    .clear();
  m_bNoOutputOfPriorPicsFlag              = true;
  m_bLongTermReferenceFlag                = false;
  m_cDecRefPicMarking                     .clear( false, false );
  m_uiCabacInitIdc                        = 0;
  m_iSliceQpDelta                         = 0;
  m_bSPForSwitchFlag                      = false;
  m_iSliceQsDelta                         = 0;
  m_cDeblockingFilterParameter            .clear( false );
  m_uiSliceGroupChangeCycle               = 0;
  m_uiRefLayerDQId                        = MSYS_UINT_MAX;
  m_cInterLayerDeblockingFilterParameter  .clear( true );
  m_bConstrainedIntraResamplingFlag       = false;
  m_bRefLayerChromaPhaseXPlus1Flag        = false;
  m_uiRefLayerChromaPhaseYPlus1           = 0;
  m_iScaledRefLayerLeftOffset             = 0;
  m_iScaledRefLayerTopOffset              = 0;
  m_iScaledRefLayerRightOffset            = 0;
  m_iScaledRefLayerBottomOffset           = 0;
  m_bSliceSkipFlag                        = false;
  m_uiNumMbsInSliceMinus1                 = 0;
  m_bAdaptiveBaseModeFlag                 = false;
  m_bDefaultBaseModeFlag                  = false;
  m_bAdaptiveMotionPredictionFlag         = false;
  m_bDefaultMotionPredictionFlag          = false;
  m_bAdaptiveResidualPredictionFlag       = false;
  m_bDefaultResidualPredictionFlag        = false;
  m_bTCoeffLevelPredictionFlag            = false;
  m_uiScanIdxStart                        = 0;
  m_uiScanIdxStop                         = 16;
  m_pcSPS                                 = 0;
  m_pcPPS                                 = 0;
  m_acScalingMatrix                       .setAll( 0 );
}

Void
SliceHeaderSyntax::xCopy( const SliceHeaderSyntax&  rcSliceHeaderSyntax )
{
  m_uiFirstMbInSlice                      = rcSliceHeaderSyntax.m_uiFirstMbInSlice;
  m_eSliceType                            = rcSliceHeaderSyntax.m_eSliceType;
  m_uiPicParameterSetId 

⌨️ 快捷键说明

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