]> icculus.org git repositories - taylor/freespace2.git/blob - include/vdvp.h
Initial revision
[taylor/freespace2.git] / include / vdvp.h
1 /*==========================================================================;
2  *
3  *  Copyright (C) 1996-1997 Microsoft Corporation.  All Rights Reserved.
4  *
5  *  File:       dvp.h
6  *  Content:    DirectDrawVideoPort include file
7  *
8  ***************************************************************************/
9
10 #ifndef __DVP_INCLUDED__
11 #define __DVP_INCLUDED__
12 #if defined( _WIN32 )  && !defined( _NO_COM )
13 #define COM_NO_WINDOWS_H
14 #include <objbase.h>
15 #else
16 #define IUnknown            void
17 #undef  CO_E_NOTINITIALIZED
18 #define CO_E_NOTINITIALIZED 0x800401F0L
19 #endif
20
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24
25 /*
26  * GUIDS used by DirectDrawVideoPort objects
27  */
28 #if defined( _WIN32 ) && !defined( _NO_COM )
29 DEFINE_GUID( IID_IDDVideoPortContainer,         0x6C142760,0xA733,0x11CE,0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60 );
30 DEFINE_GUID( IID_IDirectDrawVideoPort,          0xB36D93E0,0x2B43,0x11CF,0xA2,0xDE,0x00,0xAA,0x00,0xB9,0x33,0x56 );
31
32 DEFINE_GUID( DDVPTYPE_E_HREFH_VREFH, 0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
33 DEFINE_GUID( DDVPTYPE_E_HREFH_VREFL, 0x92783220L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
34 DEFINE_GUID( DDVPTYPE_E_HREFL_VREFH, 0xA07A02E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
35 DEFINE_GUID( DDVPTYPE_E_HREFL_VREFL, 0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
36 DEFINE_GUID( DDVPTYPE_CCIR656,       0xFCA326A0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
37 DEFINE_GUID( DDVPTYPE_BROOKTREE,     0x1352A560L,0xDA61,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
38 DEFINE_GUID( DDVPTYPE_PHILIPS,       0x332CF160L,0xDA61,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8);
39
40 /*
41  * GUIDS used to describe connections
42  */
43
44 #endif
45
46 /*============================================================================
47  *
48  * DirectDraw Structures
49  *
50  * Various structures used to invoke DirectDraw.
51  *
52  *==========================================================================*/
53
54 struct IDirectDraw;
55 struct IDirectDrawSurface;
56 struct IDirectDrawPalette;
57 struct IDirectDrawClipper;
58
59 typedef struct IDDVideoPortContainer            FAR *LPDDVIDEOPORTCONTAINER;
60 typedef struct IDirectDrawVideoPort             FAR *LPDIRECTDRAWVIDEOPORT;
61
62 typedef struct _DDVIDEOPORTCONNECT      FAR *LPDDVIDEOPORTCONNECT;
63 typedef struct _DDVIDEOPORTCAPS         FAR *LPDDVIDEOPORTCAPS;
64 typedef struct _DDVIDEOPORTDESC         FAR *LPDDVIDEOPORTDESC;
65 typedef struct _DDVIDEOPORTINFO         FAR *LPDDVIDEOPORTINFO;
66 typedef struct _DDVIDEOPORTBANDWIDTH    FAR *LPDDVIDEOPORTBANDWIDTH;
67 typedef struct _DDVIDEOPORTSTATUS       FAR *LPDDVIDEOPORTSTATUS;
68
69 typedef struct IDDVideoPortContainerVtbl DDVIDEOPORTCONTAINERCALLBACKS;
70 typedef struct IDirectDrawVideoPortVtbl  DIRECTDRAWVIDEOPORTCALLBACKS;
71
72
73 /*
74  * API's
75  */
76 typedef HRESULT (FAR PASCAL * LPDDENUMVIDEOCALLBACK)(LPDDVIDEOPORTCAPS, LPVOID);
77
78
79 /*
80  * INTERACES FOLLOW:
81  *      IDirectDrawVideoPort
82  *      IVideoPort
83  */
84
85 /*
86  * IDirectDrawVideoPortContainer
87  */
88 #if defined( _WIN32 ) && !defined( _NO_COM )
89 #undef INTERFACE
90 #define INTERFACE IDDVideoPortContainer
91 DECLARE_INTERFACE_( IDDVideoPortContainer, IUnknown )
92 {
93     /*** IUnknown methods ***/
94     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
95     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
96     STDMETHOD_(ULONG,Release) (THIS) PURE;
97     /*** IDirectDrawVideoPort methods ***/
98     STDMETHOD(CreateVideoPort)(THIS_ DWORD, LPDDVIDEOPORTDESC, LPDIRECTDRAWVIDEOPORT FAR *, IUnknown FAR *) PURE;
99     STDMETHOD(EnumVideoPorts)(THIS_ DWORD, LPDDVIDEOPORTCAPS, LPVOID,LPDDENUMVIDEOCALLBACK ) PURE;
100     STDMETHOD(GetVideoPortConnectInfo)(THIS_ DWORD, LPDWORD, LPDDVIDEOPORTCONNECT ) PURE;
101     STDMETHOD(QueryVideoPortStatus)(THIS_ DWORD, LPDDVIDEOPORTSTATUS ) PURE;
102 };
103
104 #if !defined(__cplusplus) || defined(CINTERFACE)
105 #define IVideoPortContainer_QueryInterface(p, a, b)         (p)->lpVtbl->QueryInterface(p, a, b)
106 #define IVideoPortContainer_AddRef(p)                       (p)->lpVtbl->AddRef(p)
107 #define IVideoPortContainer_Release(p)                      (p)->lpVtbl->Release(p)
108 #define IVideoPortContainer_CreateVideoPort(p, a, b, c, d)  (p)->lpVtbl->CreateVideoPort(p, a, b, c, d)
109 #define IVideoPortContainer_EnumVideoPorts(p, a, b, c, d)   (p)->lpVtbl->EnumVideoPorts(p, a, b, c, d)
110 #define IVideoPortContainer_GetVideoPortConnectInfo(p, a, b, c) (p)->lpVtbl->GetVideoPortConnectInfo(p, a, b, c)
111 #define IVideoPortContainer_QueryVideoPortStatus(p, a, b)   (p)->lpVtbl->QueryVideoPortStatus(p, a, b)
112 #else
113 #define IVideoPortContainer_QueryInterface(p, a, b)         (p)->QueryInterface(a, b)
114 #define IVideoPortContainer_AddRef(p)                       (p)->AddRef()
115 #define IVideoPortContainer_Release(p)                      (p)->Release()
116 #define IVideoPortContainer_CreateVideoPort(p, a, b, c, d)  (p)->CreateVideoPort(a, b, c, d)
117 #define IVideoPortContainer_EnumVideoPorts(p, a, b, c, d)   (p)->EnumVideoPorts(a, b, c, d)
118 #define IVideoPortContainer_GetVideoPortConnectInfo(p, a, b, c) (p)->GetVideoPortConnectInfo(a, b, c)
119 #define IVideoPortContainer_QueryVideoPortStatus(p, a, b)   (p)->QueryVideoPortStatus(a, b)
120 #endif
121
122 #endif
123
124
125 /*
126  * IDirectDrawVideoPort
127  */
128 #if defined( _WIN32 ) && !defined( _NO_COM )
129 #undef INTERFACE
130 #define INTERFACE IDirectDrawVideoPort
131 DECLARE_INTERFACE_( IDirectDrawVideoPort, IUnknown )
132 {
133     /*** IUnknown methods ***/
134     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
135     STDMETHOD_(ULONG,AddRef) (THIS)  PURE;
136     STDMETHOD_(ULONG,Release) (THIS) PURE;
137     /*** IVideoPort methods ***/
138     STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;
139     STDMETHOD(GetBandwidthInfo)(THIS_ LPDDPIXELFORMAT, DWORD, DWORD, DWORD, LPDDVIDEOPORTBANDWIDTH) PURE;
140     STDMETHOD(GetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
141     STDMETHOD(GetInputFormats)(THIS_ LPDWORD, LPDDPIXELFORMAT, DWORD) PURE;
142     STDMETHOD(GetOutputFormats)(THIS_ LPDDPIXELFORMAT, LPDWORD, LPDDPIXELFORMAT, DWORD) PURE;
143     STDMETHOD(GetFieldPolarity)(THIS_ LPBOOL) PURE;
144     STDMETHOD(GetVideoLine)(THIS_ LPDWORD) PURE;
145     STDMETHOD(GetVideoSignalStatus)(THIS_ LPDWORD) PURE;
146     STDMETHOD(SetColorControls)(THIS_ LPDDCOLORCONTROL) PURE;
147     STDMETHOD(SetTargetSurface)(THIS_ LPDIRECTDRAWSURFACE, DWORD) PURE;
148     STDMETHOD(StartVideo)(THIS_ LPDDVIDEOPORTINFO) PURE;
149     STDMETHOD(StopVideo)(THIS) PURE;
150     STDMETHOD(UpdateVideo)(THIS_ LPDDVIDEOPORTINFO) PURE;
151     STDMETHOD(WaitForSync)(THIS_ DWORD, DWORD, DWORD) PURE;
152 };
153
154 #if !defined(__cplusplus) || defined(CINTERFACE)
155 #define IVideoPort_QueryInterface(p,a,b)        (p)->lpVtbl->QueryInterface(p,a,b)
156 #define IVideoPort_AddRef(p)                    (p)->lpVtbl->AddRef(p)
157 #define IVideoPort_Release(p)                   (p)->lpVtbl->Release(p)
158 #define IVideoPort_SetTargetSurface(p,a,b)      (p)->lpVtbl->SetTargetSurface(p,a,b)
159 #define IVideoPort_Flip(p,a,b)                  (p)->lpVtbl->Flip(p,a,b)
160 #define IVideoPort_GetBandwidthInfo(p,a,b,c,d,e) (p)->lpVtbl->GetBandwidthInfo(p,a,b,c,d,e)
161 #define IVideoPort_GetColorControls(p,a)        (p)->lpVtbl->GetColorControls(p,a)
162 #define IVideoPort_GetInputFormats(p,a,b,c)     (p)->lpVtbl->GetInputFormats(p,a,b,c)
163 #define IVideoPort_GetOutputFormats(p,a,b,c,d)  (p)->lpVtbl->GetOutputFormats(p,a,b,c,d)
164 #define IVideoPort_GetFieldPolarity(p,a)        (p)->lpVtbl->GetFieldPolarity(p,a)
165 #define IVideoPort_GetVideoLine(p,a)            (p)->lpVtbl->GetVideoLine(p,a)
166 #define IVideoPort_GetVideoSignalStatus(p,a)    (p)->lpVtbl->GetVideoSignalStatus(p,a)
167 #define IVideoPort_SetColorControls(p,a)        (p)->lpVtbl->SetColorControls(p,a)
168 #define IVideoPort_StartVideo(p,a)              (p)->lpVtbl->StartVideo(p,a)
169 #define IVideoPort_StopVideo(p)                 (p)->lpVtbl->StopVideo(p)
170 #define IVideoPort_UpdateVideo(p,a)             (p)->lpVtbl->UpdateVideo(p,a)
171 #define IVideoPort_WaitForSync(p,a,b,c)         (p)->lpVtbl->WaitForSync(p,a,b,c)
172 #else
173 #define IVideoPort_QueryInterface(p,a,b)        (p)->QueryInterface(a,b)
174 #define IVideoPort_AddRef(p)                    (p)->AddRef()
175 #define IVideoPort_Release(p)                   (p)->Release()
176 #define IVideoPort_SetTargetSurface(p,a,b)      (p)->SetTargetSurface(a,b)
177 #define IVideoPort_Flip(p,a,b)                  (p)->Flip(a,b)
178 #define IVideoPort_GetBandwidthInfo(p,a,b,c,d,e) (p)->GetBandwidthInfo(a,b,c,d,e)
179 #define IVideoPort_GetColorControls(p,a)        (p)->GetColorControls(a)
180 #define IVideoPort_GetInputFormats(p,a,b,c)     (p)->GetInputFormats(a,b,c)
181 #define IVideoPort_GetOutputFormats(p,a,b,c,d)  (p)->GetOutputFormats(a,b,c,d)
182 #define IVideoPort_GetFieldPolarity(p,a)        (p)->GetFieldPolarity(a)
183 #define IVideoPort_GetVideoLine(p,a)            (p)->GetVideoLine(a)
184 #define IVideoPort_GetVideoSignalStatus(p,a)    (p)->GetVideoSignalStatus(a)
185 #define IVideoPort_SetColorControls(p,a)        (p)->SetColorControls(a)
186 #define IVideoPort_StartVideo(p,a)              (p)->StartVideo(a)
187 #define IVideoPort_StopVideo(p)                 (p)->StopVideo()
188 #define IVideoPort_UpdateVideo(p,a)             (p)->UpdateVideo(a)
189 #define IVideoPort_WaitForSync(p,a,b,c)         (p)->WaitForSync(a,b,c)
190 #endif
191
192 #endif
193
194
195 /*
196  * DDVIDEOPORTCONNECT
197  */
198 typedef struct _DDVIDEOPORTCONNECT
199 {
200     DWORD dwSize;           // size of the DDVIDEOPORTCONNECT structure
201     DWORD dwPortWidth;      // Width of the video port
202     GUID  guidTypeID;       // Description of video port connection
203     DWORD dwFlags;          // Connection flags
204     DWORD dwReserved1;      // Reserved, set to zero.
205 } DDVIDEOPORTCONNECT;
206
207
208 /*
209  * DDVIDEOPORTCAPS
210  */
211 typedef struct _DDVIDEOPORTCAPS
212 {
213     DWORD dwSize;                       // size of the DDVIDEOPORTCAPS structure
214     DWORD dwFlags;                      // indicates which fields contain data
215     DWORD dwMaxWidth;                   // max width of the video port field
216     DWORD dwMaxVBIWidth;                // max width of the VBI data
217     DWORD dwMaxHeight;                  // max height of the video port field
218     DWORD dwVideoPortID;                // Video port ID (0 - (dwMaxVideoPorts -1))
219     DWORD dwCaps;                       // Video port capabilities
220     DWORD dwFX;                         // More video port capabilities
221     DWORD dwNumAutoFlipSurfaces;        // Number of autoflippable surfaces
222     DWORD dwAlignVideoPortBoundary;     // Byte restriction of placement within the surface
223     DWORD dwAlignVideoPortPrescaleWidth;// Byte restriction of width after prescaling
224     DWORD dwAlignVideoPortCropBoundary; // Byte restriction of left cropping
225     DWORD dwAlignVideoPortCropWidth;    // Byte restriction of cropping width
226     DWORD dwPreshrinkXStep;             // Width can be shrunk in steps of 1/x
227     DWORD dwPreshrinkYStep;             // Height can be shrunk in steps of 1/x
228     DWORD dwNumVBIAutoFlipSurfaces;     // Number of VBI autoflippable surfaces
229     DWORD dwReserved1;                  // Reserved for future use
230     DWORD dwReserved2;                  // Reserved for future use
231 } DDVIDEOPORTCAPS;
232
233 /*
234  * The dwMaxWidth and dwMaxVBIWidth members are valid
235  */
236 #define DDVPD_WIDTH             0x00000001l
237
238 /*
239  * The dwMaxHeight member is valid
240  */
241 #define DDVPD_HEIGHT            0x00000002l
242
243 /*
244  * The dwVideoPortID member is valid
245  */
246 #define DDVPD_ID                0x00000004l
247
248 /*
249  * The dwCaps member is valid
250  */
251 #define DDVPD_CAPS              0x00000008l
252
253 /*
254  * The dwFX member is valid
255  */
256 #define DDVPD_FX                0x00000010l
257
258 /*
259  * The dwNumAutoFlipSurfaces member is valid
260  */
261 #define DDVPD_AUTOFLIP          0x00000020l
262
263 /*
264  * All of the alignment members are valid
265  */
266 #define DDVPD_ALIGN             0x00000040l
267
268
269 /*
270  * DDVIDEOPORTDESC
271  */
272 typedef struct _DDVIDEOPORTDESC
273 {
274     DWORD dwSize;                       // size of the DDVIDEOPORTDESC structure
275     DWORD dwFieldWidth;                 // width of the video port field
276     DWORD dwVBIWidth;                   // width of the VBI data
277     DWORD dwFieldHeight;                // height of the video port field
278     DWORD dwMicrosecondsPerField;       // Microseconds per video field
279     DWORD dwMaxPixelsPerSecond;         // Maximum pixel rate per second
280     DWORD dwVideoPortID;                // Video port ID (0 - (dwMaxVideoPorts -1))
281     DWORD dwReserved1;                  // Reserved for future use - set to zero
282     DDVIDEOPORTCONNECT VideoPortType;   // Description of video port connection
283     DWORD dwReserved2;                  // Reserved for future use - set to zero
284     DWORD dwReserved3;                  // Reserved for future use - set to zero
285 } DDVIDEOPORTDESC;
286
287
288 /*
289  * DDVIDEOPORTINFO
290  */
291 typedef struct _DDVIDEOPORTINFO
292 {
293     DWORD dwSize;                       // Size of the structure
294     DWORD dwOriginX;                    // Placement of the video data within the surface.
295     DWORD dwOriginY;                    // Placement of the video data within the surface.
296     DWORD dwVPFlags;                    // Video port options
297     RECT rCrop;                         // Cropping rectangle (optional).
298     DWORD dwPrescaleWidth;              // Determines pre-scaling/zooming in the X direction (optional).
299     DWORD dwPrescaleHeight;             // Determines pre-scaling/zooming in the Y direction (optional).
300     LPDDPIXELFORMAT lpddpfInputFormat;  // Video format written to the video port
301     LPDDPIXELFORMAT lpddpfVBIInputFormat; // Input format of the VBI data
302     LPDDPIXELFORMAT lpddpfVBIOutputFormat;// Output format of the data
303     DWORD dwVBIHeight;                  // Specifies the number of lines of data within the vertical blanking interval.
304     DWORD dwReserved1;                  // Reserved for future use - set to zero
305     DWORD dwReserved2;                  // Reserved for future use - set to zero
306 } DDVIDEOPORTINFO;
307
308
309 /*
310  * DDVIDEOPORTBANDWIDTH
311  */
312 typedef struct _DDVIDEOPORTBANDWIDTH
313 {
314     DWORD dwSize;                       // Size of the structure
315     DWORD dwCaps;
316     DWORD dwOverlay;                    // Zoom factor at which overlay is supported
317     DWORD dwColorkey;                   // Zoom factor at which overlay w/ colorkey is supported
318     DWORD dwYInterpolate;               // Zoom factor at which overlay w/ Y interpolation is supported
319     DWORD dwYInterpAndColorkey;         // Zoom factor at which ovelray w/ Y interpolation and colorkeying is supported
320     DWORD dwReserved1;                  // Reserved for future use - set to zero
321     DWORD dwReserved2;                  // Reserved for future use - set to zero
322 } DDVIDEOPORTBANDWIDTH;
323
324
325 /*
326  * DDVIDEOPORTSTATUS
327  */
328 typedef struct _DDVIDEOPORTSTATUS
329 {
330     DWORD dwSize;                       // Size of the structure
331     BOOL  bInUse;                       // TRUE if video port is currently being used
332     DWORD dwFlags;                      // Currently not used
333     DWORD dwReserved1;                  // Reserved for future use
334     DDVIDEOPORTCONNECT VideoPortType;   // Information about the connection
335     DWORD dwReserved2;                  // Reserved for future use
336     DWORD dwReserved3;                  // Reserved for future use
337 } DDVIDEOPORTSTATUS;
338
339 /*============================================================================
340  *
341  * Video Port Flags
342  *
343  * All flags are bit flags.
344  *
345  *==========================================================================*/
346
347 /****************************************************************************
348  *
349  * VIDEOPORT DDVIDEOPORTCONNECT FLAGS
350  *
351  ****************************************************************************/
352
353 /*
354  * When this is set by the driver and passed to the client, this
355  * indicates that the video port is capable of double clocking the data.
356  * When this is set by the client, this indicates that the video port
357  * should enable double clocking.  This flag is only valid with external
358  * syncs.
359  */
360 #define DDVPCONNECT_DOUBLECLOCK                 0x00000001l
361
362 /*
363  * When this is set by the driver and passed to the client, this
364  * indicates that the video port is capable of using an external VACT
365  * signal. When this is set by the client, this indicates that the
366  * video port should use the external VACT signal.
367  */
368 #define DDVPCONNECT_VACT                        0x00000002l
369
370 /*
371  * When this is set by the driver and passed to the client, this
372  * indicates that the video port is capable of treating even fields
373  * like odd fields and visa versa.  When this is set by the client,
374  * this indicates that the video port should treat even fields like odd
375  * fields.
376  */
377 #define DDVPCONNECT_INVERTPOLARITY              0x00000004l
378
379 /*
380  * Indicates that any data written to the video port during the VREF
381  * period will not be written into the frame buffer. This flag is read only.
382  */
383 #define DDVPCONNECT_DISCARDSVREFDATA            0x00000008l
384
385 /*
386  * Device will write half lines into the frame buffer, sometimes causing
387  * the data to not be displayed correctly.
388  */
389 #define DDVPCONNECT_HALFLINE                    0x00000010l
390
391 /*
392  * Indicates that the signal is interlaced. This flag is only
393  * set by the client.
394  */
395 #define DDVPCONNECT_INTERLACED                  0x00000020l
396
397 /*
398  * Indicates that video port is shareable and that this video port
399  * will use the even fields.  This flag is only set by the client.
400  */
401 #define DDVPCONNECT_SHAREEVEN                   0x00000040l
402
403 /*
404  * Indicates that video port is shareable and that this video port
405  * will use the odd fields.  This flag is only set by the client.
406  */
407 #define DDVPCONNECT_SHAREODD                    0x00000080l
408
409 /****************************************************************************
410  *
411  * VIDEOPORT DDVIDEOPORTDESC CAPS
412  *
413  ****************************************************************************/
414
415 /*
416  * Flip can be performed automatically to avoid tearing.
417  */
418 #define DDVPCAPS_AUTOFLIP                       0x00000001l
419
420 /*
421  * Supports interlaced video
422  */
423 #define DDVPCAPS_INTERLACED                     0x00000002l
424
425 /*
426  * Supports non-interlaced video
427  */
428 #define DDVPCAPS_NONINTERLACED                  0x00000004l
429
430 /*
431  * Indicates that the device can return whether the current field
432  * of an interlaced signal is even or odd.
433  */
434 #define DDVPCAPS_READBACKFIELD                  0x00000008l
435
436 /*
437  * Indicates that the device can return the current line of video
438  * being written into the frame buffer.
439  */
440 #define DDVPCAPS_READBACKLINE                   0x00000010l
441
442 /*
443  * Allows two gen-locked video streams to share a single video port,
444  * where one stream uses the even fields and the other uses the odd
445  * fields. Separate parameters (including address, scaling,
446  * cropping, etc.) are maintained for both fields.)
447  */
448 #define DDVPCAPS_SHAREABLE                      0x00000020l
449
450 /*
451  * Even fields of video can be automatically discarded.
452  */
453 #define DDVPCAPS_SKIPEVENFIELDS                 0x00000040l
454
455 /*
456  * Odd fields of video can be automatically discarded.
457  */
458 #define DDVPCAPS_SKIPODDFIELDS                  0x00000080l
459
460 /*
461  * Indicates that the device is capable of driving the graphics
462  * VSYNC with the video port VSYNC.
463  */
464 #define DDVPCAPS_SYNCMASTER                     0x00000100l
465
466 /*
467  * Indicates that data within the vertical blanking interval can
468  * be written to a different surface.
469  */
470 #define DDVPCAPS_VBISURFACE                     0x00000200l
471
472 /*
473  * Indicates that the video port can perform color operations
474  * on the incoming data before it is written to the frame buffer.
475  */
476 #define DDVPCAPS_COLORCONTROL                   0x00000400l
477
478 /*
479  * Indicates that the video port can accept VBI data in a different
480  * width or format than the regular video data.
481  */
482 #define DDVPCAPS_OVERSAMPLEDVBI                 0x00000800l
483
484 /*
485  * Indicates that the video port can write data directly to system memory
486  */
487 #define DDVPCAPS_SYSTEMMEMORY                   0x00001000l
488
489
490 /****************************************************************************
491  *
492  * VIDEOPORT DDVIDEOPORTDESC FX
493  *
494  ****************************************************************************/
495
496 /*
497  * Limited cropping is available to crop out the vertical interval data.
498  */
499 #define DDVPFX_CROPTOPDATA                      0x00000001l
500
501 /*
502  * Incoming data can be cropped in the X direction before it is written
503  * to the surface.
504  */
505 #define DDVPFX_CROPX                            0x00000002l
506
507 /*
508  * Incoming data can be cropped in the Y direction before it is written
509  * to the surface.
510  */
511 #define DDVPFX_CROPY                            0x00000004l
512
513 /*
514  * Supports interleaving interlaced fields in memory.
515  */
516 #define DDVPFX_INTERLEAVE                       0x00000008l
517
518 /*
519  * Supports mirroring left to right as the video data is written
520  * into the frame buffer.
521  */
522 #define DDVPFX_MIRRORLEFTRIGHT                  0x00000010l
523
524 /*
525  * Supports mirroring top to bottom as the video data is written
526  * into the frame buffer.
527  */
528 #define DDVPFX_MIRRORUPDOWN                     0x00000020l
529
530 /*
531  * Data can be arbitrarily shrunk in the X direction before it
532  * is written to the surface.
533  */
534 #define DDVPFX_PRESHRINKX                       0x00000040l
535
536 /*
537  * Data can be arbitrarily shrunk in the Y direction before it
538  * is written to the surface.
539  */
540 #define DDVPFX_PRESHRINKY                       0x00000080l
541
542 /*
543  * Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the X
544  * direction before it is written to the surface.
545  */
546 #define DDVPFX_PRESHRINKXB                      0x00000100l
547
548 /*
549  * Data can be binary shrunk (1/2, 1/4, 1/8, etc.) in the Y
550  * direction before it is written to the surface.
551  */
552 #define DDVPFX_PRESHRINKYB                      0x00000200l
553
554 /*
555  * Data can be shrunk in increments of 1/x in the X direction
556  * (where X is specified in the DDVIDEOPORTCAPS.dwPreshrinkXStep)
557  * before it is written to the surface.
558  */
559 #define DDVPFX_PRESHRINKXS                      0x00000400l
560
561 /*
562  * Data can be shrunk in increments of 1/x in the Y direction
563  * (where X is specified in the DDVIDEOPORTCAPS.dwPreshrinkYStep)
564  * before it is written to the surface.
565  */
566 #define DDVPFX_PRESHRINKYS                      0x00000800l
567
568 /*
569  * Data can be arbitrarily stretched in the X direction before
570  * it is written to the surface.
571  */
572 #define DDVPFX_PRESTRETCHX                      0x00001000l
573
574 /*
575  * Data can be arbitrarily stretched in the Y direction before
576  * it is written to the surface.
577  */
578 #define DDVPFX_PRESTRETCHY                      0x00002000l
579
580 /*
581  * Data can be integer stretched in the X direction before it is
582  * written to the surface.
583  */
584 #define DDVPFX_PRESTRETCHXN                     0x00004000l
585
586 /*
587  * Data can be integer stretched in the Y direction before it is
588  * written to the surface.
589  */
590 #define DDVPFX_PRESTRETCHYN                     0x00008000l
591
592 /*
593  * Indicates that data within the vertical blanking interval can
594  * be converted independently of the remaining video data.
595  */
596 #define DDVPFX_VBICONVERT                       0x00010000l
597
598 /*
599  * Indicates that scaling can be disabled for data within the
600  * vertical blanking interval.
601  */
602 #define DDVPFX_VBINOSCALE                       0x00020000l
603
604 /*
605  * Indicates that the video data can ignore the left and right
606  * cropping coordinates when cropping oversampled VBI data.
607  */
608 #define DDVPFX_IGNOREVBIXCROP                   0x00040000l
609
610
611 /****************************************************************************
612  *
613  * VIDEOPORT DDVIDEOPORTINFO FLAGS
614  *
615  ****************************************************************************/
616
617 /*
618  * Perform automatic flipping.   Auto-flipping is performed between
619  * the overlay surface that was attached to the video port using
620  * IDirectDrawVideoPort::AttachSurface and the overlay surfaces that
621  * are attached to the surface via the IDirectDrawSurface::AttachSurface
622  * method.  The flip order is the order in which the overlay surfaces
623  * were. attached.
624  */
625 #define DDVP_AUTOFLIP                           0x00000001l
626
627 /*
628  * Perform conversion using the ddpfOutputFormat information.
629  */
630 #define DDVP_CONVERT                            0x00000002l
631
632 /*
633  * Perform cropping using the specified rectangle.
634  */
635 #define DDVP_CROP                               0x00000004l
636
637 /*
638  * Indicates that interlaced fields should be interleaved in memory.
639  */
640 #define DDVP_INTERLEAVE                         0x00000008l
641
642 /*
643  * Indicates that the data should be mirrored left to right as it's
644  * written into the frame buffer.
645  */
646 #define DDVP_MIRRORLEFTRIGHT                    0x00000010l
647
648 /*
649  * Indicates that the data should be mirrored top to bottom as it's
650  * written into the frame buffer.
651  */
652 #define DDVP_MIRRORUPDOWN                       0x00000020l
653
654 /*
655  * Perform pre-scaling/zooming based on the pre-scale parameters.
656  */
657 #define DDVP_PRESCALE                           0x00000040l
658
659 /*
660  * Ignore input of even fields.
661  */
662 #define DDVP_SKIPEVENFIELDS                     0x00000080l
663
664 /*
665  * Ignore input of odd fields.
666  */
667 #define DDVP_SKIPODDFIELDS                      0x00000100l
668
669 /*
670  * Drive the graphics VSYNCs using the video port VYSNCs.
671  */
672 #define DDVP_SYNCMASTER                         0x00000200l
673
674 /*
675  * The ddpfVBIOutputFormatFormat member contains data that should be used
676  * to convert the data within the vertical blanking interval.
677  */
678 #define DDVP_VBICONVERT                         0x00000400l
679
680 /*
681  * Indicates that data within the vertical blanking interval
682  * should not be scaled.
683  */
684 #define DDVP_VBINOSCALE                         0x00000800l
685
686 /*
687  * Indicates that these bob/weave decisions should not be
688  * overriden by other interfaces.
689  */
690 #define DDVP_OVERRIDEBOBWEAVE                   0x00001000l
691
692 /*
693  * Indicates that the video data should ignore the left and right
694  * cropping coordinates when cropping the VBI data.
695  */
696 #define DDVP_IGNOREVBIXCROP                     0x00002000l
697
698
699 /****************************************************************************
700  *
701  * DIRIRECTDRAWVIDEOPORT GETINPUTFORMAT/GETOUTPUTFORMAT FLAGS
702  *
703  ****************************************************************************/
704
705 /*
706  * Return formats for the video data
707  */
708 #define DDVPFORMAT_VIDEO                        0x00000001l
709
710 /*
711  * Return formats for the VBI data
712  */
713 #define DDVPFORMAT_VBI                          0x00000002l
714
715
716 /****************************************************************************
717  *
718  * DIRIRECTDRAWVIDEOPORT SETTARGETSURFACE FLAGS
719  *
720  ****************************************************************************/
721
722 /*
723  * Surface should receive video data (and VBI data if a surface
724  * is not explicitly attached for that purpose)
725  */
726 #define DDVPTARGET_VIDEO                        0x00000001l
727
728 /*
729  * Surface should receive VBI data
730  */
731 #define DDVPTARGET_VBI                          0x00000002l
732
733
734 /****************************************************************************
735  *
736  * DIRIRECTDRAWVIDEOPORT WAITFORSYNC FLAGS
737  *
738  ****************************************************************************/
739
740 /*
741  * Waits until the beginning of the next VSYNC
742  */
743 #define DDVPWAIT_BEGIN                          0x00000001l
744
745 /*
746  * Waits until the end of the next/current VSYNC
747  */
748 #define DDVPWAIT_END                            0x00000002l
749
750 /*
751  * Waits until the beginning of the specified line
752  */
753 #define DDVPWAIT_LINE                           0x00000003l
754
755 /****************************************************************************
756  *
757  * DIRECTDRAWVIDEOPORT FLIP FLAGS
758  *
759  ****************************************************************************/
760
761 /*
762  * Flips the normal video surface
763  */
764 #define DDVPFLIP_VIDEO                          0x00000001l
765
766 /*
767  * Flips the VBI surface
768  */
769 #define DDVPFLIP_VBI                            0x00000002l
770
771 /****************************************************************************
772  *
773  * DIRIRECTDRAWVIDEOPORT GETVIDEOSIGNALSTATUS VALUES
774  *
775  ****************************************************************************/
776
777 /*
778  * No video signal is present at the video port
779  */
780 #define DDVPSQ_NOSIGNAL                         0x00000001l
781
782 /*
783  * A valid video signal is present at the video port
784  */
785 #define DDVPSQ_SIGNALOK                         0x00000002l
786
787 /****************************************************************************
788  *
789  * VIDEOPORTBANDWIDTH Flags
790  *
791  ****************************************************************************/
792
793 /*
794  * The specified height/width refer to the size of the video port data
795  * written into memory, after prescaling has occured.
796  */
797 #define DDVPB_VIDEOPORT                         0x00000001l
798
799 /*
800  * The specified height/width refer to the source size of the overlay.
801  */
802 #define DDVPB_OVERLAY                           0x00000002l
803
804 /*
805  * This is a query for the device to return which caps this device requires.
806  */
807 #define DDVPB_TYPE                              0x00000004l
808
809 /****************************************************************************
810  *
811  * VIDEOPORTBANDWIDTH Caps
812  *
813  ****************************************************************************/
814
815 /*
816  * The bandwidth for this device is dependant on the overlay source size.
817  */
818 #define DDVPBCAPS_SOURCE                        0x00000001l
819
820 /*
821  * The bandwidth for this device is dependant on the overlay destination
822  * size.
823  */
824 #define DDVPBCAPS_DESTINATION                   0x00000002l
825
826
827 #ifdef __cplusplus
828 };
829 #endif
830
831 #endif
832