📄 mb.hpp
字号:
/*************************************************************************
This software module was originally developed by
Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
Bruce Lin (blin@microsoft.com), Microsoft Corporation
Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
(date: March, 1996)
in the course of development of the MPEG-4 Video (ISO/IEC 14496-2).
This software module is an implementation of a part of one or more MPEG-4 Video tools
as specified by the MPEG-4 Video.
ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications
thereof for use in hardware or software products claiming conformance to the MPEG-4 Video.
Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents.
The original developer of this software module and his/her company,
the subsequent editors and their companies,
and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation.
Copyright is not released for non MPEG-4 Video conforming products.
Microsoft retains full right to use the code for his/her own purpose,
assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products.
This copyright notice must be included in all copies or derivative works.
Copyright (c) 1996, 1997.
Module Name:
MB.hpp
Abstract:
MacroBlock base class
Revision History:
NOTE:
For encoder:
m_pvopfCurrQ holds the original data until it is texture quantized
*************************************************************************/
#ifndef __MB_HPP_
#define __MB_HPP_
class CBlock;
Class CMacroBlock
{
friend class CVOPofMBs;
public:
// Constructors
virtual ~CMacroBlock ();
CMacroBlock (
const VOLMode& volmd, // VOP mode
const VOPMode& vopmd, // VOP mode
const CVOPIntYUVBA* pvopfRef0, // reference VOP in a previous time
const CVOPIntYUVBA* pvopfRef1 // reference VOP in a later time
);
// Attributes
virtual const CMotionVector* rgMVForward () const {return m_rgmvForward;} // motion vector(s), 4 MV's for advanced mode
virtual const CMotionVector* rgMVBackward () const {return m_rgmvBackward;} // motion vector(s), 4 MV's for advanced mode
virtual CMotionVector mvForwardOfBlock (UInt iblk) const; // motion vector(s), 4 MV's for advanced mode
virtual CMotionVector mvBackwardOfBlock (UInt iblk) const; // motion vector(s), 4 MV's for advanced mode
virtual CMotionVector mvDirectDelta (UInt iblk) const; // motion vector(s), 4 MV's for advanced mode
virtual CMotionVector mvBY () const {return m_mvBY;} //shape motion vector
virtual const CVOPIntYUVBA* pvopfQOfMB () const {return m_pvopfCurrQ;}
virtual const CMBMode& mode () const {return *m_pmbmd;}
virtual const CRct& whereY () const {return m_pvopfCurrQ -> whereY ();}
virtual const CRct& whereUV () const {return m_pvopfCurrQ -> whereUV ();}
virtual CBlock** ppBlock () const {return m_ppblk;}
virtual Bool bTranspAveraged () const {return m_bTranspAveraged;}
// Operations
virtual own CVOPIntYUVBA* motionComp (MBType mbType = FORWARD) const; // non-overlapped motion compensation, overlapped MC is done at the vopmb level
Void setMVForward (const CMotionVector& mvSrc, const BlockNum blkn)
{m_rgmvForward [(UInt) blkn] = mvSrc;} // set motion vectors
Void setMVBackward (const CMotionVector& mvSrc, const BlockNum blkn)
{m_rgmvBackward [(UInt) blkn] = mvSrc;} // set motion vectors
Void setMVBY (const CMotionVector& mvSrc) {m_mvBY = mvSrc;} //set shape mv
Void zeroPadCurrQ ();
Void repeatPadCurrQ ();
Void averagePadCurrQ ();
Void repeatPadCurrQFromRight (const CMacroBlock& pmb);
Void repeatPadCurrQFromBottom (const CMacroBlock& pmb);
Void repeatPadCurrQFromLeft (const CMacroBlock& pmb);
Void repeatPadCurrQFromTop (const CMacroBlock& pmb);
// Resultant
Bool isBlockAllTransparent (const BlockNum blkn) const;
Bool isAllBlocksAllValue (PixelI pxlf, BlockNum blkn) const;
///////////////// implementation /////////////////
protected:
const CVOPIntYUVBA* m_pvopfRef0; // reference VOP in a previous time
const CVOPIntYUVBA* m_pvopfRef1; // reference VOP in a later time
own CVOPIntYUVBA* m_pvopfCurrQ; // macroblock
own CMotionVector* m_rgmvForward; // forward motion vectors
own CMotionVector* m_rgmvBackward; // backward motion vectors
own CMotionVector* m_rgmvDirectDelta; // delta motion vectors for direct mode
CMotionVector m_mvBY; //mv for binary shape
const VOLMode& m_volmd; // VOL mode
const VOPMode& m_vopmd; // VOP mode
CMBMode* m_pmbmd;
CBlock** m_ppblk; // block objects
UInt m_uiNumBlks; // number of blocks for texture coding. 10 for gray-scale alpha and 6 otherwise
// for padding
Bool m_bTranspAveraged;
Void clapQuant (); // clap the pixel value to be within 0 and 255
own CVOPIntYUVBA* motionCompFB (MBType mbType) const; // motion comp, Forward and Backward
own CIntImage* motionCompYBA (MBType mbType, PlaneType plnType) const; // non-oevrlapped MC for Y, B, and A plane
own CIntImage* motionCompForCAE () const; //only one MV, 18x18 motion comp, forward only
Void motionCompUV (MBType mbType, CVOPIntYUVBA* pvopf, const CVector2D& mv, const CVector2D& mvBW = CVector2D ()) const; // non-overlapped motion compensation, overlapped MC is done at the vopmb level
CVector2D mvDivideY (const CVector2D& mv, UInt divisor) const;
CVector2D mvLookupUV (const CVector2D& mv, UInt uiNumNonTranspBlocks) const;
Void backwardMVFromForwardMV (Bool bInBoundRef1, Bool bhas4MVRef1, const CMotionVector* rgmvRef1);
Void decideTransparencyStatus (); //also change mvs of trasnparent blocks to NOT_MV to be consistent
Void setQuantizedBinary (const CIntImage* pfiB);
const CBlock* findPredictorBlock (BlockNum iBlk,
IntraPredDirection predDir,
const CMacroBlock* pmbPredLeft,
const CMacroBlock* pmbPredTop,
const CMacroBlock* pmbPredLeftTop = NULL);
Void decideIntraPrediction (const CMacroBlock* pmbPredLeft,
const CMacroBlock* pmbPredTop,
const CMacroBlock* pmbPredLeftTop,
Bool bDecideDCOnly = FALSE,
BlockNum blkn = ALL_Y_BLOCKS);
};
#endif // __MENCB_HPP_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -