Add .gitattributes and .gitignore files and normalize line endings in the repository...
[reactos.git] / sdk / include / psdk / vmr9.idl
1 /*
2 * Copyright 2008 Maarten Lankhorst
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19 import "unknwn.idl";
20
21 cpp_quote("#if 0")
22 interface IDirect3DSurface9;
23 interface IDirect3DDevice9;
24 typedef LONGLONG REFERENCE_TIME;
25 typedef DWORD D3DFORMAT;
26 typedef DWORD D3DPOOL;
27 typedef HANDLE HMONITOR;
28 typedef struct { char dummy; } AM_MEDIA_TYPE;
29 typedef struct { char dummy; } D3DCOLOR;
30 cpp_quote("#endif")
31
32 interface IVMRSurface9;
33 interface IVMRSurfaceAllocator9;
34 interface IVMRSurfaceAllocatorEx9;
35 interface IVMRSurfaceAllocatorNotify9;
36 interface IVMRImagePresenter9;
37 interface IVMRImagePresenterConfig9;
38 interface IVMRMonitorConfig9;
39 interface IVMRWindowlessControl9;
40 interface IVMRMixerControl9;
41 interface IVMRImageCompositor9;
42 interface IVMRMixerBitmap9;
43 interface IVMRFilterConfig9;
44 interface IVMRAspectRatioControl9;
45 interface IVMRVideoStreamControl9;
46
47 typedef enum _VMR9PresentationFlags
48 {
49 VMR9Sample_SyncPoint = 0x1,
50 VMR9Sample_Preroll = 0x2,
51 VMR9Sample_Discontinuity = 0x4,
52 VMR9Sample_TimeValid = 0x8,
53 VMR9Sample_SrcDstRectsValid = 0x10
54 } VMR9PresentationFlags;
55
56 typedef struct _VMR9PresentationInfo
57 {
58 DWORD dwFlags; /* Flags defined above */
59 IDirect3DSurface9 *lpSurf;
60 REFERENCE_TIME rtStart;
61 REFERENCE_TIME rtEnd;
62 SIZE szAspectRatio;
63 RECT rcSrc;
64 RECT rcDst;
65 DWORD dwReserved1;
66 DWORD dwReserved2;
67 } VMR9PresentationInfo;
68
69 [
70 local,
71 object,
72 uuid(69188c61-12a3-40f0-8ffc-342e7b433fd7),
73 helpstring("IVMRImagePresenter9 interface"),
74 pointer_default(unique)
75 ]
76 interface IVMRImagePresenter9 : IUnknown
77 {
78 HRESULT StartPresenting([in] DWORD_PTR id);
79 HRESULT StopPresenting([in] DWORD_PTR id);
80 HRESULT PresentImage([in] DWORD_PTR id, [in] VMR9PresentationInfo *info);
81 };
82
83 typedef enum _VMR9SurfaceAllocationFlags
84 {
85 VMR9AllocFlag_3DRenderTarget = 0x1,
86 VMR9AllocFlag_DXVATarget = 0x2,
87 VMR9AllocFlag_TextureSurface = 0x4,
88 VMR9AllocFlag_OffscreenSurface = 0x8,
89 VMR9AllocFlag_RGBDynamicSwitch = 0x10,
90 VMR9AllocFlag_UsageReserved = 0xe0,
91 VMR9AllocFlag_UsageMask = 0xff,
92 } VMR9SurfaceAllocationFlags;
93
94 typedef struct _VMR9AllocationInfo
95 {
96 DWORD dwFlags; /* Flags defined above */
97 DWORD dwWidth;
98 DWORD dwHeight;
99 D3DFORMAT Format;
100 D3DPOOL Pool;
101 DWORD MinBuffers;
102 SIZE szAspectRatio;
103 SIZE szNativeSize;
104 } VMR9AllocationInfo;
105
106 [
107 local,
108 object,
109 uuid(8d5148ea-3f5d-46cf-9df1-d1b896eedb1f),
110 helpstring("IVMRSurfaceAllocator9 interface"),
111 pointer_default(unique)
112 ]
113 interface IVMRSurfaceAllocator9 : IUnknown
114 {
115 HRESULT InitializeDevice([in] DWORD_PTR id, [in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers);
116 HRESULT TerminateDevice([in] DWORD_PTR id);
117 HRESULT GetSurface([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface);
118 HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify9 *allocnotify);
119 };
120
121 [
122 local,
123 object,
124 uuid(6de9a68a-a928-4522-bf57-655ae3866456),
125 helpstring("IVMRSurfaceAllocatorEx9 interface"),
126 pointer_default(unique)
127 ]
128 interface IVMRSurfaceAllocatorEx9 : IVMRSurfaceAllocator9
129 {
130 HRESULT GetSurfaceEx([in] DWORD_PTR id, [in] DWORD surfaceindex, [in] DWORD flags, [out] IDirect3DSurface9 **surface, [out] RECT *dest);
131 };
132
133 [
134 local,
135 object,
136 uuid(dca3f5df-bb3a-4d03-bd81-84614bfbfa0c),
137 helpstring("IVMRSurfaceAllocatorNotify9 interface"),
138 pointer_default(unique)
139 ]
140 interface IVMRSurfaceAllocatorNotify9 : IUnknown
141 {
142 HRESULT AdviseSurfaceAllocator([in] DWORD_PTR id, [in] IVMRSurfaceAllocator9 *alloc);
143 HRESULT SetD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
144 HRESULT ChangeD3DDevice([in] IDirect3DDevice9 *device, [in] HMONITOR monitor);
145 HRESULT AllocateSurfaceHelper([in] VMR9AllocationInfo *allocinfo, [in, out] DWORD *numbuffers, [out] IDirect3DSurface9 **surface);
146 HRESULT NotifyEvent([in] LONG code, [in] LONG_PTR param1, [in] LONG_PTR param2);
147 };
148
149 typedef enum _VMR9AspectRatioMode
150 {
151 VMR9ARMode_None,
152 VMR9ARMode_LetterBox
153 } VMR9AspectRatioMode;
154
155 [
156 local,
157 object,
158 uuid(8f537d09-f85e-4414-b23b-502e54c79927),
159 helpstring("IVMRWindowlessControl interface"),
160 pointer_default(unique)
161 ]
162 interface IVMRWindowlessControl9 : IUnknown
163 {
164 HRESULT GetNativeVideoSize([out] LONG *width, [out] LONG *height, [out] LONG *arwidth, [out] LONG *arheight);
165 HRESULT GetMinIdealVideoSize([out] LONG *width, [out] LONG *height);
166 HRESULT GetMaxIdealVideoSize([out] LONG *width, [out] LONG *height);
167 HRESULT SetVideoPosition([in] const RECT *source, [in] const RECT *dest);
168 HRESULT GetVideoPosition([out] RECT *source, [out] RECT *dest);
169 HRESULT GetAspectRatioMode([out] DWORD *mode);
170 HRESULT SetAspectRatioMode([in] DWORD mode);
171 HRESULT SetVideoClippingWindow([in] HWND hwnd);
172 HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
173 HRESULT DisplayModeChanged();
174 HRESULT GetCurrentImage([out] BYTE **dib);
175 HRESULT SetBorderColor([in] COLORREF color);
176 HRESULT GetBorderColor([out] COLORREF *color);
177 };
178
179 typedef enum _VMR9MixerPrefs
180 {
181 /* Decimation */
182 MixerPref9_NoDecimation = 0x1,
183 MixerPref9_DecimateOutput = 0x2,
184 MixerPref9_ARAdjustXorY = 0x4,
185 MixerPref9_NonSquareMixing = 0x8,
186 MixerPref9_DecimateMask = 0xf,
187
188 /* Filtering */
189 MixerPref9_BiLinearFiltering = 0x10,
190 MixerPref9_PointFiltering = 0x20,
191 MixerPref9_AnisotropicFiltering = 0x40,
192 MixerPref9_PyramidalQuadFiltering = 0x80,
193 MixerPref9_GaussianQuadFiltering = 0x100,
194 MixerPref9_FilteringReserved = 0xe00,
195 MixerPref9_FilteringMask = 0xff0,
196
197 /* Render target */
198 MixerPref9_RenderTargetRGB = 0x1000,
199 MixerPref9_RenderTargetYUV = 0x2000,
200 MixerPref9_RenderTargetReserved = 0xfc000,
201
202 MixerPref9_DynamicSwitchToBOB = 0x100000,
203 MixerPref9_DynamicDecimateBy2 = 0x200000,
204 MixerPref9_DynamicReserved = 0xc00000,
205 MixerPref9_DynamicMask = 0xf00000,
206 } VMR9MixerPrefs;
207
208 typedef struct _VMR9NormalizedRect
209 {
210 FLOAT left;
211 FLOAT top;
212 FLOAT right;
213 FLOAT bottom;
214 } VMR9NormalizedRect;
215
216 typedef enum _VMR9ProcAmpControlFlags
217 {
218 ProcAmpControl9_Brightness = 0x1,
219 ProcAmpControl9_Contrast = 0x2,
220 ProcAmpControl9_Hue = 0x4,
221 ProcAmpControl9_Saturation = 0x8,
222 ProcAmpControl9_Mask = 0xf
223 } VMR9ProcAmpControlFlags;
224
225 typedef struct _VMR9ProcAmpControl
226 {
227 DWORD dwSize;
228 DWORD dwFlags;
229 FLOAT Brightness;
230 FLOAT Contrast;
231 FLOAT Hue;
232 FLOAT Saturation;
233 } VMR9ProcAmpControl;
234
235 typedef struct _VMR9ProcAmpControlRange
236 {
237 DWORD dwSize;
238 VMR9ProcAmpControlFlags dwProperty;
239 FLOAT MinValue;
240 FLOAT MaxValue;
241 FLOAT DefaultValue;
242 FLOAT StepSize;
243 } VMR9ProcAmpControlRange;
244
245 [
246 local,
247 object,
248 uuid(1a777eaa-47c8-4930-b2c9-8fee1c1b0f3b),
249 helpstring("IVMRMixerControl9 interface"),
250 pointer_default(unique)
251 ]
252 interface IVMRMixerControl9 : IUnknown
253 {
254 HRESULT SetAlpha([in] DWORD streamid, [in] FLOAT alpha);
255 HRESULT GetAlpha([in] DWORD streamid, [out] FLOAT *alpha);
256 HRESULT SetZOrder([in] DWORD streamid, [in] DWORD zorder);
257 HRESULT GetZOrder([in] DWORD streamid, [out] DWORD *zorder);
258 HRESULT SetOutputRect([in] DWORD streamid, [in] const VMR9NormalizedRect *rect);
259 HRESULT GetOutputRect([in] DWORD streamid, [out] VMR9NormalizedRect *rect);
260 HRESULT SetBackgroundClr([in] COLORREF back);
261 HRESULT GetBackgroundClr([out] COLORREF *back);
262 HRESULT SetMixingPrefs([in] DWORD mixingprefs);
263 HRESULT GetMixingPrefs([out] DWORD *mixingprefs);
264 HRESULT SetProcAmpControl([in] DWORD streamid, [in] VMR9ProcAmpControl *control);
265 HRESULT GetProcAmpControl([in] DWORD streamid, [in, out] VMR9ProcAmpControl *control);
266 HRESULT GetProcAmpControlRange([in] DWORD streamid, [in, out] VMR9ProcAmpControlRange *controlrange);
267 };
268
269 typedef struct _VMR9AlphaBitmap
270 {
271 DWORD dwFlags;
272 HDC hdc;
273 IDirect3DSurface9 *pDDS;
274 RECT rSrc;
275 VMR9NormalizedRect *rDest;
276 FLOAT fAlpha;
277 COLORREF clrSrcKey;
278 DWORD dwFilterMode;
279 } VMR9AlphaBitmap;
280
281 typedef enum _VMR9AlphaBitmapFlags
282 {
283 VMR9AlphaBitmap_Disable = 0x1,
284 VMR9AlphaBitmap_hDC = 0x2,
285 VMR9AlphaBitmap_EntireDDS = 0x4,
286 VMR9AlphaBitmap_SrcColorKey = 0x8,
287 VMR9AlphaBitmap_SrcRect = 0x10,
288 VMR9AlphaBitmap_FilterMode = 0x20
289 } VMR9AlphaBitmapFlags;
290
291 [
292 local,
293 object,
294 uuid(ced175e5-1935-4820-81bd-ff6ad00c9108),
295 helpstring("IVMRMixerBitmap interface"),
296 pointer_default(unique)
297 ]
298 interface IVMRMixerBitmap9 : IUnknown
299 {
300 HRESULT SetAlphaBitmap([in] const VMR9AlphaBitmap *bitmap);
301 HRESULT UpdateAlphaBitmapParameters([in] const VMR9AlphaBitmap *bitmap);
302 HRESULT GetAlphaBitmapParameters([out] VMR9AlphaBitmap *bitmap);
303 };
304
305 [
306 local,
307 object,
308 uuid(dfc581a1-6e1f-4c3a-8d0a-5e9792ea2afc),
309 helpstring("IVMRSurface interface"),
310 pointer_default(unique)
311 ]
312 interface IVMRSurface9 : IUnknown
313 {
314 HRESULT IsSurfaceLocked();
315 HRESULT LockSurface([out] BYTE **surface);
316 HRESULT UnlockSurface();
317 HRESULT GetSurface([out] IDirect3DSurface9 **surface);
318 };
319
320 typedef enum _VMR9RenderPrefs
321 {
322 RenderPrefs9_DoNotRenderBorder = 0x1,
323 RenderPrefs9_Mask = 0x1
324 } VMR9RenderPrefs;
325
326 [
327 local,
328 object,
329 uuid(45c15cab-6e22-420a-8043-ae1f0ac02c7d),
330 helpstring("IVMRImagePresenterConfig9 interface"),
331 pointer_default(unique)
332 ]
333 interface IVMRImagePresenterConfig9 : IUnknown
334 {
335 HRESULT SetRenderingPrefs([in] DWORD renderflags);
336 HRESULT GetRenderingPrefs([out] DWORD *renderflags);
337 };
338
339 [
340 local,
341 object,
342 uuid(d0cfe38b-93e7-4772-8957-0400c49a4485),
343 helpstring("IVMRMixerStreamConfig interface"),
344 pointer_default(unique)
345 ]
346 interface IVMRVideoStreamControl9: IUnknown
347 {
348 HRESULT SetStreamActiveState([in] BOOL active);
349 HRESULT GetStreamActiveState([out] BOOL *active);
350 };
351
352 typedef enum _VMR9Mode
353 {
354 VMR9Mode_Windowed = 0x1,
355 VMR9Mode_Windowless = 0x2,
356 VMR9Mode_Renderless = 0x4,
357 VMR9Mode_Mask = 0x7
358 } VMR9Mode;
359
360 [
361 local,
362 object,
363 uuid(5a804648-4f66-4867-9c43-4f5c822cf1b8),
364 helpstring("IVMRFilterConfig9 interface"),
365 pointer_default(unique)
366 ]
367 interface IVMRFilterConfig9 : IUnknown
368 {
369 HRESULT SetImageCompositor([in] IVMRImageCompositor9 *compositor);
370 HRESULT SetNumberOfStreams([in] DWORD max);
371 HRESULT GetNumberOfStreams([out] DWORD *max);
372 HRESULT SetRenderingPrefs([in] DWORD renderflags);
373 HRESULT GetRenderingPrefs([out] DWORD *renderflags);
374 HRESULT SetRenderingMode([in] DWORD mode);
375 HRESULT GetRenderingMode([out] DWORD *mode);
376 };
377
378 [
379 local,
380 object,
381 uuid(00d96c29-bbde-4efc-9901-bb5036392146),
382 helpstring("IVMRAspectRatioControl9 interface"),
383 pointer_default(unique)
384 ]
385 interface IVMRAspectRatioControl9 : IUnknown
386 {
387 HRESULT GetAspectRatioMode([out] DWORD *mode);
388 HRESULT SetAspectRatioMode([in] DWORD mode);
389 }
390
391 #define VMR9DEVICENAMELEN 32
392 #define VMR9DEVICEDESCRIPTIONLEN 512
393
394 typedef struct _VMR9MonitorInfo
395 {
396 UINT uDevID;
397 RECT rcMonitor;
398 HMONITOR hMon;
399 DWORD dwFlags;
400 WCHAR szDevice[VMR9DEVICENAMELEN];
401 WCHAR szDescription[VMR9DEVICEDESCRIPTIONLEN];
402 LARGE_INTEGER liDriverVersion;
403 DWORD dwVendorId;
404 DWORD dwDeviceId;
405 DWORD dwSubSysId;
406 DWORD dwRevision;
407 } VMR9MonitorInfo;
408
409 [
410 local,
411 object,
412 uuid(46c2e457-8ba0-4eef-b80b-0680f0978749),
413 helpstring("IVMRMonitorConfig9 interface"),
414 pointer_default(unique)
415 ]
416 interface IVMRMonitorConfig9 : IUnknown
417 {
418 HRESULT SetMonitor([in] UINT uDev);
419 HRESULT GetMonitor([out] UINT *uDev);
420 HRESULT SetDefaultMonitor([in] UINT uDev);
421 HRESULT GetDefaultMonitor([out] UINT *uDev);
422 HRESULT GetAvailableMonitors([out, size_is(arraysize)] VMR9MonitorInfo *info, [in] DWORD arraysize, [out] DWORD *numdev);
423 };
424
425 typedef enum _VMR9DeinterlacePrefs
426 {
427 DeinterlacePref9_NextBest = 0x1,
428 DeinterlacePref9_BOB = 0x2,
429 DeinterlacePref9_Weave = 0x4,
430 DeinterlacePref9_Mask = 0x7
431 } VMR9DeinterlacePrefs;
432
433 typedef enum _VMR9DeinterlaceTech
434 {
435 DeinterlaceTech9_Unknown = 0,
436 DeinterlaceTech9_BOBLineReplicate = 0x1,
437 DeinterlaceTech9_BOBVerticalStretch = 0x2,
438 DeinterlaceTech9_MedianFiltering = 0x4,
439 DeinterlaceTech9_EdgeFiltering = 0x10,
440 DeinterlaceTech9_FieldAdaptive = 0x20,
441 DeinterlaceTech9_PixelAdaptive = 0x40,
442 DeinterlaceTech9_MotionVectorSteered = 0x80
443 } VMR9DeinterlaceTech;
444
445 typedef struct _VMR9Frequency
446 {
447 DWORD dwNumerator;
448 DWORD dwDenominator;
449 } VMR9Frequency;
450
451 typedef enum _VMR9_SampleFormat
452 {
453 VMR9_SampleReserved = 1,
454 VMR9_SampleProgressiveFrame = 2,
455 VMR9_SampleFieldInterleavedEvenFirst = 3,
456 VMR9_SampleFieldInterleavedOddFirst = 4,
457 VMR9_SampleFieldSingleEven = 5,
458 VMR9_SampleFieldSingleOdd = 6,
459 } VMR9_SampleFormat;
460
461 typedef struct _VMR9VideoDesc
462 {
463 DWORD dwSize;
464 DWORD dwSampleWidth;
465 DWORD dwSampleHeight;
466 VMR9_SampleFormat SampleFormat;
467 DWORD dwFourCC;
468 VMR9Frequency InputSampleFreq;
469 VMR9Frequency OutputFrameFreq;
470 } VMR9VideoDesc;
471
472 typedef struct _VMR9DeinterlaceCaps {
473 DWORD dwSize;
474 DWORD dwNumPreviousOutputFrames;
475 DWORD dwNumForwardRefSamples;
476 DWORD dwNumBackwardRefSamples;
477 VMR9DeinterlaceTech DeinterlaceTechnology;
478 } VMR9DeinterlaceCaps;
479
480 [
481 local,
482 object,
483 uuid(a215fb8d-13c2-4f7f-993c-003d6271a459),
484 helpstring("IVMRDeinterlaceControl9 interface"),
485 pointer_default(unique)
486 ]
487 interface IVMRDeinterlaceControl9 : IUnknown
488 {
489 HRESULT GetNumberOfDeinterlaceModes([in] VMR9VideoDesc *desc, [in, out] DWORD *nummodes, [out] GUID *modes);
490 HRESULT GetDeinterlaceModeCaps([in] GUID *mode, [in] VMR9VideoDesc *desc, [out] VMR9DeinterlaceCaps *caps);
491 HRESULT GetDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
492 HRESULT SetDeinterlaceMode([in] DWORD streamid, [in] GUID *mode);
493 HRESULT GetDeinterlacePrefs([out] DWORD *prefs);
494 HRESULT SetDeinterlacePrefs([in] DWORD prefs);
495 HRESULT GetActualDeinterlaceMode([in] DWORD streamid, [out] GUID *mode);
496 };
497
498 typedef struct _VMR9VideoStreamInfo {
499 IDirect3DSurface9 *pddsVideoSurface;
500 DWORD dwWidth;
501 DWORD dwHeight;
502 DWORD dwStrmID;
503 FLOAT fAlpha;
504 VMR9NormalizedRect rNormal;
505 REFERENCE_TIME rtStart;
506 REFERENCE_TIME rtEnd;
507 VMR9_SampleFormat SampleFormat;
508 } VMR9VideoStreamInfo;
509
510 [
511 local,
512 object,
513 uuid(4a5c89eb-df51-4654-ac2a-e48e02bbabf6),
514 helpstring("IVMRImageCompositor9 interface"),
515 pointer_default(unique)
516 ]
517 interface IVMRImageCompositor9 : IUnknown
518 {
519 HRESULT InitCompositionDevice([in] IUnknown *d3ddev);
520 HRESULT TermCompositionDevice([in] IUnknown *d3ddev);
521 HRESULT CompositeImage([in] IUnknown *d3ddev, [in] IDirect3DSurface9 *d3dtarget, [in] AM_MEDIA_TYPE *mttarget,
522 [in] REFERENCE_TIME start, [in] REFERENCE_TIME stop, D3DCOLOR back,
523 [in] VMR9VideoStreamInfo *info, [in] UINT streams);
524 };