Sync to trunk (r44371)
[reactos.git] / reactos / include / dxsdk / vmrender.idl
1
2 cpp_quote("#if 0")
3
4 import "unknwn.idl";
5
6 typedef DWORD* LPDIRECTDRAW7;
7 typedef DWORD* LPDIRECTDRAWSURFACE7;
8 typedef DWORD* LPDDPIXELFORMAT;
9 typedef DWORD* LPBITMAPINFOHEADER;
10 typedef struct {DWORD dw1; DWORD dw2;} DDCOLORKEY;
11 typedef DDCOLORKEY* LPDDCOLORKEY;
12 cpp_quote ("#endif")
13
14 cpp_quote("#include <ddraw.h>")
15
16 cpp_quote("#define VMRBITMAP_DISABLE 0x00000001")
17 cpp_quote("#define VMRBITMAP_HDC 0x00000002")
18 cpp_quote("#define VMRBITMAP_ENTIREDDS 0x00000004")
19 cpp_quote("#define VMRBITMAP_SRCCOLORKEY 0x00000008")
20 cpp_quote("#define VMRBITMAP_SRCRECT 0x00000010")
21
22 interface IVMRSurface;
23 interface IVMRSurfaceAllocator;
24 interface IVMRSurfaceAllocatorNotify;
25 interface IVMRImagePresenter;
26 interface IVMRImagePresenterConfig;
27 interface IVMRWindowlessControl;
28 interface IVMRMixerControl;
29 interface IVMRMixerBitmap;
30 interface IVMRFilterConfig;
31 interface IVMRAspectRatioControl;
32 interface IVMRDeinterlaceControl;
33 interface IVMRMonitorConfig;
34 interface IVMRImageCompositor;
35 interface IVMRVideoStreamControl;
36
37 #define VMRDEVICENAMELEN 32
38 #define VMRDEVICEDESCRIPTIONLEN 256
39
40 typedef enum
41 {
42 VMRSample_SyncPoint = 0x00000001,
43 VMRSample_Preroll = 0x00000002,
44 VMRSample_Discontinuity = 0x00000004,
45 VMRSample_TimeValid = 0x00000008,
46 VMRSample_SrcDstRectsValid= 0x00000010
47 } VMRPresentationFlags;
48
49 typedef enum
50 {
51 AMAP_PIXELFORMAT_VALID = 0x01,
52 AMAP_3D_TARGET = 0x02,
53 AMAP_ALLOW_SYSMEM = 0x04,
54 AMAP_FORCE_SYSMEM = 0x08,
55 AMAP_DIRECTED_FLIP = 0x10,
56 AMAP_DXVA_TARGET = 0x20
57 } VMRSurfaceAllocationFlags;
58
59 typedef enum
60 {
61 VMR_ARMODE_NONE,
62 VMR_ARMODE_LETTER_BOX
63 } VMR_ASPECT_RATIO_MODE;
64
65
66 typedef enum
67 {
68 MixerPref_NoDecimation = 0x00000001,
69 MixerPref_DecimateOutput = 0x00000002,
70 MixerPref_ARAdjustXorY = 0x00000004,
71 MixerPref_DecimationReserved = 0x00000008,
72 MixerPref_DecimateMask = 0x0000000F,
73 MixerPref_BiLinearFiltering = 0x00000010,
74 MixerPref_PointFiltering = 0x00000020,
75 MixerPref_FilteringMask = 0x000000F0,
76 MixerPref_RenderTargetRGB = 0x00000100,
77 MixerPref_RenderTargetYUV = 0x00001000,
78 MixerPref_RenderTargetYUV420 = 0x00000200,
79 MixerPref_RenderTargetYUV422 = 0x00000400,
80 MixerPref_RenderTargetYUV444 = 0x00000800,
81 MixerPref_RenderTargetReserved = 0x0000E000,
82 MixerPref_RenderTargetMask = 0x0000FF00,
83 MixerPref_DynamicSwitchToBOB = 0x00010000,
84 MixerPref_DynamicDecimateBy2 = 0x00020000,
85 MixerPref_DynamicReserved = 0x000C0000,
86 MixerPref_DynamicMask = 0x000F0000
87 } VMRMixerPrefs;
88
89 typedef enum
90 {
91 RenderPrefs_RestrictToInitialMonitor = 0x00000000,
92 RenderPrefs_ForceOffscreen = 0x00000001,
93 RenderPrefs_ForceOverlays = 0x00000002,
94 RenderPrefs_AllowOverlays = 0x00000000,
95 RenderPrefs_AllowOffscreen = 0x00000000,
96 RenderPrefs_DoNotRenderColorKeyAndBorder = 0x00000008,
97 RenderPrefs_Reserved = 0x00000010,
98 RenderPrefs_PreferAGPMemWhenMixing = 0x00000020,
99
100 RenderPrefs_Mask = 0x0000003f,
101 } VMRRenderPrefs;
102
103 typedef enum
104 {
105 VMRMode_Windowed = 0x00000001,
106 VMRMode_Windowless = 0x00000002,
107 VMRMode_Renderless = 0x00000004,
108 VMRMode_Mask = 0x00000007,
109 } VMRMode;
110
111 enum
112 {
113 MAX_NUMBER_OF_STREAMS = 16
114 };
115
116 typedef enum
117 {
118 DeinterlacePref_NextBest = 0x01,
119 DeinterlacePref_BOB = 0x02,
120 DeinterlacePref_Weave = 0x04,
121 DeinterlacePref_Mask = 0x07
122 } VMRDeinterlacePrefs;
123
124 typedef enum
125 {
126 DeinterlaceTech_Unknown = 0x0000,
127 DeinterlaceTech_BOBLineReplicate = 0x0001,
128 DeinterlaceTech_BOBVerticalStretch = 0x0002,
129 DeinterlaceTech_MedianFiltering = 0x0004,
130 DeinterlaceTech_EdgeFiltering = 0x0010,
131 DeinterlaceTech_FieldAdaptive = 0x0020,
132 DeinterlaceTech_PixelAdaptive = 0x0040,
133 DeinterlaceTech_MotionVectorSteered = 0x0080
134 } VMRDeinterlaceTech;
135
136 typedef struct tagVMRPRESENTATIONINFO
137 {
138 DWORD dwFlags;
139 LPDIRECTDRAWSURFACE7 lpSurf;
140 REFERENCE_TIME rtStart;
141 REFERENCE_TIME rtEnd;
142 SIZE szAspectRatio;
143 RECT rcSrc;
144 RECT rcDst;
145 DWORD dwTypeSpecificFlags;
146 DWORD dwInterlaceFlags;
147 } VMRPRESENTATIONINFO;
148
149 typedef struct tagVMRALLOCATIONINFO
150 {
151 DWORD dwFlags;
152 LPBITMAPINFOHEADER lpHdr;
153 LPDDPIXELFORMAT lpPixFmt;
154 SIZE szAspectRatio;
155 DWORD dwMinBuffers;
156 DWORD dwMaxBuffers;
157 DWORD dwInterlaceFlags;
158 SIZE szNativeSize;
159 } VMRALLOCATIONINFO;
160
161 typedef struct _NORMALIZEDRECT
162 {
163 float left;
164 float top;
165 float right;
166 float bottom;
167 } NORMALIZEDRECT, *PNORMALIZEDRECT;
168
169 typedef struct tagVMRGUID
170 {
171 GUID* pGUID;
172 GUID GUID;
173 } VMRGUID;
174
175 typedef struct tagVMRMONITORINFO
176 {
177 VMRGUID guid;
178 RECT rcMonitor;
179 HMONITOR hMon;
180 DWORD dwFlags;
181 wchar_t szDevice[VMRDEVICENAMELEN];
182 wchar_t szDescription[VMRDEVICEDESCRIPTIONLEN];
183 LARGE_INTEGER liDriverVersion;
184 DWORD dwVendorId;
185 DWORD dwDeviceId;
186 DWORD dwSubSysId;
187 DWORD dwRevision;
188 } VMRMONITORINFO;
189
190 typedef struct _VMRFrequency
191 {
192 DWORD dwNumerator;
193 DWORD dwDenominator;
194 } VMRFrequency;
195
196 typedef struct _VMRVideoDesc
197 {
198 DWORD dwSize;
199 DWORD dwSampleWidth;
200 DWORD dwSampleHeight;
201 BOOL SingleFieldPerSample;
202 DWORD dwFourCC;
203 VMRFrequency InputSampleFreq;
204 VMRFrequency OutputFrameFreq;
205 } VMRVideoDesc;
206
207 typedef struct _VMRDeinterlaceCaps
208 {
209 DWORD dwSize;
210 DWORD dwNumPreviousOutputFrames;
211 DWORD dwNumForwardRefSamples;
212 DWORD dwNumBackwardRefSamples;
213 VMRDeinterlaceTech DeinterlaceTechnology;
214 } VMRDeinterlaceCaps;
215
216 typedef struct _VMRALPHABITMAP
217 {
218 DWORD dwFlags;
219 HDC hdc;
220 LPDIRECTDRAWSURFACE7 pDDS;
221 RECT rSrc;
222 NORMALIZEDRECT rDest;
223 FLOAT fAlpha;
224 COLORREF clrSrcKey;
225 } VMRALPHABITMAP, *PVMRALPHABITMAP;
226
227 typedef struct _VMRVIDEOSTREAMINFO
228 {
229 LPDIRECTDRAWSURFACE7 pddsVideoSurface;
230 DWORD dwWidth;
231 DWORD dwHeight;
232 FLOAT dwStrmID;
233 FLOAT fAlpha;
234 DDCOLORKEY ddClrKey;
235 NORMALIZEDRECT rNormal;
236 } VMRVIDEOSTREAMINFO;
237
238
239
240 [
241 local,
242 object,
243 uuid(CE704FE7-E71E-41fb-BAA2-C4403E1182F5),
244 pointer_default(unique)
245 ]
246 interface IVMRImagePresenter : IUnknown
247 {
248 HRESULT StartPresenting([in] DWORD_PTR dwUserID);
249 HRESULT StopPresenting([in] DWORD_PTR dwUserID);
250 HRESULT PresentImage([in] DWORD_PTR dwUserID, [in] VMRPRESENTATIONINFO* lpPresInfo);
251 };
252
253 [
254 local,
255 object,
256 uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52),
257 pointer_default(unique)
258 ]
259 interface IVMRSurfaceAllocator : IUnknown
260 {
261 HRESULT AllocateSurface([in] DWORD_PTR dwUserID, [in] VMRALLOCATIONINFO* lpAllocInfo, [in] [out] DWORD* lpdwActualBuffers, [out] LPDIRECTDRAWSURFACE7 *lplpSurface);
262 HRESULT FreeSurface([in] DWORD_PTR dwID);
263 HRESULT PrepareSurface([in] DWORD_PTR dwUserID, [in] LPDIRECTDRAWSURFACE7 lpSurface, [in] DWORD dwSurfaceFlags);
264 HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify);
265 };
266
267 [
268 local,
269 object,
270 uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2),
271 pointer_default(unique)
272 ]
273 interface IVMRSurfaceAllocatorNotify : IUnknown
274 {
275 HRESULT AdviseSurfaceAllocator([in] DWORD_PTR dwUserID, [in] IVMRSurfaceAllocator* lpIVRMSurfaceAllocator);
276 HRESULT SetDDrawDevice([in] LPDIRECTDRAW7 lpDDrawDevice, [in] HMONITOR hMonitor);
277 HRESULT ChangeDDrawDevice([in] LPDIRECTDRAW7 lpDDrawDevice, [in] HMONITOR hMonitor);
278 HRESULT RestoreDDrawSurfaces();
279 HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR Param1, [in] LONG_PTR Param2);
280 HRESULT SetBorderColor([in] COLORREF clrBorder);
281 };
282
283 [
284 local,
285 object,
286 uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7),
287 pointer_default(unique)
288 ]
289 interface IVMRWindowlessControl : IUnknown
290 {
291 HRESULT GetNativeVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight, [out] LONG* lpARWidth, [out] LONG* lpARHeight);
292 HRESULT GetMinIdealVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight);
293 HRESULT GetMaxIdealVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight);
294 HRESULT SetVideoPosition([in] const LPRECT lpSRCRect, [in] const LPRECT lpDSTRect);
295 HRESULT GetVideoPosition([out] LPRECT lpSRCRect, [out] LPRECT lpDSTRect);
296 HRESULT GetAspectRatioMode([out] DWORD* lpAspectRatioMode);
297 HRESULT SetAspectRatioMode([in] DWORD AspectRatioMode);
298 HRESULT SetVideoClippingWindow([in] HWND hwnd);
299 HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
300 HRESULT DisplayModeChanged();
301 HRESULT GetCurrentImage([out] BYTE** lpDib);
302 HRESULT SetBorderColor([in] COLORREF Clr);
303 HRESULT GetBorderColor([out] COLORREF* lpClr);
304 HRESULT SetColorKey([in] COLORREF Clr);
305 HRESULT GetColorKey([out] COLORREF* lpClr);
306 };
307
308 [
309 local,
310 object,
311 uuid(1c1a17b0-bed0-415d-974b-dc6696131599),
312 pointer_default(unique)
313 ]
314 interface IVMRMixerControl : IUnknown
315 {
316 HRESULT SetAlpha([in] DWORD dwStreamID, [in] float Alpha);
317 HRESULT GetAlpha([in] DWORD dwStreamID, [out] float* pAlpha);
318 HRESULT SetZOrder([in] DWORD dwStreamID, [in] DWORD dwZ);
319 HRESULT GetZOrder([in] DWORD dwStreamID, [out] DWORD* pZ);
320 HRESULT SetOutputRect([in] DWORD dwStreamID, [in] const NORMALIZEDRECT *pRect);
321 HRESULT GetOutputRect([in] DWORD dwStreamID, [out] NORMALIZEDRECT *pRect);
322 HRESULT SetBackgroundClr([in] COLORREF ClrBkg);
323 HRESULT GetBackgroundClr([in] COLORREF* lpClrBkg);
324 HRESULT SetMixingPrefs([in] DWORD dwMixerPrefs);
325 HRESULT GetMixingPrefs([out] DWORD* pdwMixerPrefs);
326 };
327
328 [
329 object,
330 local,
331 uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce),
332 pointer_default(unique)
333 ]
334 interface IVMRMonitorConfig : IUnknown
335 {
336 HRESULT SetMonitor([in] const VMRGUID *pGUID);
337 HRESULT GetMonitor([out] VMRGUID *pGUID);
338 HRESULT SetDefaultMonitor([in] const VMRGUID *pGUID);
339 HRESULT GetDefaultMonitor([out] VMRGUID *pGUID);
340 HRESULT GetAvailableMonitors([out, size_is(dwMaxInfoArraySize)] VMRMONITORINFO* pInfo, [in] DWORD dwMaxInfoArraySize, [out] DWORD* pdwNumDevices);
341 };
342
343
344 [
345 object,
346 local,
347 uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36),
348 pointer_default(unique)
349 ]
350 interface IVMRFilterConfig : IUnknown
351 {
352 HRESULT SetImageCompositor([in] IVMRImageCompositor* lpVMRImgCompositor);
353 HRESULT SetNumberOfStreams([in] DWORD dwMaxStreams);
354 HRESULT GetNumberOfStreams([out] DWORD* pdwMaxStreams);
355 HRESULT SetRenderingPrefs([in] DWORD dwRenderFlags);
356 HRESULT GetRenderingPrefs([out] DWORD* pdwRenderFlags);
357 HRESULT SetRenderingMode([in] DWORD Mode);
358 HRESULT GetRenderingMode([out] DWORD* pMode);
359 }
360
361
362 [
363 object,
364 local,
365 uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd),
366 pointer_default(unique)
367 ]
368 interface IVMRAspectRatioControl : IUnknown
369 {
370 HRESULT GetAspectRatioMode([out] LPDWORD lpdwARMode);
371 HRESULT SetAspectRatioMode([in] DWORD dwARMode);
372 }
373
374 [
375 object,
376 local,
377 uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f),
378 pointer_default(unique)
379 ]
380 interface IVMRDeinterlaceControl : IUnknown
381 {
382
383 HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc* lpVideoDescription, [in] [out] LPDWORD lpdwNumDeinterlaceModes, [out] LPGUID lpDeinterlaceModes);
384 HRESULT GetDeinterlaceModeCaps([in] LPGUID lpDeinterlaceMode, [in] VMRVideoDesc* lpVideoDescription, [in] [out] VMRDeinterlaceCaps* lpDeinterlaceCaps);
385 HRESULT GetDeinterlaceMode([in] DWORD dwStreamID, [out] LPGUID lpDeinterlaceMode );
386 HRESULT SetDeinterlaceMode([in] DWORD dwStreamID, [in] LPGUID lpDeinterlaceMode);
387 HRESULT GetDeinterlacePrefs([out] LPDWORD lpdwDeinterlacePrefs);
388 HRESULT SetDeinterlacePrefs([in] DWORD dwDeinterlacePrefs);
389 HRESULT GetActualDeinterlaceMode([in] DWORD dwStreamID, [out] LPGUID lpDeinterlaceMode);
390 }
391
392 [
393 object,
394 local,
395 uuid(1E673275-0257-40aa-AF20-7C608D4A0428),
396 pointer_default(unique)
397 ]
398 interface IVMRMixerBitmap : IUnknown
399 {
400 HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *pBmpParms);
401 HRESULT UpdateAlphaBitmapParameters([in] PVMRALPHABITMAP pBmpParms);
402 HRESULT GetAlphaBitmapParameters([out] PVMRALPHABITMAP pBmpParms);
403 };
404
405 [
406 local,
407 object,
408 uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82),
409 pointer_default(unique)
410 ]
411 interface IVMRImageCompositor : IUnknown
412 {
413 HRESULT InitCompositionTarget([in] IUnknown* pD3DDevice, [in] LPDIRECTDRAWSURFACE7 pddsRenderTarget);
414 HRESULT TermCompositionTarget([in] IUnknown* pD3DDevice, [in] LPDIRECTDRAWSURFACE7 pddsRenderTarget);
415 HRESULT SetStreamMediaType([in] DWORD dwStrmID, [in] AM_MEDIA_TYPE* pmt, [in] BOOL fTexture);
416 HRESULT CompositeImage([in] IUnknown* pD3DDevice, [in] LPDIRECTDRAWSURFACE7 pddsRenderTarget, [in] AM_MEDIA_TYPE* pmtRenderTarget, [in] REFERENCE_TIME rtStart, [in] REFERENCE_TIME rtEnd, [in] DWORD dwClrBkGnd, [in] VMRVIDEOSTREAMINFO* pVideoStreamInfo, [in] UINT cStreams);
417 };
418
419 [
420 object,
421 local,
422 uuid(058d1f11-2a54-4bef-bd54-df706626b727),
423 pointer_default(unique)
424 ]
425 interface IVMRVideoStreamControl: IUnknown
426 {
427 HRESULT SetColorKey([in] LPDDCOLORKEY lpClrKey);
428 HRESULT GetColorKey([out] LPDDCOLORKEY lpClrKey);
429 HRESULT SetStreamActiveState([in] BOOL fActive);
430 HRESULT GetStreamActiveState([out] BOOL* lpfActive);
431 };
432
433 [
434 local,
435 object,
436 uuid(a9849bbe-9ec8-4263-b764-62730f0d15d0),
437 pointer_default(unique)
438 ]
439 interface IVMRSurface : IUnknown
440 {
441 HRESULT IsSurfaceLocked();
442 HRESULT LockSurface([out] BYTE** lpSurface);
443 HRESULT UnlockSurface();
444 HRESULT GetSurface([out] LPDIRECTDRAWSURFACE7 *lplpSurface);
445 };
446
447 [
448 local,
449 object,
450 uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178),
451 pointer_default(unique)
452 ]
453
454 interface IVMRImagePresenterConfig : IUnknown
455 {
456 HRESULT SetRenderingPrefs([in] DWORD dwRenderFlags);
457 HRESULT GetRenderingPrefs([out] DWORD* dwRenderFlags);
458 }
459
460 [
461 local,
462 object,
463 uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea),
464 pointer_default(unique)
465 ]
466
467 interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
468 {
469 HRESULT SetXlcModeDDObjAndPrimarySurface([in] LPDIRECTDRAW7 lpDDObj, [in] LPDIRECTDRAWSURFACE7 lpPrimarySurf);
470 HRESULT GetXlcModeDDObjAndPrimarySurface([out] LPDIRECTDRAW7* lpDDObj, [out] LPDIRECTDRAWSURFACE7* lpPrimarySurf);
471 }
472
473 [
474 local,
475 object,
476 uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a),
477 pointer_default(unique)
478 ]
479 interface IVPManager : IUnknown
480 {
481 HRESULT SetVideoPortIndex([in] DWORD dwVideoPortIndex);
482 HRESULT GetVideoPortIndex([out] DWORD* pdwVideoPortIndex);
483 };
484