warp.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. and also edited by
  9.     Yuichiro Nakaya (Hitachi, Ltd.)
  10.     Yoshinori Suzuki (Hitachi, Ltd.)
  11. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  12. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  13. as specified by the MPEG-4 Video. 
  14. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  15. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  16. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  17. The original developer of this software module and his/her company, 
  18. the subsequent editors and their companies, 
  19. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  20. Copyright is not released for non MPEG-4 Video conforming products. 
  21. Microsoft retains full right to use the code for his/her own purpose, 
  22. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  23. This copyright notice must be included in all copies or derivative works. 
  24. Copyright (c) 1996, 1997.
  25. Module Name:
  26. warp.hpp
  27. Abstract:
  28. Geometry transformation:
  29. 2D Affine
  30. 2D Perspective
  31. Revision History:
  32. Jan. 13, 1999: Classes CSiteWFlag and CSiteDWFlag added and 
  33. definition of the "*" operator for the "CPerspective2D"
  34. class revised by Hitachi, Ltd. for disallowing zero 
  35. demoninators in perspective warping. 
  36. *************************************************************************/
  37. #ifndef __WARP_HPP_
  38. #define __WARP_HPP_
  39. Class CMatrix2x2D;
  40. Class CAffine2D;
  41. Class CPerspective2D;
  42. Class CMatrix2x2D 
  43. {
  44. public:  
  45. // Constructors 
  46. CMatrix2x2D () {} 
  47. CMatrix2x2D (Double d); // diagonal matrix
  48. CMatrix2x2D (Double d00, Double d01, Double d10, Double d11);
  49. CMatrix2x2D (const CMatrix2x2D& m) {memcpy (this, &m, sizeof (*this));} 
  50. CMatrix2x2D (const CVector2D v [2]); // from column vectors
  51. CMatrix2x2D (const CVector2D& v0, const CVector2D& v1, Bool fAsColumns = TRUE); // from column vectors
  52. CMatrix2x2D (const CVector2D source [2], const CVector2D dest [2]); // maps source to dest
  53. CMatrix2x2D (const CVector2D& s0, const CVector2D& s1, const CVector2D& d0, const CVector2D& d1); // maps source to dest
  54. // Properties
  55. Void expose (); // debug
  56. Double determinant () const 
  57. {return m_value [0] [0] * m_value [1] [1] - m_value [0] [1] * m_value [1] [0];} 
  58. CoordD element (UInt row, UInt col) const {return m_value [row] [col];}
  59. // Operators
  60. CMatrix2x2D inverse () const; 
  61. Void transpose (); 
  62. CVector2D apply (const CVector2D& v) const; 
  63. CVector2D operator * (const CVector2D& v) const {return apply (v);}
  64. CMatrix2x2D operator * (const CMatrix2x2D& x) const; 
  65. ///////////////// implementation /////////////////
  66. protected:  
  67. CoordD m_value [2] [2]; 
  68. };
  69. Class CAffine2D 
  70. {
  71. public:  
  72. // Constructors
  73. CAffine2D () {} 
  74. CAffine2D (const CSiteD& source, const CSiteD& dest); // translation
  75. CAffine2D (const CSiteD& s0, const CSiteD& s1, const CSiteD& d0, const CSiteD& d1); // rotate and stretch
  76. CAffine2D (
  77. const CSiteD& s, const CVector2D& sv0, const CVector2D& sv1, 
  78. const CSiteD& d, const CVector2D& dv0, const CVector2D& dv1
  79. ); 
  80. CAffine2D (const CSiteD source [3], const CSiteD dest [3]); 
  81. CAffine2D (const CoordD params [6]);
  82. // Properties
  83. Double determinant () const {return m_mtx.determinant ();}
  84. Void getParams (CoordD params [6]) const;
  85. // Operations
  86. CSiteD apply (const CSiteD& s) const {return m_stdDst + m_mtx * (s - m_stdSrc);}
  87. CSiteD operator * (const CSiteD& s) const {return apply (s);}
  88. CAffine2D inverse () const; 
  89. CAffine2D setOrigin (const CSiteD& std) const;
  90. ///////////////// implementation /////////////////
  91. protected:  
  92. CMatrix2x2D m_mtx; 
  93. CSiteD m_stdSrc; 
  94. CSiteD m_stdDst; 
  95. }; 
  96.  
  97. Class CSiteWFlag
  98. {
  99. public: 
  100. CSite s; 
  101. // CoordI x; 
  102. // CoordI y; 
  103. Bool f;
  104. // Constructors
  105. CSiteWFlag () {}
  106. CSiteWFlag (const CSite& s0) {s.x = s0.x; s.y = s0.y; f = FALSE;}
  107. CSiteWFlag (const CSiteWFlag& s0) {s.x = s0.s.x; s.y = s0.s.y; f = s0.f;}
  108. CSiteWFlag (CoordI xx, CoordI yy, Bool ff) {s.x = xx; s.y = yy; f = ff;}
  109. // Properties
  110. CoordI xCoord () const {return s.x;}
  111. CoordI yCoord () const {return s.y;}
  112. Bool flag () const {return f;}
  113. }; 
  114. Class CSiteDWFlag
  115. {
  116. public:  
  117. CSiteD s;
  118. // CoordD x; 
  119. // CoordD y; 
  120. Bool f;
  121. // Constructors
  122. CSiteDWFlag () {}
  123. CSiteDWFlag (const CSiteD& s0) {s.x = s0.x; s.y = s0.y; f = FALSE;}
  124. CSiteDWFlag (const CSiteDWFlag& s0) {s.x = s0.s.x; s.y = s0.s.y; f = s0.f;}
  125. CSiteDWFlag (CoordD xx, CoordD yy, Bool ff) {s.x = xx; s.y = yy; f = ff;}
  126. // Properties
  127. CoordD xCoord () const {return s.x;}
  128. CoordD yCoord () const {return s.y;}
  129. Bool flag () const {return f;}
  130. }; 
  131. Class CPerspective2D 
  132. {
  133. public:  
  134. // Constructors
  135. ~CPerspective2D ();
  136. CPerspective2D (const CSiteD source [4], const CSiteD dest [4]);
  137. CPerspective2D (const UInt pntNum, const CSiteD source [4], const CSiteD dest [4], const UInt accuracy);
  138. CPerspective2D (Double* rgCoeff);
  139. CPerspective2D ();
  140. // Operators
  141. CSiteDWFlag apply (const CSiteD& s0) const;
  142. CSiteWFlag apply (const CSite& s0) const;
  143. CSiteDWFlag operator * (const CSiteD& s0) const {return apply (s0);} 
  144. CSiteWFlag operator * (const CSite& s0) const {return apply (s0);}
  145. // Properties
  146. Double* getParams () {return m_rgCoeff;}
  147. // Resultants
  148. CPerspective2D inverse () const;
  149. ///////////////// implementation /////////////////
  150. private:  
  151. Double* m_rgCoeff; // perspective coefficients 
  152. CSiteD m_rgstdSrc [4]; // Source sites 
  153. CSiteD m_rgstdDst [4]; // Source sites 
  154. CoordD m_x0, m_y0; // used in 2/4/8/16 quantization for warping
  155. }; 
  156. #endif //  __WARP_HPP_