xref: /reactos/sdk/include/dxsdk/vmrender.idl (revision c2c66aff)
1
2cpp_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;
12cpp_quote ("#endif")
13
14cpp_quote("#include <ddraw.h>")
15
16cpp_quote("#define VMRBITMAP_DISABLE            0x00000001")
17cpp_quote("#define VMRBITMAP_HDC                0x00000002")
18cpp_quote("#define VMRBITMAP_ENTIREDDS          0x00000004")
19cpp_quote("#define VMRBITMAP_SRCCOLORKEY        0x00000008")
20cpp_quote("#define VMRBITMAP_SRCRECT            0x00000010")
21
22interface IVMRSurface;
23interface IVMRSurfaceAllocator;
24interface IVMRSurfaceAllocatorNotify;
25interface IVMRImagePresenter;
26interface IVMRImagePresenterConfig;
27interface IVMRWindowlessControl;
28interface IVMRMixerControl;
29interface IVMRMixerBitmap;
30interface IVMRFilterConfig;
31interface IVMRAspectRatioControl;
32interface IVMRDeinterlaceControl;
33interface IVMRMonitorConfig;
34interface IVMRImageCompositor;
35interface IVMRVideoStreamControl;
36
37#define VMRDEVICENAMELEN 32
38#define VMRDEVICEDESCRIPTIONLEN  256
39
40typedef 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
49typedef 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
59typedef enum
60{
61    VMR_ARMODE_NONE,
62    VMR_ARMODE_LETTER_BOX
63} VMR_ASPECT_RATIO_MODE;
64
65
66typedef 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
89typedef 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
103typedef enum
104{
105    VMRMode_Windowed = 0x00000001,
106    VMRMode_Windowless = 0x00000002,
107    VMRMode_Renderless = 0x00000004,
108    VMRMode_Mask = 0x00000007,
109} VMRMode;
110
111enum
112{
113    MAX_NUMBER_OF_STREAMS = 16
114};
115
116typedef enum
117{
118    DeinterlacePref_NextBest = 0x01,
119    DeinterlacePref_BOB = 0x02,
120    DeinterlacePref_Weave = 0x04,
121    DeinterlacePref_Mask = 0x07
122} VMRDeinterlacePrefs;
123
124typedef 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
136typedef 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
149typedef 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
161typedef struct _NORMALIZEDRECT
162{
163    float left;
164    float top;
165    float right;
166    float bottom;
167} NORMALIZEDRECT, *PNORMALIZEDRECT;
168
169typedef struct tagVMRGUID
170{
171    struct _GUID *pGUID, GUID;
172} VMRGUID;
173
174typedef struct tagVMRMONITORINFO
175{
176    VMRGUID guid;
177    RECT rcMonitor;
178    HMONITOR hMon;
179    DWORD dwFlags;
180    wchar_t szDevice[VMRDEVICENAMELEN];
181    wchar_t szDescription[VMRDEVICEDESCRIPTIONLEN];
182    LARGE_INTEGER liDriverVersion;
183    DWORD dwVendorId;
184    DWORD dwDeviceId;
185    DWORD dwSubSysId;
186    DWORD dwRevision;
187} VMRMONITORINFO;
188
189typedef struct _VMRFrequency
190{
191    DWORD dwNumerator;
192    DWORD dwDenominator;
193} VMRFrequency;
194
195typedef struct _VMRVideoDesc
196{
197    DWORD dwSize;
198    DWORD dwSampleWidth;
199    DWORD dwSampleHeight;
200    BOOL SingleFieldPerSample;
201    DWORD dwFourCC;
202    VMRFrequency InputSampleFreq;
203    VMRFrequency OutputFrameFreq;
204} VMRVideoDesc;
205
206typedef struct _VMRDeinterlaceCaps
207{
208    DWORD dwSize;
209    DWORD dwNumPreviousOutputFrames;
210    DWORD dwNumForwardRefSamples;
211    DWORD dwNumBackwardRefSamples;
212    VMRDeinterlaceTech  DeinterlaceTechnology;
213} VMRDeinterlaceCaps;
214
215typedef struct _VMRALPHABITMAP
216{
217    DWORD dwFlags;
218    HDC hdc;
219    LPDIRECTDRAWSURFACE7 pDDS;
220    RECT rSrc;
221    NORMALIZEDRECT rDest;
222    FLOAT fAlpha;
223    COLORREF clrSrcKey;
224} VMRALPHABITMAP, *PVMRALPHABITMAP;
225
226typedef struct _VMRVIDEOSTREAMINFO
227{
228    LPDIRECTDRAWSURFACE7 pddsVideoSurface;
229    DWORD dwWidth;
230    DWORD dwHeight;
231    FLOAT dwStrmID;
232    FLOAT fAlpha;
233    DDCOLORKEY ddClrKey;
234    NORMALIZEDRECT rNormal;
235} VMRVIDEOSTREAMINFO;
236
237
238
239[
240    local,
241    object,
242    uuid(CE704FE7-E71E-41fb-BAA2-C4403E1182F5),
243    pointer_default(unique)
244]
245interface IVMRImagePresenter : IUnknown
246{
247    HRESULT StartPresenting([in] DWORD_PTR dwUserID);
248    HRESULT StopPresenting([in] DWORD_PTR dwUserID);
249    HRESULT PresentImage([in] DWORD_PTR dwUserID, [in] VMRPRESENTATIONINFO* lpPresInfo);
250};
251
252[
253    local,
254    object,
255    uuid(31ce832e-4484-458b-8cca-f4d7e3db0b52),
256    pointer_default(unique)
257]
258interface IVMRSurfaceAllocator : IUnknown
259{
260    HRESULT AllocateSurface([in] DWORD_PTR dwUserID, [in] VMRALLOCATIONINFO* lpAllocInfo, [in] [out] DWORD* lpdwActualBuffers, [out] LPDIRECTDRAWSURFACE7 *lplpSurface);
261    HRESULT FreeSurface([in] DWORD_PTR dwID);
262    HRESULT PrepareSurface([in] DWORD_PTR dwUserID, [in] LPDIRECTDRAWSURFACE7 lpSurface, [in] DWORD dwSurfaceFlags);
263    HRESULT AdviseNotify([in] IVMRSurfaceAllocatorNotify* lpIVMRSurfAllocNotify);
264};
265
266[
267    local,
268    object,
269    uuid(aada05a8-5a4e-4729-af0b-cea27aed51e2),
270    pointer_default(unique)
271]
272interface IVMRSurfaceAllocatorNotify : IUnknown
273{
274    HRESULT AdviseSurfaceAllocator([in] DWORD_PTR dwUserID, [in] IVMRSurfaceAllocator* lpIVRMSurfaceAllocator);
275    HRESULT SetDDrawDevice([in] LPDIRECTDRAW7 lpDDrawDevice, [in] HMONITOR hMonitor);
276    HRESULT ChangeDDrawDevice([in] LPDIRECTDRAW7 lpDDrawDevice, [in] HMONITOR hMonitor);
277    HRESULT RestoreDDrawSurfaces();
278    HRESULT NotifyEvent([in] LONG EventCode, [in] LONG_PTR Param1, [in] LONG_PTR Param2);
279    HRESULT SetBorderColor([in] COLORREF clrBorder);
280};
281
282[
283    local,
284    object,
285    uuid(0eb1088c-4dcd-46f0-878f-39dae86a51b7),
286    pointer_default(unique)
287]
288interface IVMRWindowlessControl : IUnknown
289{
290    HRESULT GetNativeVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight, [out] LONG* lpARWidth, [out] LONG* lpARHeight);
291    HRESULT GetMinIdealVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight);
292    HRESULT GetMaxIdealVideoSize([out] LONG* lpWidth, [out] LONG* lpHeight);
293    HRESULT SetVideoPosition([in] const LPRECT lpSRCRect, [in] const LPRECT lpDSTRect);
294    HRESULT GetVideoPosition([out] LPRECT lpSRCRect, [out] LPRECT lpDSTRect);
295    HRESULT GetAspectRatioMode([out] DWORD* lpAspectRatioMode);
296    HRESULT SetAspectRatioMode([in] DWORD AspectRatioMode);
297    HRESULT SetVideoClippingWindow([in] HWND hwnd);
298    HRESULT RepaintVideo([in] HWND hwnd, [in] HDC hdc);
299    HRESULT DisplayModeChanged();
300    HRESULT GetCurrentImage([out] BYTE** lpDib);
301    HRESULT SetBorderColor([in] COLORREF Clr);
302    HRESULT GetBorderColor([out] COLORREF* lpClr);
303    HRESULT SetColorKey([in] COLORREF Clr);
304    HRESULT GetColorKey([out] COLORREF* lpClr);
305};
306
307[
308    local,
309    object,
310    uuid(1c1a17b0-bed0-415d-974b-dc6696131599),
311    pointer_default(unique)
312]
313interface IVMRMixerControl : IUnknown
314{
315    HRESULT SetAlpha([in] DWORD dwStreamID, [in] float Alpha);
316    HRESULT GetAlpha([in] DWORD dwStreamID, [out] float* pAlpha);
317    HRESULT SetZOrder([in] DWORD dwStreamID, [in] DWORD dwZ);
318    HRESULT GetZOrder([in] DWORD dwStreamID, [out] DWORD* pZ);
319    HRESULT SetOutputRect([in] DWORD dwStreamID, [in] const NORMALIZEDRECT *pRect);
320    HRESULT GetOutputRect([in] DWORD dwStreamID, [out] NORMALIZEDRECT *pRect);
321    HRESULT SetBackgroundClr([in] COLORREF ClrBkg);
322    HRESULT GetBackgroundClr([in] COLORREF* lpClrBkg);
323    HRESULT SetMixingPrefs([in] DWORD dwMixerPrefs);
324    HRESULT GetMixingPrefs([out] DWORD* pdwMixerPrefs);
325};
326
327[
328    object,
329    local,
330    uuid(9cf0b1b6-fbaa-4b7f-88cf-cf1f130a0dce),
331    pointer_default(unique)
332]
333interface IVMRMonitorConfig : IUnknown
334{
335    HRESULT SetMonitor([in] const VMRGUID *pGUID);
336    HRESULT GetMonitor([out] VMRGUID *pGUID);
337    HRESULT SetDefaultMonitor([in] const VMRGUID *pGUID);
338    HRESULT GetDefaultMonitor([out] VMRGUID *pGUID);
339    HRESULT GetAvailableMonitors([out, size_is(dwMaxInfoArraySize)] VMRMONITORINFO* pInfo, [in] DWORD dwMaxInfoArraySize, [out] DWORD* pdwNumDevices);
340};
341
342
343[
344    object,
345    local,
346    uuid(9e5530c5-7034-48b4-bb46-0b8a6efc8e36),
347    pointer_default(unique)
348]
349interface IVMRFilterConfig : IUnknown
350{
351    HRESULT SetImageCompositor([in] IVMRImageCompositor* lpVMRImgCompositor);
352    HRESULT SetNumberOfStreams([in] DWORD dwMaxStreams);
353    HRESULT GetNumberOfStreams([out] DWORD* pdwMaxStreams);
354    HRESULT SetRenderingPrefs([in] DWORD dwRenderFlags);
355    HRESULT GetRenderingPrefs([out] DWORD* pdwRenderFlags);
356    HRESULT SetRenderingMode([in] DWORD Mode);
357    HRESULT GetRenderingMode([out] DWORD* pMode);
358}
359
360
361[
362    object,
363    local,
364    uuid(ede80b5c-bad6-4623-b537-65586c9f8dfd),
365    pointer_default(unique)
366]
367interface IVMRAspectRatioControl : IUnknown
368{
369    HRESULT GetAspectRatioMode([out] LPDWORD lpdwARMode);
370    HRESULT SetAspectRatioMode([in] DWORD dwARMode);
371}
372
373[
374    object,
375    local,
376    uuid(bb057577-0db8-4e6a-87a7-1a8c9a505a0f),
377    pointer_default(unique)
378]
379interface IVMRDeinterlaceControl : IUnknown
380{
381
382    HRESULT GetNumberOfDeinterlaceModes([in] VMRVideoDesc* lpVideoDescription, [in] [out] LPDWORD lpdwNumDeinterlaceModes, [out] LPGUID lpDeinterlaceModes);
383    HRESULT GetDeinterlaceModeCaps([in] LPGUID lpDeinterlaceMode, [in] VMRVideoDesc* lpVideoDescription, [in] [out] VMRDeinterlaceCaps* lpDeinterlaceCaps);
384    HRESULT GetDeinterlaceMode([in] DWORD dwStreamID, [out] LPGUID lpDeinterlaceMode );
385    HRESULT SetDeinterlaceMode([in] DWORD dwStreamID, [in] LPGUID lpDeinterlaceMode);
386    HRESULT GetDeinterlacePrefs([out] LPDWORD lpdwDeinterlacePrefs);
387    HRESULT SetDeinterlacePrefs([in] DWORD dwDeinterlacePrefs);
388    HRESULT GetActualDeinterlaceMode([in] DWORD dwStreamID, [out] LPGUID lpDeinterlaceMode);
389}
390
391[
392    object,
393    local,
394    uuid(1E673275-0257-40aa-AF20-7C608D4A0428),
395    pointer_default(unique)
396]
397interface IVMRMixerBitmap : IUnknown
398{
399    HRESULT SetAlphaBitmap([in] const VMRALPHABITMAP *pBmpParms);
400    HRESULT UpdateAlphaBitmapParameters([in] PVMRALPHABITMAP pBmpParms);
401    HRESULT GetAlphaBitmapParameters([out] PVMRALPHABITMAP pBmpParms);
402};
403
404[
405    local,
406    object,
407    uuid(7a4fb5af-479f-4074-bb40-ce6722e43c82),
408    pointer_default(unique)
409]
410interface IVMRImageCompositor : IUnknown
411{
412    HRESULT InitCompositionTarget([in] IUnknown* pD3DDevice, [in] LPDIRECTDRAWSURFACE7 pddsRenderTarget);
413    HRESULT TermCompositionTarget([in] IUnknown* pD3DDevice, [in] LPDIRECTDRAWSURFACE7 pddsRenderTarget);
414    HRESULT SetStreamMediaType([in] DWORD dwStrmID, [in] AM_MEDIA_TYPE* pmt, [in] BOOL fTexture);
415    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);
416};
417
418[
419    object,
420    local,
421    uuid(058d1f11-2a54-4bef-bd54-df706626b727),
422    pointer_default(unique)
423]
424interface IVMRVideoStreamControl: IUnknown
425{
426    HRESULT SetColorKey([in] LPDDCOLORKEY lpClrKey);
427    HRESULT GetColorKey([out] LPDDCOLORKEY lpClrKey);
428    HRESULT SetStreamActiveState([in] BOOL fActive);
429    HRESULT GetStreamActiveState([out] BOOL* lpfActive);
430};
431
432[
433    local,
434    object,
435    uuid(a9849bbe-9ec8-4263-b764-62730f0d15d0),
436    pointer_default(unique)
437]
438interface IVMRSurface : IUnknown
439{
440    HRESULT IsSurfaceLocked();
441    HRESULT LockSurface([out] BYTE** lpSurface);
442    HRESULT UnlockSurface();
443    HRESULT GetSurface([out] LPDIRECTDRAWSURFACE7 *lplpSurface);
444};
445
446[
447    local,
448    object,
449    uuid(9f3a1c85-8555-49ba-935f-be5b5b29d178),
450    pointer_default(unique)
451]
452
453interface IVMRImagePresenterConfig : IUnknown
454{
455    HRESULT SetRenderingPrefs([in] DWORD dwRenderFlags);
456    HRESULT GetRenderingPrefs([out] DWORD* dwRenderFlags);
457}
458
459[
460    local,
461    object,
462    uuid(e6f7ce40-4673-44f1-8f77-5499d68cb4ea),
463    pointer_default(unique)
464]
465
466interface IVMRImagePresenterExclModeConfig : IVMRImagePresenterConfig
467{
468    HRESULT SetXlcModeDDObjAndPrimarySurface([in] LPDIRECTDRAW7 lpDDObj, [in] LPDIRECTDRAWSURFACE7 lpPrimarySurf);
469    HRESULT GetXlcModeDDObjAndPrimarySurface([out] LPDIRECTDRAW7* lpDDObj, [out] LPDIRECTDRAWSURFACE7* lpPrimarySurf);
470}
471
472[
473    local,
474    object,
475    uuid(aac18c18-e186-46d2-825d-a1f8dc8e395a),
476    pointer_default(unique)
477]
478interface IVPManager : IUnknown
479{
480    HRESULT SetVideoPortIndex([in] DWORD dwVideoPortIndex);
481    HRESULT GetVideoPortIndex([out] DWORD* pdwVideoPortIndex);
482};
483
484