mb.hpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:6k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
  4. Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
  5. Bruce Lin (blin@microsoft.com), Microsoft Corporation
  6. Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
  7. (date: March, 1996)
  8. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  9. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  10. as specified by the MPEG-4 Video. 
  11. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  12. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  13. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  14. The original developer of this software module and his/her company, 
  15. the subsequent editors and their companies, 
  16. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  17. Copyright is not released for non MPEG-4 Video conforming products. 
  18. Microsoft retains full right to use the code for his/her own purpose, 
  19. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  20. This copyright notice must be included in all copies or derivative works. 
  21. Copyright (c) 1996, 1997.
  22. Module Name:
  23. MB.hpp
  24. Abstract:
  25. MacroBlock base class 
  26. Revision History:
  27. NOTE:
  28. For encoder:
  29. m_pvopfCurrQ holds the original data until it is texture quantized
  30. *************************************************************************/
  31. #ifndef __MB_HPP_
  32. #define __MB_HPP_
  33. class CBlock;
  34. Class CMacroBlock
  35. {
  36. friend class CVOPofMBs;
  37. public:
  38. // Constructors
  39. virtual ~CMacroBlock ();
  40. CMacroBlock (
  41. const VOLMode& volmd, // VOP mode
  42. const VOPMode& vopmd, // VOP mode
  43. const CVOPIntYUVBA* pvopfRef0, // reference VOP in a previous time
  44. const CVOPIntYUVBA* pvopfRef1 // reference VOP in a later time
  45. );
  46. // Attributes
  47. virtual const CMotionVector* rgMVForward () const {return m_rgmvForward;} // motion vector(s), 4 MV's for advanced mode
  48. virtual const CMotionVector* rgMVBackward () const {return m_rgmvBackward;} // motion vector(s), 4 MV's for advanced mode
  49. virtual CMotionVector mvForwardOfBlock (UInt iblk) const;  // motion vector(s), 4 MV's for advanced mode
  50. virtual CMotionVector mvBackwardOfBlock (UInt iblk) const;  // motion vector(s), 4 MV's for advanced mode
  51. virtual CMotionVector mvDirectDelta (UInt iblk) const;  // motion vector(s), 4 MV's for advanced mode
  52. virtual CMotionVector mvBY () const {return m_mvBY;} //shape motion vector
  53. virtual const CVOPIntYUVBA* pvopfQOfMB () const {return m_pvopfCurrQ;}
  54. virtual const CMBMode& mode () const {return *m_pmbmd;}
  55. virtual const CRct& whereY () const {return m_pvopfCurrQ -> whereY ();}
  56. virtual const CRct& whereUV () const {return m_pvopfCurrQ -> whereUV ();}
  57. virtual CBlock** ppBlock () const {return m_ppblk;}
  58. virtual Bool bTranspAveraged () const {return m_bTranspAveraged;} 
  59. // Operations
  60. virtual own CVOPIntYUVBA* motionComp (MBType mbType = FORWARD) const; // non-overlapped motion compensation, overlapped MC is done at the vopmb level
  61. Void setMVForward (const CMotionVector& mvSrc, const BlockNum blkn) 
  62. {m_rgmvForward [(UInt) blkn] = mvSrc;} // set motion vectors
  63. Void setMVBackward (const CMotionVector& mvSrc, const BlockNum blkn) 
  64. {m_rgmvBackward [(UInt) blkn] = mvSrc;} // set motion vectors
  65. Void setMVBY (const CMotionVector& mvSrc) {m_mvBY = mvSrc;} //set shape mv
  66. Void zeroPadCurrQ ();
  67. Void repeatPadCurrQ ();
  68. Void averagePadCurrQ ();
  69. Void repeatPadCurrQFromRight (const CMacroBlock& pmb);
  70. Void repeatPadCurrQFromBottom (const CMacroBlock& pmb);
  71. Void repeatPadCurrQFromLeft (const CMacroBlock& pmb);
  72. Void repeatPadCurrQFromTop (const CMacroBlock& pmb);
  73. // Resultant
  74. Bool isBlockAllTransparent (const BlockNum blkn) const;
  75. Bool isAllBlocksAllValue (PixelI pxlf, BlockNum blkn) const;
  76. ///////////////// implementation /////////////////
  77. protected:
  78. const CVOPIntYUVBA* m_pvopfRef0; // reference VOP in a previous time
  79. const CVOPIntYUVBA* m_pvopfRef1; // reference VOP in a later time
  80. own CVOPIntYUVBA* m_pvopfCurrQ; // macroblock
  81. own CMotionVector* m_rgmvForward; // forward motion vectors
  82. own CMotionVector* m_rgmvBackward; // backward motion vectors
  83. own CMotionVector* m_rgmvDirectDelta; // delta motion vectors for direct mode
  84. CMotionVector m_mvBY; //mv for binary shape
  85. const VOLMode& m_volmd; // VOL mode
  86. const VOPMode& m_vopmd; // VOP mode
  87. CMBMode* m_pmbmd;
  88. CBlock** m_ppblk; // block objects
  89. UInt m_uiNumBlks; // number of blocks for texture coding.  10 for gray-scale alpha and 6 otherwise
  90. // for padding
  91. Bool m_bTranspAveraged;
  92. Void clapQuant (); // clap the pixel value to be within 0 and 255
  93. own CVOPIntYUVBA* motionCompFB (MBType mbType) const; // motion comp, Forward and Backward
  94. own CIntImage* motionCompYBA (MBType mbType, PlaneType plnType) const; // non-oevrlapped MC for Y, B, and A plane
  95. own CIntImage* motionCompForCAE () const; //only one MV, 18x18 motion comp, forward only
  96. 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
  97. CVector2D mvDivideY (const CVector2D& mv, UInt divisor) const;
  98. CVector2D mvLookupUV (const CVector2D& mv, UInt uiNumNonTranspBlocks) const;
  99. Void backwardMVFromForwardMV (Bool bInBoundRef1, Bool bhas4MVRef1, const CMotionVector* rgmvRef1);
  100. Void decideTransparencyStatus (); //also change mvs of trasnparent blocks to NOT_MV to be consistent
  101. Void setQuantizedBinary (const CIntImage* pfiB);
  102. const CBlock* findPredictorBlock (BlockNum iBlk, 
  103.   IntraPredDirection predDir,
  104.   const CMacroBlock* pmbPredLeft, 
  105.   const CMacroBlock* pmbPredTop, 
  106.   const CMacroBlock* pmbPredLeftTop = NULL);
  107. Void decideIntraPrediction (const CMacroBlock* pmbPredLeft, 
  108. const CMacroBlock* pmbPredTop, 
  109. const CMacroBlock* pmbPredLeftTop,
  110. Bool bDecideDCOnly = FALSE,
  111. BlockNum blkn = ALL_Y_BLOCKS);
  112. };
  113. #endif // __MENCB_HPP_