windows-nt/Source/XPSP1/NT/drivers/wdm/capture/codec/tsbyuv/vcstruct.h
2020-09-26 16:20:57 +08:00

116 lines
3.5 KiB
C

/*
* Copyright (c) Microsoft Corporation 1993. All Rights Reserved.
*/
/*
* vcstruct.h
*
* 32-bit Video Capture Driver
*
* This header describes structures used in the interface between the
* kernel driver and the user-mode dll.
*
* Geraint Davies, Feb 93.
*/
#ifndef _VCSTRUCT_
#define _VCSTRUCT_
/* --- configuration ------------------------------------------------- */
/*
* this structure contains configuration information generated
* by the hardware-specific dialogs and sent to the hardware-specific
* kernel-mode code. No one else knows its format.
*
* these generic structures are used so that driver writers can
* change the user-mode dialogs and the supporting hardware-specific code
* and yet still use the common code for interfacing between the
* two and dealing with NT.
*/
typedef struct _CONFIG_INFO {
ULONG ulSize; /* size of struct including size field */
BYTE ulData[1]; /* (ulSize - sizeof(ULONG)) bytes of data */
} CONFIG_INFO, *PCONFIG_INFO;
/* --- overlay keying and region setting ---------------------------- */
typedef struct _OVERLAY_MODE {
ULONG ulMode;
} OVERLAY_MODE, *POVERLAY_MODE;
/* values for overlay mode field - or-ed together */
#define VCO_KEYCOLOUR 1 // true if a key colour supported
#define VCO_KEYCOLOUR_FIXED 2 // if not true, you can change it
#define VCO_KEYCOLOUR_RGB 4 // if not true, use palette index
#define VCO_SIMPLE_RECT 8 // if true, supports a single rect
#define VCO_COMPLEX_REGION 0x10 // if true, supports complex regions.
/*
* values indicating whether we can put data back into the frame
* buffer for overlaying (we support the DrawFrame ioctl for the
* Y411 and/or S422 formats
*/
#define VCO_CAN_DRAW_Y411 0x20 // 7-bit 4:1:1 yuv ala bravado
#define VCO_CAN_DRAW_S422 0x40 // 8-bit 4:2:2 yuv ala spigot
#define VCO_CAN_DRAW 0x60 // for testing: can he draw anything?
typedef struct _OVERLAY_RECTS {
ULONG ulCount; // total number of rects in array
RECT rcRects[1]; // ulCount rectangles.
}OVERLAY_RECTS, *POVERLAY_RECTS;
typedef RGBQUAD * PRGBQUAD;
/* --- frame capture ------------------------------------------------ */
/*
* declaring a real LPVIDEOHDR in the kernel driver is too much of a
* pain with header files. So the kernel interface will use this declaration
*/
typedef struct _CAPTUREBUFFER {
PUCHAR lpData; /* buffer data area */
ULONG BufferLength; /* length of buffer */
ULONG BytesUsed; /* actual bytes of data (size of dib) */
ULONG TimeCaptured; /* millisec time stamp */
PVOID Context; /* pointer to user context data */
DWORD dwFlags; /* not used by kernel interface */
/*
* remaining are declared as 4 reserved dwords in orig struct
* we use these fields for partial-frame requests
*/
DWORD dwWindowOffset; /* current window offset from
* start of buffer
*/
DWORD dwWindowLength; /* length of current window */
DWORD dwReserved[2]; /* not used */
} CAPTUREBUFFER, * PCAPTUREBUFFER;
/* --- drawing ------------------------------------------------------- */
/*
* used by sample hardware codec to write data back into frame buffer
*/
typedef struct _DRAWBUFFER {
PUCHAR lpData; /* frame data to be drawn */
ULONG ulWidth; /* width of frame in pixels */
ULONG ulHeight; /* height of frame in pixels */
ULONG Format; /* h/w specific data format code */
RECT rcSource; /* write only this rect to the device */
} DRAWBUFFER, *PDRAWBUFFER;
#endif //_VCSTRUCT_