|
|
#/*
* hardware.h * * 32-bit Video Capture driver * hardware-specific data structures and definitions for Bravado-16 board. * * Geraint Davies, Feb 93 */
#ifndef _HARDWARE_H_
#define _HARDWARE_H_
/* register layout details of Bravado board */
/* number of registers in PCVideo chip */ #define NR_REG_PCVIDEO 0x51
/* nr registers in 9051 a-d chip */ #define NR_REG_9051 12
/* nr registers in 4680 d-a chip */ #define NR_REG_4680 16
/* hardware-specific data structure - stored in device extension and
* accessed by VC_GetHWInfo(pDevInfo) */ typedef struct _HWINFO {
/* Copy of registers in PCVideo and other chips so we can save the
* entire board state by saving this structure - and we also dont * have to struggle getting bytes back over the I2C bus. */ BYTE bRegPCVideo[NR_REG_PCVIDEO]; BYTE bReg9051[NR_REG_9051]; BYTE bReg4680[NR_REG_4680];
BYTE bKeyColour;
/* index into MODEINIT table */ int iModeIndex;
VIDSTD VideoStd;
/* vga screen co-ords of overlay window */ RECT rcDisplay;
/* co-ords of acquisition area within original (pal, ntsc) video source */ RECT rcAcquire;
int PanLeft, PanTop; // pan: offset of video within overlay rect
/* stream position variables */ DWORD dwInterruptCount; // count of ints since stream began
DWORD dwVideoTime; // time (based on frame syncs) since start
DWORD dwMicroPerInterrupt; // - interrupt rate based on NTSC/PAL
DWORD dwMicroPerFrame; // microsecs per frame desired
DWORD dwNextFrameNr; DWORD dwNextFrameTime; // next capture time in msecs from stream start
BOOL bVideoIn; // are we actually doing video in ?
BOOL bCapturing; // in DPC routine now
int iNotBusy; // count of consecutive non-busy fields
/* capture format information */ CAPTUREFORMAT Format; // format of destination DIB
DWORD dwWidth, dwHeight; // size of destination DIB
PVOID pXlate; // format-dependent translation table
ULONG ulSizeXlate; // size of Xlate table in bytes
} HWINFO, *PHWINFO;
/* default config info */ #define NUMBER_OF_PORTS 0x2
#define FRAMEBUFFER_SIZE 0x100000 // 1 Mb = 512 lines of 2048 bytes
#define DEF_VIDEOSTD PAL
/* width of one line in the frame buffer in bytes */ #define FRAMEBUFFERWIDTH 2048
/* frame timing. we get one interrupt per frame (we only enable
* even field interrupts) so the ms per interrupt is the frame not field rate */ #define PAL_MICROSPERFRAME (1000000L/25)
#define NTSC_MICROSPERFRAME (1000000L/30)
/* VGA-Mode specific setup table */ typedef struct _MODEINIT { int ModeNum; int DispWinSkewX; /* Offset to add to display window registers */ int DispWinSkewY; int DispAddrSkewX; /* Offset to be added to display address */ int DispAddrSkewY; int ShiftClkStart; /* Shift clock start position */ int PaletteSkew; /* 2 MSBs of Display Window Control Reg. */ int VideoSkewX; /* Add to acquistion window start X and Y */ int VideoSkewY; int VGAWidth; /* VGA resolution */ int VGAHeight; int VGADepth; int VGASync; int PLLDivisor; } MODEINIT, *PMODEINIT;
/* defined in init.c */ extern MODEINIT ModeInit[];
/* functions called from dispatch code via callback table */
BOOLEAN HW_ConfigFormat(PDEVICE_INFO, PCONFIG_INFO); BOOLEAN HW_ConfigDisplay(PDEVICE_INFO, PCONFIG_INFO); BOOLEAN HW_ConfigSource(PDEVICE_INFO, PCONFIG_INFO);
DWORD HW_GetOverlayMode(PDEVICE_INFO); BOOLEAN HW_SetKeyRGB(PDEVICE_INFO, PRGBQUAD); BOOLEAN HW_SetKeyPalIdx(PDEVICE_INFO, ULONG); ULONG HW_GetKeyColour(PDEVICE_INFO); BOOLEAN HW_SetOverlayRects(PDEVICE_INFO, POVERLAY_RECTS); BOOLEAN HW_SetOverlayOffset(PDEVICE_INFO, PRECT); BOOLEAN HW_Overlay(PDEVICE_INFO, BOOL); BOOLEAN HW_Capture(PDEVICE_INFO, BOOL);
BOOLEAN HW_DrawFrame(PDEVICE_INFO, PDRAWBUFFER);
BOOLEAN HW_StreamInit(PDEVICE_INFO pDevInfo, ULONG microsecperframe); BOOLEAN HW_StreamFini(PDEVICE_INFO pDevInfo); BOOLEAN HW_StreamStart(PDEVICE_INFO pDevInfo); BOOLEAN HW_StreamStop(PDEVICE_INFO pDevInfo); ULONG HW_StreamGetPosition(PDEVICE_INFO); BOOLEAN HW_InterruptAcknowledge(PDEVICE_INFO pDevInfo); ULONG HW_CaptureService(PDEVICE_INFO pDevInfo, PUCHAR pBuffer, PULONG pTimeStamp, ULONG BufferLength);
BOOLEAN HW_Cleanup(PDEVICE_INFO);
BOOLEAN HW_DeviceOpen(PDEVICE_INFO pDevInfo);
/* hardware access functions in hardware.c */
VOID HW_SetPan(PDEVICE_INFO pDevInfo, int x, int y); VOID HW_SetScale(PDEVICE_INFO pDevInfo, int scalex, int scaley); VOID HW_SetAcqRect(PDEVICE_INFO pDevInfo, int left, int top, int width, int height); VOID HW_SetDisplayWin(PDEVICE_INFO pDevInfo, PHWINFO pHw); VOID HW_SetVideoStd(PDEVICE_INFO pDevInfo, PHWINFO pHw);
VOID HW_EnableInts(PDEVICE_INFO pDevInfo, BOOL bInIsr); VOID HW_ReEnableInts(PDEVICE_INFO pDevInfo, BOOL bInIsr); VOID HW_DisableInts(PDEVICE_INFO pDevInfo, BOOL bInIsr);
/* copy/conversion routines in xlate.c */ BOOLEAN HW_BuildYUVToRGB555(PDEVICE_INFO pDevInfo, PHWINFO pHw);
BOOLEAN HW_BuildYuvToPal( PDEVICE_INFO pDevInfo, PUCHAR pBuffer, ULONG Length, PVOID pContext );
/*
* build a translation table to a default 64-grey level palette */ BOOLEAN HW_BuildDefaultXlate(PDEVICE_INFO, PHWINFO);
/*
* copy a rectangle of bytes width bytes * height lines. Sourcewidth is * the entire source line length in bytes. pSrc is a pointer to IOMemory and * (the frame buffer) and will be accessed using VC_ReadIOMemory* functions. */ VOID CopyRectFromIOMemory( PUCHAR pDst, PUCHAR pSrc, DWORD Width, DWORD Height, DWORD SourceWidth );
/*
* convert to 24-bit RGB DIB format. width * height pixels. WidthBytes * is the source line length in bytes. */ VOID CopyYUVToRGB24( PUCHAR pDst, /* destination pixels */ PUCHAR pSrc, /* source pixels */ DWORD Width, /* width of copy rect in pixels */ DWORD Height, /* height of copy rect in lines */ DWORD WidthBytes /* width of one entire source line in bytes */ );
/*
* convert to 16-bit RGB DIB format width*height pixels from pSrc to pDst. * WidthBytes is the source line length in bytes */ VOID CopyYUVToRGB555( PUCHAR pDst, /* destination pixels */ PUCHAR pSrc, /* source pixels */ PWORD pXlate, /* translation table yuv-15 to rgb-15 */ DWORD Width, /* width of copy rect in pixels */ DWORD Height, /* height of copy rect in lines */ DWORD WidthBytes /* width of one entire source line in bytes */ );
/*
* convert to 8-bit palettised DIB format width * height pixels from pSrc * to pDst. WidthBytes is the source line length in bytes. */ VOID CopyYUVToPal8( PUCHAR pDst, /* destination pixels */ PUCHAR pSrc, /* source pixels */ PUCHAR pXlate, /* translation table yuv-15 to palette entry */ DWORD Width, /* width of copy rect in pixels */ DWORD Height, /* height of copy rect in lines */ DWORD WidthBytes /* width of one entire source line in bytes */ );
#endif // _HARDWARE_H_
|