/*
 * ddkmapi.h
 *
 * DirectDraw support for DxApi function
 *
 * Contributors:
 *   Created by Magnus Olsen
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __DDKMAPI_INCLUDED__
#define __DDKMAPI_INCLUDED__

#if defined(_DXAPI_)
#define DXAPI
#else
#define DXAPI DECLSPEC_IMPORT
#endif

#define DXAPI_MAJORVERSION			1
#define DXAPI_MINORVERSION			0

#define DD_FIRST_DXAPI				0x500
#define DD_DXAPI_GETVERSIONNUMBER			(DD_FIRST_DXAPI)
#define DD_DXAPI_CLOSEHANDLE				(DD_FIRST_DXAPI+1)
#define DD_DXAPI_OPENDIRECTDRAW				(DD_FIRST_DXAPI+2)
#define DD_DXAPI_OPENSURFACE				(DD_FIRST_DXAPI+3)
#define DD_DXAPI_OPENVIDEOPORT				(DD_FIRST_DXAPI+4)
#define DD_DXAPI_GETKERNELCAPS				(DD_FIRST_DXAPI+5)
#define DD_DXAPI_GET_VP_FIELD_NUMBER			(DD_FIRST_DXAPI+6)
#define DD_DXAPI_SET_VP_FIELD_NUMBER			(DD_FIRST_DXAPI+7)
#define DD_DXAPI_SET_VP_SKIP_FIELD			(DD_FIRST_DXAPI+8)
#define DD_DXAPI_GET_SURFACE_STATE			(DD_FIRST_DXAPI+9)
#define DD_DXAPI_SET_SURFACE_STATE			(DD_FIRST_DXAPI+10)
#define DD_DXAPI_LOCK					(DD_FIRST_DXAPI+11)
#define DD_DXAPI_FLIP_OVERLAY				(DD_FIRST_DXAPI+12)
#define DD_DXAPI_FLIP_VP				(DD_FIRST_DXAPI+13)
#define DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE	(DD_FIRST_DXAPI+14)
#define DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE		(DD_FIRST_DXAPI+15)
#define DD_DXAPI_REGISTER_CALLBACK			(DD_FIRST_DXAPI+16)
#define DD_DXAPI_UNREGISTER_CALLBACK			(DD_FIRST_DXAPI+17)
#define DD_DXAPI_GET_POLARITY				(DD_FIRST_DXAPI+18)
#define DD_DXAPI_OPENVPCAPTUREDEVICE			(DD_FIRST_DXAPI+19)
#define DD_DXAPI_ADDVPCAPTUREBUFFER			(DD_FIRST_DXAPI+20)
#define DD_DXAPI_FLUSHVPCAPTUREBUFFERS			(DD_FIRST_DXAPI+21)

/* DDOPENVPCAPTUREDEVICEIN.dwFlags constants */
#define DDOPENCAPTURE_VIDEO			0x0001
#define DDOPENCAPTURE_VBI			0x0002

/* DDADDVPCAPTUREBUFF.dwFlags constants */
#define DDADDBUFF_SYSTEMMEMORY			0x0001
#define DDADDBUFF_NONLOCALVIDMEM		0x0002
#define DDADDBUFF_INVERT			0x0004

/* DDGETSURFACESTATEOUT.dwStateCaps/dwStateStatus constants */
#define DDSTATE_BOB				0x0001
#define DDSTATE_WEAVE				0x0002
#define DDSTATE_EXPLICITLY_SET			0x0004
#define DDSTATE_SOFTWARE_AUTOFLIP		0x0008
#define DDSTATE_SKIPEVENFIELDS			0x0010

/* DDREGISTERCALLBACK.dwEvents constants */
#define DDEVENT_DISPLAY_VSYNC			0x0001
#define DDEVENT_VP_VSYNC			0x0002
#define DDEVENT_VP_LINE				0x0004
#define DDEVENT_PRERESCHANGE			0x0008
#define DDEVENT_POSTRESCHANGE			0x0010
#define DDEVENT_PREDOSBOX			0x0020
#define DDEVENT_POSTDOSBOX			0x0040

/* LPDD_NOTIFYCALLBACK.dwFlags constants */
#define DDNOTIFY_DISPLAY_VSYNC			0x0001
#define DDNOTIFY_VP_VSYNC			0x0002
#define DDNOTIFY_VP_LINE			0x0004
#define DDNOTIFY_PRERESCHANGE			0x0008
#define DDNOTIFY_POSTRESCHANGE			0x0010
#define DDNOTIFY_PREDOSBOX			0x0020
#define DDNOTIFY_POSTDOSBOX			0x0040
#define DDNOTIFY_CLOSEDIRECTDRAW		0x0080
#define DDNOTIFY_CLOSESURFACE			0x0100
#define DDNOTIFY_CLOSEVIDEOPORT			0x0200
#define DDNOTIFY_CLOSECAPTURE			0x0400

typedef DWORD (PASCAL *LPDXAPI)(DWORD dwFunctionNum, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID  lpvOutBuffer, DWORD  cbOutBuffer);
typedef ULONG (PASCAL *LPDD_NOTIFYCALLBACK) (DWORD dwFlags, PVOID pContext, DWORD dwParam1, DWORD dwParam2);

typedef struct _DDCAPBUFFINFO {
  DWORD dwFieldNumber;
  DWORD bPolarity;
  LARGE_INTEGER liTimeStamp;
  DWORD ddRVal;
} DDCAPBUFFINFO, * LPDDCAPBUFFINFO;

typedef struct _DDADDVPCAPTUREBUFF {
  HANDLE hCapture;
  DWORD dwFlags;
  PMDL pMDL;
  PKEVENT pKEvent;
  LPDDCAPBUFFINFO lpBuffInfo;
} DDADDVPCAPTUREBUFF, * LPDDADDVPCAPTUREBUFF;

typedef struct _DDCLOSEHANDLE {
  HANDLE  hHandle;
} DDCLOSEHANDLE, *LPDDCLOSEHANDLE;

typedef struct _DDFLIPOVERLAY {
  HANDLE hDirectDraw;
  HANDLE hCurrentSurface;
  HANDLE hTargetSurface;
  DWORD dwFlags;
} DDFLIPOVERLAY, *LPDDFLIPOVERLAY;

typedef struct _DDFLIPVIDEOPORT {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
  HANDLE hCurrentSurface;
  HANDLE hTargetSurface;
  DWORD  dwFlags;
} DDFLIPVIDEOPORT, *LPDDFLIPVIDEOPORT;

typedef struct _DDGETAUTOFLIPIN {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
} DDGETAUTOFLIPIN, *LPDDGETAUTOFLIPIN;

typedef struct _DDGETAUTOFLIPOUT {
  DWORD  ddRVal;
  HANDLE hVideoSurface;
  HANDLE hVBISurface;
  WINBOOL bPolarity;
} DDGETAUTOFLIPOUT, *LPDDGETAUTOFLIPOUT;

typedef struct _DDGETPOLARITYIN {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
} DDGETPOLARITYIN, *LPDDGETPOLARITYIN;

typedef struct _DDGETPOLARITYOUT {
  DWORD  ddRVal;
  WINBOOL bPolarity;
} DDGETPOLARITYOUT, *LPDDGETPOLARITYOUT;

typedef struct _DDGETSURFACESTATEIN {
  HANDLE hDirectDraw;
  HANDLE hSurface;
} DDGETSURFACESTATEIN, *LPDDGETSURFACESTATEIN;

typedef struct _DDGETSURFACESTATEOUT {
  DWORD ddRVal;
  DWORD dwStateCaps;
  DWORD dwStateStatus;
} DDGETSURFACESTATEOUT, *LPDDGETSURFACESTATEOUT;

typedef struct _DDGETFIELDNUMIN {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
} DDGETFIELDNUMIN, *LPDDGETFIELDNUMIN;

typedef struct _DDGETFIELDNUMOUT {
  DWORD ddRVal;
  DWORD dwFieldNum;
} DDGETFIELDNUMOUT, *LPDDGETFIELDNUMOUT;

typedef struct _DDGETKERNELCAPSOUT {
  DWORD ddRVal;
  DWORD dwCaps;
  DWORD dwIRQCaps;
} DDGETKERNELCAPSOUT, *LPDDGETKERNELCAPSOUT;

typedef struct _DDGETVERSIONNUMBER {
  DWORD ddRVal;
  DWORD dwMajorVersion;
  DWORD dwMinorVersion;
} DDGETVERSIONNUMBER, *LPDDGETVERSIONNUMBER;

typedef struct _DDLOCKIN {
  HANDLE hDirectDraw;
  HANDLE hSurface;
} DDLOCKIN, *LPDDLOCKIN;

typedef struct _DDLOCKOUT {
  DWORD ddRVal;
  DWORD dwSurfHeight;
  DWORD dwSurfWidth;
  LONG  lSurfPitch;
  PVOID lpSurface;
  DWORD SurfaceCaps;
  DWORD dwFormatFlags;
  DWORD dwFormatFourCC;
  DWORD dwFormatBitCount;
  __GNU_EXTENSION union {
    DWORD dwRBitMask;
    DWORD dwYBitMask;
  };
  __GNU_EXTENSION union {
    DWORD dwGBitMask;
    DWORD dwUBitMask;
  };
  __GNU_EXTENSION union {
    DWORD dwBBitMask;
    DWORD dwVBitMask;
  };
} DDLOCKOUT, *LPDDLOCKOUT;


typedef struct _DDOPENDIRECTDRAWIN {
  ULONG_PTR		dwDirectDrawHandle;
  LPDD_NOTIFYCALLBACK	pfnDirectDrawClose;
  PVOID			pContext;
} DDOPENDIRECTDRAWIN, *LPDDOPENDIRECTDRAWIN;

typedef struct _DDOPENDIRECTDRAWOUT {
  DWORD  ddRVal;
  HANDLE hDirectDraw;
} DDOPENDIRECTDRAWOUT, *LPDDOPENDIRECTDRAWOUT;

typedef struct _DDOPENSURFACEIN {
  HANDLE		hDirectDraw;
  ULONG_PTR		dwSurfaceHandle;
  LPDD_NOTIFYCALLBACK	pfnSurfaceClose;
  PVOID			pContext;
} DDOPENSURFACEIN, *LPDDOPENSURFACEIN;

typedef struct _DDOPENSURFACEOUT {
  DWORD  ddRVal;
  HANDLE hSurface;
} DDOPENSURFACEOUT, *LPDDOPENSURFACEOUT;

typedef struct _DDOPENVIDEOPORTIN {
  HANDLE		hDirectDraw;
  ULONG			dwVideoPortHandle;
  LPDD_NOTIFYCALLBACK	pfnVideoPortClose;
  PVOID			pContext;
} DDOPENVIDEOPORTIN, *LPDDOPENVIDEOPORTIN;

typedef struct _DDOPENVIDEOPORTOUT {
  DWORD  ddRVal;
  HANDLE hVideoPort;
} DDOPENVIDEOPORTOUT, *LPDDOPENVIDEOPORTOUT;

typedef struct _DDOPENVPCAPTUREDEVICEIN {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
  DWORD  dwStartLine;
  DWORD  dwEndLine;
  DWORD  dwCaptureEveryNFields;
  LPDD_NOTIFYCALLBACK  pfnCaptureClose;
  PVOID  pContext;
  DWORD  dwFlags;
} DDOPENVPCAPTUREDEVICEIN, *LPDDOPENVPCAPTUREDEVICEIN;

typedef struct _DDOPENVPCAPTUREDEVICEOUT {
  DWORD  ddRVal;
  HANDLE hCapture;
} DDOPENVPCAPTUREDEVICEOUT, *LPDDOPENVPCAPTUREDEVICEOUT;

typedef struct _DDREGISTERCALLBACK {
  HANDLE		hDirectDraw;
  ULONG			dwEvents;
  LPDD_NOTIFYCALLBACK	pfnCallback;
  ULONG_PTR		dwParam1;
  ULONG_PTR		dwParam2;
  PVOID			pContext;
} DDREGISTERCALLBACK, *LPDDREGISTERCALLBACK;

typedef struct _DDSETSURFACETATE {
  HANDLE hDirectDraw;
  HANDLE hSurface;
  DWORD  dwState;
  DWORD  dwStartField;
} DDSETSURFACESTATE, *LPDDSETSURFACESTATE;

typedef struct _DDSETFIELDNUM {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
  DWORD  dwFieldNum;
} DDSETFIELDNUM, *LPDDSETFIELDNUM;

typedef struct _DDSETSKIPFIELD {
  HANDLE hDirectDraw;
  HANDLE hVideoPort;
  DWORD  dwStartField;
} DDSETSKIPFIELD, *LPDDSETSKIPFIELD;


DXAPI
DWORD PASCAL
DxApi(IN DWORD dwFunctionNum,
      IN LPVOID lpvInBuffer,
      IN DWORD cbInBuffer,
      OUT LPVOID lpvOutBuffer,
      OUT DWORD cbOutBuffer);


#endif /* __DDKMAPI_INCLUDED__ */

