yuvac.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 __YUVAC_HPP_
  31. #define __YUVAC_HPP_
  32. Class CVideoObjectPlane;
  33. Class CU8Image;
  34. Class CAffine2D;
  35. Class CPerspective2D;
  36. Class CVOPU8YUVBA
  37. {
  38. public:
  39. // Constructors
  40. ~CVOPU8YUVBA ();
  41. CVOPU8YUVBA (const CVOPU8YUVBA& vopuc, AlphaUsage fAUsage, const CRct& rc = CRct ());
  42. CVOPU8YUVBA (const CVOPU8YUVBA& vopuc, const CRct& rc = CRct ());
  43. CVOPU8YUVBA (const Char* sptFilename);
  44. CVOPU8YUVBA (const CVideoObjectPlane& vop, AlphaUsage fAUsage, const CRct& rc = CRct ());
  45. CVOPU8YUVBA (AlphaUsage fAUsage, const CRct& rc);
  46. CVOPU8YUVBA (AlphaUsage fAUsage = RECTANGLE);
  47. // Attributes
  48. const PixelC* pixelsY () const {return m_ppxlcY;}
  49. const PixelC* pixelsU () const {return m_ppxlcU;}
  50. const PixelC* pixelsV () const {return m_ppxlcV;}
  51. const PixelC* pixelsBY () const {return m_ppxlcBY;}
  52. const PixelC* pixelsBUV () const {return m_ppxlcBUV;}
  53. const PixelC* pixelsA () const {return m_ppxlcA;}
  54. const PixelC* pixelsBoundY () const {return m_ppxlcBoundY;}
  55. const PixelC* pixelsBoundU () const {return m_ppxlcBoundU;}
  56. const PixelC* pixelsBoundV () const {return m_ppxlcBoundV;}
  57. const PixelC* pixelsBoundBY () const {return m_ppxlcBoundBY;}
  58. const PixelC* pixelsBoundBUV () const {return m_ppxlcBoundBUV;}
  59. const PixelC* pixelsBoundA () const {return m_ppxlcBoundA;}
  60. const CRct& whereY () const {return m_rctY;}
  61. const CRct& whereUV () const {return m_rctUV;}
  62. const CRct& whereBoundY () const {return m_rctBoundY;}
  63. const CRct& whereBoundUV () const {return m_rctBoundUV;}
  64. Bool valid () const {return this != 0;}
  65. const CU8Image* getPlane (PlaneType plnType) const;
  66. AlphaUsage fAUsage () const {return m_fAUsage;}
  67. // Operations
  68. Void shift (CoordI left, CoordI top);
  69. Void setBoundRct (const CRct& rctBoundY);
  70. Void setAndExpandBoundRctOnly (const CRct& rctBoundY, Int iExpand);
  71. Void cropOnAlpha ();
  72. Void overlay (const CVOPU8YUVBA& vopuc); // 
  73. Void overlay (const CVOPU8YUVBA& vopc, const CRct& rctY); //overlay part of the source
  74. Void setPlane (const CU8Image* pfiSrc, PlaneType plnType);
  75. // Resultants
  76. own CVOPU8YUVBA* downsampleForSpatialScalability () const;
  77. own CVOPU8YUVBA* upsampleForSpatialScalability (Int iVerticalSamplingFactorM,
  78. Int iVerticalSamplingFactorN,
  79. Int iHorizontalSamplingFactorM,
  80. Int iHorizontalSamplingFactorN,
  81. Int iExpandYRefFrame,
  82. Int iExpandUVRefFrame) const;
  83. Double* mse (const CVOPU8YUVBA& vopuc) const;
  84. Double* snr (const CVOPU8YUVBA& vopuc) const;
  85. Void vdlDump (const Char* pchFileName, const CRct& rct = CRct ()) const;
  86. Void dump (FILE* pfFile) const;
  87. Void dump (const Char* pchFileName) const;
  88. Void addBYPlain();
  89. Void addBYPlain (const CRct& rct, const CRct& rctUV); // new definition
  90. ///////////////// implementation /////////////////
  91. private:
  92. // key members
  93. AlphaUsage m_fAUsage; // alpha usage of this plane
  94. own CU8Image* m_puciY; // Y plane
  95. own CU8Image* m_puciU; // U plane
  96. own CU8Image* m_puciV; // V plane
  97. own CU8Image* m_puciBY; // binary support for Y
  98. own CU8Image* m_puciBUV; // binary support for UV
  99. own CU8Image* m_puciA; // (gray-scale) alpha plane
  100. CRct m_rctY, m_rctUV;
  101. PixelC *m_ppxlcY, *m_ppxlcU, *m_ppxlcV, *m_ppxlcBY, *m_ppxlcBUV, *m_ppxlcA;
  102. // non-key members (only needed for some cases)
  103. CRct m_rctBoundY, m_rctBoundUV;
  104. PixelC *m_ppxlcBoundY, *m_ppxlcBoundU, *m_ppxlcBoundV; 
  105. PixelC *m_ppxlcBoundBY, *m_ppxlcBoundBUV, *m_ppxlcBoundA;
  106. Void constructFromVOPU8 (const CVOPU8YUVBA& vopuc, const CRct& rc);
  107. };
  108. #endif // __YUVA_HPP