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

流媒体/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. yuva.hpp
  24. Abstract:
  25. YUVBA VOP: 
  26. There are 6 planes: Y, U, V, Binary for Y, Binary for UV, and Alpha.
  27. A is dynamically allocated depending on alpha usage.
  28. Revision History:
  29. *************************************************************************/
  30. #ifndef __YUVAI_HPP_
  31. #define __YUVAI_HPP_
  32. Class CVideoObjectPlane;
  33. Class CIntImage;
  34. Class CAffine2D;
  35. Class CPerspective2D;
  36. Class CVOPIntYUVBA
  37. {
  38. public:
  39. // Constructors
  40. ~CVOPIntYUVBA ();
  41. CVOPIntYUVBA (const CVOPIntYUVBA& vopi, AlphaUsage fAUsage, const CRct& rc = CRct ());
  42. CVOPIntYUVBA (const CVOPIntYUVBA& vopi, const CRct& rc = CRct ());
  43. CVOPIntYUVBA (const CVideoObjectPlane& vop, AlphaUsage fAUsage, const CRct& rc = CRct ());
  44. CVOPIntYUVBA (AlphaUsage fAUsage, const CRct& rc);
  45. CVOPIntYUVBA (AlphaUsage fAUsage, const CRct& rcY, const CRct& rcUV); // rcY is the rect for Y-plane. rcUV is the rect for UV plane
  46. CVOPIntYUVBA (AlphaUsage fAUsage = RECTANGLE);
  47. // Attributes
  48. Bool valid () const {return this != 0;}
  49. const CRct& whereY () const {return m_piiY -> where ();}
  50. const CRct& whereUV () const {return m_piiU -> where ();}
  51. const CIntImage* getPlane (PlaneType plnType) const;
  52. AlphaUsage fAUsage () const {return m_fAUsage;}
  53. // Operations
  54. Void where (const CRct& rct);
  55. Void whereY (const CRct& rct); // crop Y
  56. Void whereUV (const CRct& rct); // crop UV
  57. Void setPlane (const CIntImage* pii, PlaneType plnType, Bool bBUV = FALSE);
  58. Void cropOnAlpha ();
  59. Void overlay (const CVOPIntYUVBA& vopi); // defined only for YUV planes
  60. Void overlayBY (const CIntImage& fiBY); // defined only for YUV planes
  61. // Resultants
  62. /*
  63. own CVideoObjectPlane* pvopYUV () const;
  64. own CVideoObjectPlane* pvopRGB () const;
  65. own CVOPIntYUVBA* warp (const CAffine2D& aff) const; // affine warp
  66. own CVOPIntYUVBA* warp (const CAffine2D& aff, const CRct& rctWarp) const; // affine warp to rctWarp
  67. own CVOPIntYUVBA* warp (const CPerspective2D& persp) const; // perspective warp
  68. own CVOPIntYUVBA* warp (const CPerspective2D& persp, const CRct& rctWarp) const; // perspective warp to rctWarp
  69. own CVOPIntYUVBA* warp (const CPerspective2D& persp, const CRct& rctWarp, UInt accuracy) const; 
  70. */
  71. own CVOPIntYUVBA* warpYUV (const CPerspective2D& persp, const CRct& rctWarp) const; // perspective warp only YUV to rctWarp
  72. own CVOPIntYUVBA* warpYUV (const CPerspective2D& persp, const CRct& rctWarp, UInt accuracy) const; // perspective warp only YUV to rctWarp
  73. own CVOPIntYUVBA* operator + (const CVOPIntYUVBA& vopi) const; // only for YUV, A uses the original
  74. own CVOPIntYUVBA* operator - (const CVOPIntYUVBA& vopi) const; // only for YUV, A uses the original
  75. own CVOPIntYUVBA* operator * (Int vl) const; // pixel-wise scaling, only for YUV, A uses the original
  76. own CVOPIntYUVBA* operator / (Int vl) const; // pixel-wise dividing, only for YUV, A uses the original
  77. // own CVOPIntYUVBA* operator * (const CAffine2D& aff) const {return warp (aff);} // affine warp
  78. // own CVOPIntYUVBA* operator * (const CPerspective2D& persp) const {return warp (persp);} // perspective warp
  79. own CVOPIntYUVBA* average (const CVOPIntYUVBA& vopi) const; // only for YUV, A uses the original
  80. own CVOPIntYUVBA* downsampleForSpatialScalability () const;
  81. own CVOPIntYUVBA* upsampleForSpatialScalability () const;
  82. Double* mse (const CVOPIntYUVBA& vopi) const;
  83. Double* snr (const CVOPIntYUVBA& vopi) const;
  84. // Void vdlDump (const Char* fileName = "tmp.vdl", CPixel ppxlFalse = CPixel (0, 0, 0, 0)) const;
  85. ///////////////// implementation /////////////////
  86. private:
  87. AlphaUsage m_fAUsage; // alpha usage of this plane
  88. own CIntImage* m_piiY; // Y plane
  89. own CIntImage* m_piiU; // U plane
  90. own CIntImage* m_piiV; // V plane
  91. own CIntImage* m_piiBY; // binary support for Y
  92. own CIntImage* m_piiBUV; // binary support for UV
  93. own CIntImage* m_piiA; // (gray-scale) alpha plane
  94. Void constructFromVOPF (const CVOPIntYUVBA& vopi, const CRct& rc);
  95. };
  96. #endif // __YUVA_HPP