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 }; 525