home *** CD-ROM | disk | FTP | other *** search
/ Beginning Direct3D Game Programming / Direct3D.iso / directx / dxf / include / dvp.h < prev    next >
C/C++ Source or Header  |  2000-09-21  |  31KB  |  917 lines

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