📄 sliceheaderbase.h
字号:
ErrVal write( HeaderSymbolWriteIf* pcWriteIf, UInt uiNumber ) const;
ErrVal read ( HeaderSymbolReadIf* pcReadIf, UInt uiNumber );
//TMM_WP
ErrVal setPredWeightsAndFlags( const Int iLumaScale,
const Int iChromaScale,
const Double(*pafWeight)[3],
Double fDiscardThr );
ErrVal setOffsets( const Double(*pafOffsets)[3] );
//TMM_WP
ErrVal copy ( const PredWeightTable& rcPredWeightTable );
};
class H264AVCCOMMONLIB_API DeblockingFilterParameter
{
public:
DeblockingFilterParameter( UInt uiDisableDeblockingFilterIdc = 0,
Int iSliceAlphaC0Offset = 0,
Int iSliceBetaOffset = 0 )
: m_uiDisableDeblockingFilterIdc( uiDisableDeblockingFilterIdc )
, m_iSliceAlphaC0Offset ( iSliceAlphaC0Offset )
, m_iSliceBetaOffset ( iSliceBetaOffset )
{
}
ErrVal write( HeaderSymbolWriteIf* pcWriteIf, bool enhancedLayerFlag ) const; //V032, added enhanced layer indicator
ErrVal read ( HeaderSymbolReadIf* pcReadIf, bool enhancedLayerFlag ); //V032, added enhanced layer indicator
DeblockingFilterParameter* getCopy() const
{
return new DeblockingFilterParameter( m_uiDisableDeblockingFilterIdc, m_iSliceAlphaC0Offset, m_iSliceBetaOffset );
}
Void setDisableDeblockingFilterIdc( UInt uiDisableDeblockingFilterIdc ) { m_uiDisableDeblockingFilterIdc = uiDisableDeblockingFilterIdc; }
Void setSliceAlphaC0Offset ( Int iSliceAlphaC0Offset ) { AOT_DBG( 1 & iSliceAlphaC0Offset); m_iSliceAlphaC0Offset = iSliceAlphaC0Offset; }
Void setSliceBetaOffset ( Int iSliceBetaOffset ) { AOT_DBG( 1 & iSliceBetaOffset); m_iSliceBetaOffset = iSliceBetaOffset; }
UInt getDisableDeblockingFilterIdc() const { return m_uiDisableDeblockingFilterIdc;}
Int getSliceAlphaC0Offset() const { return m_iSliceAlphaC0Offset;}
Int getSliceBetaOffset() const { return m_iSliceBetaOffset;}
private:
UInt m_uiDisableDeblockingFilterIdc;
Int m_iSliceAlphaC0Offset;
Int m_iSliceBetaOffset;
};
class H264AVCCOMMONLIB_API DeblockingFilterParameterScalable
{
public:
DeblockingFilterParameterScalable( )
{
}
DeblockingFilterParameterScalable( const DeblockingFilterParameter& cDeblockingFilterParameter,
const DeblockingFilterParameter& cInterlayerDeblockingFilterParameter)
: m_cDeblockingFilterParameter ( cDeblockingFilterParameter )
, m_cInterlayerDeblockingFilterParameter ( cInterlayerDeblockingFilterParameter )
{
}
DeblockingFilterParameterScalable* getCopy() const
{
return new DeblockingFilterParameterScalable( m_cDeblockingFilterParameter, m_cInterlayerDeblockingFilterParameter );
}
// Access to the parameters
DeblockingFilterParameter& getDeblockingFilterParameter () {return m_cDeblockingFilterParameter;}
const DeblockingFilterParameter& getDeblockingFilterParameter () const {return m_cDeblockingFilterParameter;}
DeblockingFilterParameter& getInterlayerDeblockingFilterParameter () {return m_cInterlayerDeblockingFilterParameter;}
const DeblockingFilterParameter& getInterlayerDeblockingFilterParameter () const {return m_cInterlayerDeblockingFilterParameter;}
// Access to the "normal" parameters
UInt getDisableDeblockingFilterIdc() const { return getDeblockingFilterParameter().getDisableDeblockingFilterIdc();}
Int getSliceAlphaC0Offset() const { return getDeblockingFilterParameter().getSliceAlphaC0Offset();}
Int getSliceBetaOffset() const { return getDeblockingFilterParameter().getSliceBetaOffset();}
private:
DeblockingFilterParameter m_cDeblockingFilterParameter;
DeblockingFilterParameter m_cInterlayerDeblockingFilterParameter;
};
protected:
SliceHeaderBase ( const SequenceParameterSet& rcSPS,
const PictureParameterSet& rcPPS );
virtual ~SliceHeaderBase();
public:
SliceHeaderBase& operator = ( const SliceHeaderBase& rcSHB );
ErrVal read ( HeaderSymbolReadIf* pcReadIf );
ErrVal write ( HeaderSymbolWriteIf* pcWriteIf ) const;
//===== get properties =====
Bool isH264AVCCompatible () const { return ( m_eNalUnitType == NAL_UNIT_CODED_SLICE ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE_IDR ); }
Bool isIdrNalUnit () const { return ( m_eNalUnitType == NAL_UNIT_CODED_SLICE_IDR ||
m_eNalUnitType == NAL_UNIT_CODED_SLICE_IDR_SCALABLE ); }
Int getPicQp () const { return m_rcPPS.getPicInitQp() + getSliceQpDelta(); }
UInt getMbInPic () const { const UInt uiMbInPic = m_rcSPS.getMbInFrame(); return getFieldPicFlag() ? uiMbInPic/2 : uiMbInPic; }
//===== get parameter sets =====
const PictureParameterSet& getPPS () const { return m_rcPPS; }
const SequenceParameterSet& getSPS () const { return m_rcSPS; }
//===== get parameters =====
NalRefIdc getNalRefIdc () const { return m_eNalRefIdc; }
Bool isNalRefIdc () const { return m_eNalRefIdc != NAL_REF_IDC_PRIORITY_LOWEST; }
NalUnitType getNalUnitType () const { return m_eNalUnitType; }
UInt getLayerId () const { return m_uiLayerId; }
UInt getTemporalLevel () const { return m_uiTemporalLevel; }
UInt getQualityLevel () const { return m_uiQualityLevel; }
UInt getFirstMbInSlice () const { return m_uiFirstMbInSlice; }
SliceType getSliceType () const { return m_eSliceType; }
UInt getPicParameterSetId () const { return m_uiPicParameterSetId; }
UInt getFrameNum () const { return m_uiFrameNum; }
UInt getNumMbsInSlice () const { return m_uiNumMbsInSlice; }
Bool getFgsComponentSep () const { return m_bFgsComponentSep; }
UInt getIdrPicId () const { return m_uiIdrPicId; }
Bool getBasePredWeightTableFlag () const { return m_bBasePredWeightTableFlag; }
UInt getLumaLog2WeightDenom () const { return m_uiLumaLog2WeightDenom; }
UInt getChromaLog2WeightDenom () const { return m_uiChromaLog2WeightDenom; }
const PredWeightTable& getPredWeightTable (ListIdx e) const { return m_acPredWeightTable[e]; }
PredWeightTable& getPredWeightTable (ListIdx e) { return m_acPredWeightTable[e]; }
//TMM_INTERLACE{
const PredWeight& getPredWeight (ListIdx e,
UInt ui,
Bool bFieldFlag) const { return ( (bFieldFlag) ? (m_acPredWeightTable[e].get((ui-1)/2)) : (m_acPredWeightTable[e].get(ui-1)) ); }
PredWeight& getPredWeight (ListIdx e,
UInt ui,
Bool bFieldFlag) { return ( (bFieldFlag) ? (m_acPredWeightTable[e].get((ui-1)/2)) : (m_acPredWeightTable[e].get(ui-1)) ); }
//TMM_INTERLACE}
//TMM_WP
ErrVal copyWeightedPred(PredWeightTable& pcPredWeightTable, UInt uiLumaLogWeightDenom,
UInt uiChromaWeightDenom, ListIdx eListIdx, Bool bDecoder);
//TMM_WP
Bool getAVCRewriteFlag () const { return m_bAVCRewriteFlag; }
Bool getDirectSpatialMvPredFlag () const { return m_bDirectSpatialMvPredFlag; }
Bool getUseBasePredictionFlag () const { return m_bUseBasePredictionFlag; }
Bool getStoreBaseRepresentationFlag() const { return m_bStoreBaseRepresentationFlag; }
UInt getBaseLayerId () const { if (m_bLayerBaseFlag) return MSYS_UINT_MAX;
else return m_uiBaseLayerId; }
UInt getBaseQualityLevel () const { return m_uiBaseQualityLevel; }
Bool getAdaptivePredictionFlag () const { return m_bAdaptivePredictionFlag; }
//JVT-U160 LMI {
Bool getAdaptiveResPredictionFlag () const { return m_bAdaptiveResPredictionFlag; }
Bool getAdaptiveMotPredictionFlag () const { return m_bAdaptiveMotPredictionFlag; }
Bool getDefaultBaseModeFlag () const { return m_bDefaultBaseModeFlag; }
Bool getDefaultMotPredictionFlag () const { return m_bDefaultMotPredictionFlag; }
//JVT-U160 LMI }
Bool getNumRefIdxActiveOverrideFlag() const { return m_bNumRefIdxActiveOverrideFlag; }
UInt getNumRefIdxActive ( ListIdx e ) const { return m_auiNumRefIdxActive[e]; }
const RplrBuffer& getRplrBuffer ( ListIdx e ) const { return m_acRplrBuffer [e]; }
RplrBuffer& getRplrBuffer ( ListIdx e ) { return m_acRplrBuffer [e]; }
UInt getNumRefIdxUpdate ( UInt ui,
ListIdx e ) const { return m_aauiNumRefIdxActiveUpdate[ui][e]; }
Bool getNoOutputOfPriorPicsFlag () const { return m_bNoOutputOfPriorPicsFlag; }
Bool getAdaptiveRefPicBufferingFlag() const { return m_bAdaptiveRefPicBufferingModeFlag; }
Bool getAdaptiveRefPicMarkingFlag () const { return m_bAdaptiveRefPicMarkingModeFlag; } //JVT-S036 lsj
const MmcoBuffer& getMmcoBuffer () const { return m_cMmmcoBuffer; }
MmcoBuffer& getMmcoBuffer () { return m_cMmmcoBuffer; }
//JVT-S036 lsj start
const MmcoBuffer& getMmcoBaseBuffer () const { return m_cMmmcoBaseBuffer; }
MmcoBuffer& getMmcoBaseBuffer () { return m_cMmmcoBaseBuffer; }
//JVT-S036 lsj end
//TMM_EC {{
Void setDefualtMmcoBuffer(UInt uiDecompositionStages, Bool Number2)
{
m_cMmmcoBuffer.clear();
UInt uiCount=0;
UInt uiGopSize = 1 << uiDecompositionStages;
// TMM_EC_FIX
if(uiGopSize==1)
{
m_cMmmcoBuffer.set(uiCount++, Mmco(MMCO_SHORT_TERM_UNUSED,1));
m_cMmmcoBuffer.set(uiCount++,Mmco(MMCO_END));
return ;
}
for( Int iIndex=uiGopSize/2-2;iIndex>=0;iIndex-- )
{
m_cMmmcoBuffer.set( uiCount++, Mmco(MMCO_SHORT_TERM_UNUSED,iIndex));
}
if(!Number2)m_cMmmcoBuffer.set(uiCount++,Mmco(MMCO_SHORT_TERM_UNUSED,uiGopSize/2));
else m_cMmmcoBuffer.set(uiCount++,Mmco(MMCO_SHORT_TERM_UNUSED,uiGopSize-1));
m_cMmmcoBuffer.set(uiCount++,Mmco(MMCO_END));
return ;
}
UInt getCabacInitIdc () const { return m_uiCabacInitIdc; }
Int getSliceQpDelta () const { return m_iSliceQpDelta; }
const DeblockingFilterParameterScalable& getDeblockingFilterParameterScalable () const { return m_cDeblockingFilterParameterScalable; }
DeblockingFilterParameterScalable& getDeblockingFilterParameterScalable () { return m_cDeblockingFilterParameterScalable; }
UInt getLog2MaxSliceGroupChangeCycle(UInt uiPicSizeInMapUnits) const {return UInt(ceil( (log ( uiPicSizeInMapUnits*(getPPS().getSliceGroupChangeRateMinus1()+1.)+ 1. ))/log(2.) ));};
UInt getSliceGroupChangeCycle() const {return m_uiSliceGroupChangeCycle;}
FMO* getFMO() const { return m_pcFMO;}
Int getNumMbInSlice();
UInt getBaseWeightZeroBaseBlock() { return m_uiBaseWeightZeroBaseBlock; }
UInt getBaseWeightZeroBaseCoeff() { return m_uiBaseWeightZeroBaseCoeff; }
Void setBaseWeightZeroBaseBlock(UInt ui)
{
AOT( ui > AR_FGS_MAX_BASE_WEIGHT );
m_uiBaseWeightZeroBaseBlock = (ui <= 1) ? 0 : ui;
}
Void setBaseWeightZeroBaseCoeff(UInt ui)
{
AOT( ui > AR_FGS_MAX_BASE_WEIGHT );
m_uiBaseWeightZeroBaseCoeff = (ui <= 1) ? 0 : ui;
}
Void setArFgsUsageFlag ( Bool b ) { m_bArFgsUsageFlag = b; }
Bool getArFgsUsageFlag () { return m_bArFgsUsageFlag; }
Void setFgsEntropyOrderFlag ( Bool b ) { m_bFgsEntropyOrderFlag = b; }
Bool getFgsEntropyOrderFlag () { return m_bFgsEntropyOrderFlag; }
Void setLowPassFgsMcFilter ( UInt ui ) { m_uiLowPassFgsMcFilter = ui; }
UInt getLowPassFgsMcFilter () { return m_uiLowPassFgsMcFilter; }
UInt getSimplePriorityId () { return m_uiPriorityId;}
Bool getDiscardableFlag () { return m_bDiscardableFlag;}
//JVT-P031
Bool getFragmentedFlag () {return m_bFragmentedFlag;}
UInt getFragmentOrder () {return m_uiFragmentOrder;}
Bool getLastFragmentFlag () {return m_bLastFragmentFlag;}
Void setFragmentedFlag (Bool b) {m_bFragmentedFlag = b;}
Void setFragmentOrder (UInt ui) {m_uiFragmentOrder = ui;}
Void setLastFragmentFlag (Bool b) {m_bLastFragmentFlag = b;}
//~JVT-P031
//JVT-T054{
Void setBaseFragmentOrder ( UInt ui ) { m_uiBaseFragmentOrder = ui; }
//JVT-T054}
Bool getFieldPicFlag () const { return m_bFieldPicFlag; }
Bool getBottomFieldFlag () const { return m_bBottomFieldFlag; }
UInt getPicOrderCntLsb () const { return m_uiPicOrderCntLsb; }
Int getDeltaPicOrderCntBottom () const { return m_iDeltaPicOrderCntBottom; }
Int getDeltaPicOrderCnt ( UInt ui ) const {return m_aiDeltaPicOrderCnt[ui]; }
PicType getPicType () const { return ( ! m_bFieldPicFlag ? FRAME : m_bBottomFieldFlag ? BOT_FIELD : TOP_FIELD ); }
// JVT-U116 LMI {
// JVT-V088 LMI
Bool getTl0PicIdxPresentFlag () const { return m_bTl0PicIdxPresentFlag; }
UInt getTl0PicIdx () const { return m_uiTl0PicIdx; }
Bool getTl0PicIdxResetFlag () const { return m_bTl0PicIdxResetFlag; }
UInt getPrevTl0PicIdx () const { return m_uiPrevTl0PicIdx; }
UInt getNumTl0PicIdxUpdate () const { return m_uiNumTl0PicIdxUpdate; }
Void setTl0PicIdxPresentFlag ( Bool b ){ m_bTl0PicIdxPresentFlag = b; }
Void setTl0PicIdx ( UInt ui ) { m_uiTl0PicIdx = ui; }
Void setTl0PicIdxResetFlag ( Bool b ) { m_bTl0PicIdxResetFlag = b; }
Void setPrevTl0PicIdx ( UInt ui ) { m_uiPrevTl0PicIdx = ui; }
Void setNumTl0PicIdxUpdate ( UInt ui ) { m_uiNumTl0PicIdxUpdate = ui; }
// JVT-U116 LMI }
Bool getBaseLayerUsesConstrainedIntraPred() const { return m_bBaseLayerUsesConstrainedIntraPred; }
UInt getRedundantPicCnt () { return m_uiRedundantPicCnt; } // JVT-Q054 Red. Picture
//JVT-U106 Behaviour at slice boundaries{
Bool getCIUFlag() { return m_bCIUFlag;}
void setCIUFlag ( Bool b ) { m_bCIUFlag=b;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -