📄 fgscoder.h
字号:
class FGSCoder
{
public:
enum
{
RQ_QP_DELTA = 6
};
FGSCoder()
: m_bInit ( false )
, m_bPicInit ( false )
, m_papcYuvFullPelBufferCtrl ( 0 )
, m_pcTransform ( 0 )
, m_uiWidthInMB ( 0 )
, m_uiHeightInMB ( 0 )
, m_pcCurrMbDataCtrl ( 0 )
, m_pcBaseLayerSbb ( 0 )
{
}
Void getCoeffSigMap ( UInt uiMbX, UInt uiMbY, S4x4Idx cIdx, UChar *pucSigMap );
Void getCoeffSigMap ( UInt uiMbX, UInt uiMbY, B8x8Idx c8x8Idx, UChar *pucSigMap );
Void getCoeffSigMap ( UInt uiMbX, UInt uiMbY, CIdx cIdx, UChar *pucSigMap );
Void getCoeffSigMapChroma8x8( UInt uiMbX, UInt uiMbY, UInt uiPlane, UChar *pucSigMap );
ErrVal xStoreBQLayerSigMap();
ErrVal xSwitchBQLayerSigMap();
static Bool isSignificant(UChar ucCoeffState)
{
return ( ( ucCoeffState & SIGNIFICANT ) != 0 );
}
IntFrame* getBaseLayerSbb() { return m_pcBaseLayerSbb; }
MbDataCtrl* getMbDataCtrl() { return m_pcCurrMbDataCtrl; }
MbDataCtrl* getMbDataCtrlEL() { return &m_cMbDataCtrlEL; }
//JVT-T054{
Void setMbDataCtrl(MbDataCtrl* pcMbDataCtrl) { m_pcCurrMbDataCtrl = pcMbDataCtrl;}
Void setBaseLayerSbb(IntFrame* pcBaseLayerSbb) { m_pcBaseLayerSbb = pcBaseLayerSbb; }
//JVT-T054}
enum
{
CLEAR = 0x00,
SIGNIFICANT = 0x01, // was significant in base layer or during the current path
CODED = 0x02, // was coded during the current path
TRANSFORM_SPECIFIED = 0x04, // transform size was specified in base layer or during current path
CHROMA_CBP_CODED = 0x08,
CHROMA_CBP_AC_CODED = 0x10,
BASE_SIGN = 0x20,
NEWSIG = 0x40, // new significant only during the current path
NUM_COEFF_SHIFT = 16
};
protected:
ErrVal xInit ( YuvBufferCtrl** apcYuvFullPelBufferCtrl,
Transform* pcTransform );
ErrVal xInitSPS ( const SequenceParameterSet& rcSPS );
ErrVal xUninit ();
ErrVal xScaleTCoeffs ( MbDataAccess& rcMbDataAccess,
Bool bBaseLayer );
ErrVal xReconstructMacroblock( MbDataAccess& rcMbDataAccess,
IntYuvMbBuffer& rcMbBuffer );
// FMO FGS ICU/ETRI
ErrVal xInitializeCodingPath (SliceHeader* pcSliceHeader);
ErrVal xUpdateCodingPath (SliceHeader* pcSliceHeader);
ErrVal xInitializeCodingPath ();
ErrVal xUpdateCodingPath ();
ErrVal xClearCodingPath ();
ErrVal xUpdateMacroblock ( MbDataAccess& rcMbDataAccessBL,
MbDataAccess& rcMbDataAccessEL,
UInt uiMbY,
UInt uiMbX );
ErrVal xClearBaseCoeffs( MbDataAccess& rcMbDataAccess, MbDataAccess* pcMbDataAccessBase );
ErrVal xInitBaseLayerSbb ( UInt uiLayerId );
Bool m_bInit;
Bool m_bPicInit;
YuvBufferCtrl** m_papcYuvFullPelBufferCtrl;
Transform* m_pcTransform;
MbDataCtrl m_cMbDataCtrlEL;
MbDataCtrl* m_pcCurrMbDataCtrl;
UInt m_uiWidthInMB;
UInt m_uiHeightInMB;
Bool m_bFgsComponentSep;
UChar* m_apaucLumaCoefMap [16];
UChar* m_aapaucChromaDCCoefMap [2][ 4];
UChar* m_aapaucChromaACCoefMap [2][16];
UChar* m_paucBlockMap;
UChar* m_apaucChromaDCBlockMap [2];
UChar* m_apaucChromaACBlockMap [2];
UChar* m_paucSubMbMap;
UInt* m_pauiMacroblockMap;
UChar* m_apaucScanPosMap [5];
UChar* m_apaucBQLumaCoefMap [16];
UChar* m_aapaucBQChromaDCCoefMap [2][ 4];
UChar* m_aapaucBQChromaACCoefMap [2][16];
UChar* m_paucBQBlockMap;
UChar* m_apaucBQChromaDCBlockMap [2];
UChar* m_apaucBQChromaACBlockMap [2];
UChar* m_paucBQSubMbMap;
UInt* m_pauiBQMacroblockMap;
UInt m_uiLumaCbpRun;
Bool m_bLastLumaCbpFlag;
UInt m_uiChromaCbpRun;
UInt m_uiLastChromaCbp;
UInt m_uiLumaCbpNextMbX;
UInt m_uiLumaCbpNextMbY;
UInt m_uiLumaCbpNext8x8Idx;
UInt m_uiChromaCbpNextMbX;
UInt m_uiChromaCbpNextMbY;
IntFrame* m_pcBaseLayerSbb;
private:
Void xUpdateCoeffMap(TCoeff& cBL, TCoeff cEL, UChar& sm)
{
if ((cEL))
{
if( sm | SIGNIFICANT && cEL < 0 ) // set sign only when base layer not significant
{
sm |= BASE_SIGN;
}
sm |= SIGNIFICANT;
cBL += cEL;
}
}
Int xScaleLevel4x4 ( Int iLevel,
Int iIndex,
const QpParameter& cQP,
const QpParameter& cBaseQP );
Int xScaleLevel8x8 ( Int iLevel,
Int iIndex,
const QpParameter& cQP,
const QpParameter& cBaseQP );
ErrVal xScaleSymbols4x4 ( TCoeff* piCoeff,
const QpParameter& cQP,
const QpParameter& cBaseQP );
ErrVal xScaleSymbols8x8 ( TCoeff* piCoeff,
const QpParameter& cQP,
const QpParameter& cBaseQP );
ErrVal xScale4x4Block ( TCoeff* piCoeff,
const UChar* pucScale,
UInt uiStart,
const QpParameter& rcQP );
ErrVal xScale8x8Block ( TCoeff* piCoeff,
const UChar* pucScale,
const QpParameter& rcQP );
ErrVal xUpdateSymbols ( TCoeff* piCoeff,
TCoeff* piCoeffEL,
Bool& bSigDC,
Bool& bSigAC,
Int iNumCoeff );
};
H264AVC_NAMESPACE_END
#endif // _FGS_CODER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -