Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

397 lines
9.6 KiB

  1. //=====================================================================
  2. //
  3. // vmrp.h
  4. //
  5. // Private header for Video Mixing Renderer
  6. //
  7. // Copyright (C) 2000 by Microsoft Corporation. All rights reserved.
  8. //
  9. //=====================================================================
  10. #ifndef __INC_VMRP__
  11. #define __INC_VMRP__
  12. #include "dxva.h"
  13. #define MAX_MIXER_PINS 16
  14. #define MAX_MIXER_STREAMS (MAX_MIXER_PINS)
  15. #define MIN_BUFFERS_TO_ALLOCATE 1
  16. #define MAX_ALLOWED_BUFFER 64
  17. #define EXTRA_OVERLAY_BUFFERS 2
  18. #define EXTRA_OFFSCREEN_BUFFERS 1 // should really be 1 but as yet
  19. // most graphics drivers don't like
  20. // back buffers when the overlay is
  21. // not being requested too.
  22. //
  23. // Private intel mixer render target, IMC3
  24. //
  25. #define MixerPref_RenderTargetIntelIMC3 0x00008100
  26. #ifndef __RELEASE_DEFINED
  27. #define __RELEASE_DEFINED
  28. template<typename T>
  29. __inline void RELEASE( T* &p )
  30. {
  31. if( p ) {
  32. p->Release();
  33. p = NULL;
  34. }
  35. }
  36. #endif
  37. #ifndef CHECK_HR
  38. #define CHECK_HR(expr) do { if (FAILED(expr)) __leave; } while(0);
  39. #endif
  40. #if defined(DEBUG)
  41. #define ISBADREADPTR(p) (IsBadReadPtr( (p), (sizeof(*p))))
  42. #define ISBADWRITEPTR(p) (IsBadWritePtr( (p), (sizeof(*p))))
  43. #define ISBADREADARRAY(p,c) (IsBadReadPtr( (p), (c)*(sizeof(*p))))
  44. #define ISBADWRITEARRAY(p,c) (IsBadWritePtr( (p), (c)*(sizeof(*p))))
  45. #else
  46. #define ISBADREADPTR(p) (NULL==(p))
  47. #define ISBADWRITEPTR(p) (NULL==(p))
  48. #define ISBADREADARRAY(p,c) (NULL==(p))
  49. #define ISBADWRITEARRAY(p,c) (NULL==(p))
  50. #endif
  51. #define ISWINDOW(hwnd) (IsWindow(hwnd))
  52. #define ISBADREADWRITEPTR(p) (ISBADREADPTR(p)||ISBADWRITEPTR(p))
  53. #define ISBADREADWRITEARRAY(p,c) (ISBADREADARRAY(p,c)||ISBADWRITEARRAY(p,c))
  54. // Debug helper
  55. #ifdef DEBUG
  56. class CDispPixelFormat : public CDispBasic
  57. {
  58. public:
  59. CDispPixelFormat(const DDPIXELFORMAT *pFormat)
  60. {
  61. wsprintf(m_String, TEXT(" Flags(0x%8.8X) bpp(%d) 4CC(%4.4hs)"),
  62. pFormat->dwFlags,
  63. pFormat->dwRGBBitCount,
  64. pFormat->dwFlags & DDPF_FOURCC ?
  65. (CHAR *)&pFormat->dwFourCC : "None");
  66. }
  67. // Implement cast to (LPCTSTR) as parameter to logger
  68. operator LPCTSTR()
  69. {
  70. return (LPCTSTR)m_pString;
  71. };
  72. };
  73. #endif // DEBUG
  74. /* -------------------------------------------------------------------------
  75. ** VMR file persist helpers
  76. ** -------------------------------------------------------------------------
  77. */
  78. struct VMRStreamInfo {
  79. float alpha;
  80. DWORD zOrder;
  81. NORMALIZEDRECT rect;
  82. };
  83. struct VMRFilterInfo {
  84. DWORD dwSize;
  85. DWORD dwNumPins;
  86. VMRStreamInfo StreamInfo[MAX_MIXER_STREAMS];
  87. };
  88. // internal interfaces used by the VMR
  89. // interface IImageSyncNotifyEvent;
  90. // interface IImageSyncControl;
  91. // interface IImageSync;
  92. // interface IVMRMixerControl;
  93. // interface IVMRMixerStream;
  94. //
  95. // 1DBCA562-5C92-474a-A276-382079164970),
  96. //
  97. DEFINE_GUID(IID_IImageSyncNotifyEvent,
  98. 0x1DBCA562, 0x5C92, 0x474a, 0xA2, 0x76, 0x38, 0x20, 0x79, 0x16, 0x49, 0x70);
  99. DECLARE_INTERFACE_(IImageSyncNotifyEvent, IUnknown)
  100. {
  101. STDMETHOD (NotifyEvent)(THIS_
  102. long EventCode,
  103. LONG_PTR EventParam1,
  104. LONG_PTR EventParam2
  105. ) PURE;
  106. };
  107. typedef enum {
  108. ImageSync_State_Stopped,
  109. ImageSync_State_Cued,
  110. ImageSync_State_Playing
  111. } ImageSequenceState;
  112. //
  113. // A67F6A0D-883B-44ce-AA93-87BA3017E19C
  114. //
  115. DEFINE_GUID(IID_IImageSyncControl,
  116. 0xA67F6A0D, 0x883B, 0x44ce, 0xAA, 0x93, 0x87, 0xBA, 0x30, 0x17, 0xE1, 0x9C);
  117. DECLARE_INTERFACE_(IImageSyncControl, IUnknown)
  118. {
  119. // ============================================================
  120. // Synchronisation control
  121. // ============================================================
  122. STDMETHOD (SetImagePresenter)(THIS_
  123. IVMRImagePresenter* lpImagePresenter,
  124. DWORD_PTR dwUserID
  125. ) PURE;
  126. STDMETHOD (SetReferenceClock)(THIS_
  127. IReferenceClock* lpRefClock
  128. ) PURE;
  129. STDMETHOD (SetEventNotify)(THIS_
  130. IImageSyncNotifyEvent* lpEventNotify
  131. ) PURE;
  132. // ============================================================
  133. // Image sequence control
  134. // ============================================================
  135. STDMETHOD (CueImageSequence)(THIS_
  136. ) PURE;
  137. STDMETHOD (BeginImageSequence)(THIS_
  138. REFERENCE_TIME* baseTime
  139. ) PURE;
  140. STDMETHOD (EndImageSequence)(THIS_
  141. ) PURE;
  142. STDMETHOD (GetImageSequenceState)(THIS_
  143. DWORD dwMSecsTimeOut,
  144. DWORD* lpdwState
  145. ) PURE;
  146. STDMETHOD (BeginFlush)(THIS_
  147. ) PURE;
  148. STDMETHOD (EndFlush)(THIS_
  149. ) PURE;
  150. STDMETHOD (EndOfStream)(THIS_
  151. ) PURE;
  152. STDMETHOD (ResetEndOfStream)(THIS_
  153. ) PURE;
  154. STDMETHOD (SetAbortSignal)(THIS_
  155. BOOL bAbort
  156. ) PURE;
  157. STDMETHOD (GetAbortSignal)(THIS_
  158. BOOL* lpbAbort
  159. ) PURE;
  160. STDMETHOD (RuntimeAbortPlayback)(THIS_
  161. ) PURE;
  162. // ============================================================
  163. // Frame stepping
  164. // ============================================================
  165. STDMETHOD (FrameStep)(THIS_
  166. DWORD nFramesToStep,
  167. DWORD dwStepFlags
  168. ) PURE;
  169. STDMETHOD (CancelFrameStep)(THIS_
  170. ) PURE;
  171. };
  172. //
  173. // a38cc06e-5926-48df-9926-571458145e80
  174. //
  175. DEFINE_GUID(IID_IImageSync,
  176. 0xa38cc06e, 0x5926, 0x48df, 0x99, 0x26, 0x57, 0x14, 0x58, 0x14, 0x5e, 0x80);
  177. DECLARE_INTERFACE_(IImageSync, IUnknown)
  178. {
  179. STDMETHOD (Receive)(THIS_
  180. VMRPRESENTATIONINFO* lpPresInfo
  181. ) PURE;
  182. STDMETHOD (GetQualityControlMessage)(THIS_
  183. Quality* pQualityMsg
  184. ) PURE;
  185. };
  186. ///////////////////////////////////////////////////////////////////////////////
  187. //
  188. // Mixer interfaces
  189. //
  190. ///////////////////////////////////////////////////////////////////////////////
  191. //
  192. // 56949f22-aa07-4061-bb8c-10159d8f92e5
  193. //
  194. DEFINE_GUID(IID_IVMRMixerControlInternal,
  195. 0x56949f22, 0xaa07, 0x4061, 0xbb, 0x8c, 0x10, 0x15, 0x9d, 0x8f, 0x92, 0xe5);
  196. DECLARE_INTERFACE_(IVMRMixerControlInternal, IUnknown)
  197. {
  198. STDMETHOD (SetImageCompositor)(THIS_
  199. IVMRImageCompositor* lpVMRImgCompositor
  200. ) PURE;
  201. STDMETHOD (SetBackEndAllocator)(THIS_
  202. IVMRSurfaceAllocator* lpAllocator,
  203. DWORD_PTR dwUserID
  204. ) PURE;
  205. STDMETHOD (SetBackEndImageSync)(THIS_
  206. IImageSync* lpImageSync
  207. ) PURE;
  208. STDMETHOD (SetNumberOfStreams)(THIS_
  209. DWORD dwMaxStreams
  210. ) PURE;
  211. STDMETHOD (GetNumberOfStreams)(THIS_
  212. DWORD* pdwMaxStreams
  213. ) PURE;
  214. STDMETHOD (DisplayModeChanged)(THIS_) PURE;
  215. STDMETHOD (WaitForMixerIdle)(THIS_
  216. DWORD dwTimeOut
  217. ) PURE;
  218. STDMETHOD (SetBackgroundColor)(THIS_
  219. COLORREF clrBorder
  220. ) PURE;
  221. STDMETHOD (GetBackgroundColor)(THIS_
  222. COLORREF* lpClrBorder
  223. ) PURE;
  224. STDMETHOD (SetMixingPrefs)(THIS_
  225. DWORD dwMixerPrefs
  226. ) PURE;
  227. STDMETHOD (GetMixingPrefs)(THIS_
  228. DWORD* pdwMixerPrefs
  229. ) PURE;
  230. };
  231. typedef enum {
  232. VMR_SF_NONE = 0x00000000,
  233. VMR_SF_TEXTURE = 0x00000001,
  234. } VMR_SF_Flags;
  235. //
  236. // 43062408-3d55-43cc-9415-0daf218db422
  237. //
  238. DEFINE_GUID(IID_IVMRMixerStream,
  239. 0x43062408, 0x3d55, 0x43cc, 0x94, 0x15, 0x0d, 0xaf, 0x21, 0x8d, 0xb4, 0x22);
  240. DECLARE_INTERFACE_(IVMRMixerStream, IUnknown)
  241. {
  242. STDMETHOD (QueueStreamMediaSample)(THIS_
  243. DWORD dwStreamID,
  244. IMediaSample* lpSample
  245. ) PURE;
  246. STDMETHOD (BeginFlush)(THIS_
  247. DWORD dwStreamID
  248. ) PURE;
  249. STDMETHOD (EndFlush)(THIS_
  250. DWORD dwStreamID
  251. ) PURE;
  252. STDMETHOD (SetStreamMediaType)(THIS_
  253. DWORD dwStreamID,
  254. AM_MEDIA_TYPE* pmt,
  255. DWORD dwSurfFlags,
  256. LPGUID lpDeinterlaceGUID,
  257. DXVA_DeinterlaceCaps* lpCaps
  258. ) PURE;
  259. STDMETHOD (SetStreamActiveState)(THIS_
  260. DWORD dwStreamID,
  261. BOOL fActive
  262. ) PURE;
  263. STDMETHOD (GetStreamActiveState)(THIS_
  264. DWORD dwStreamID,
  265. BOOL* lpfActive
  266. ) PURE;
  267. STDMETHOD (SetStreamColorKey)(THIS_
  268. DWORD dwStreamID,
  269. LPDDCOLORKEY lpClrKey
  270. ) PURE;
  271. STDMETHOD (GetStreamColorKey)(THIS_
  272. DWORD dwStreamID,
  273. LPDDCOLORKEY lpClrKey
  274. ) PURE;
  275. STDMETHOD (SetStreamAlpha)(THIS_
  276. DWORD dwStreamID,
  277. float Alpha
  278. ) PURE;
  279. STDMETHOD (GetStreamAlpha)(THIS_
  280. DWORD dwStreamID,
  281. float* pAlpha
  282. ) PURE;
  283. STDMETHOD (SetStreamZOrder)(THIS_
  284. DWORD dwStreamID,
  285. DWORD dwZ
  286. ) PURE;
  287. STDMETHOD (GetStreamZOrder)(THIS_
  288. DWORD dwStreamID,
  289. DWORD* pdwZ
  290. ) PURE;
  291. STDMETHOD (SetStreamOutputRect)(THIS_
  292. DWORD dwStreamID,
  293. const NORMALIZEDRECT *pRect
  294. ) PURE;
  295. STDMETHOD (GetStreamOutputRect)(THIS_
  296. DWORD dwStreamID,
  297. NORMALIZEDRECT* pRect
  298. ) PURE;
  299. };
  300. //
  301. // ede80b5c-bad6-4623-b537-65 58 6c 9f 8d fd
  302. //
  303. DEFINE_GUID(IID_IVMRFilterConfigInternal,
  304. 0xede80b5c, 0xbad6, 0x4623, 0xb5, 0x37, 0x65, 0x58, 0x6c, 0x9f, 0x8d, 0xfd);
  305. DECLARE_INTERFACE_(IVMRFilterConfigInternal, IUnknown)
  306. {
  307. STDMETHOD (GetAspectRatioModePrivate)(THIS_
  308. LPDWORD lpdwARMode
  309. ) PURE;
  310. STDMETHOD (SetAspectRatioModePrivate)(THIS_
  311. DWORD dwARMode
  312. ) PURE;
  313. };
  314. #endif