windows-nt/Source/XPSP1/NT/multimedia/media/avi/drawdib.16/dva/dva.h
2020-09-26 16:20:57 +08:00

150 lines
3.8 KiB
C

/****************************************************************************
DVA.H
Copyright (c) 1993 Microsoft Corporation
DVA 1.0 Interface Definitions
***************************************************************************/
#ifndef _INC_DVA
#define _INC_DVA
#ifdef __cplusplus
#define __inline inline
extern "C" {
#endif
/****************************************************************************
***************************************************************************/
#include "dvaddi.h" // interface to the display driver
/****************************************************************************
***************************************************************************/
typedef DVASURFACEINFO FAR *PDVA;
typedef PDVA HDVA;
/****************************************************************************
***************************************************************************/
//
// this code in biCompression means the frame buffer must be accesed via
// 48 bit pointers! using *ONLY* the given selector
//
// BI_1632 has bitmasks (just like BI_BITFIELDS) for biBitCount == 16,24,32
//
#ifndef BI_1632
#define BI_1632 0x32333631 // '1632'
#endif
#ifndef BI_BITFIELDS
#define BI_BITFIELDS 3
#endif
/****************************************************************************
***************************************************************************/
#if defined(_INC_VFW) || defined(_INC_DRAWDIB)
//
// this API is in MSVIDEO.DLL
//
BOOL VFWAPI DVAGetSurface(HDC hdc, int nSurface, DVASURFACEINFO FAR *lpSurfaceInfo);
#else
//
// this API uses the Escape to the display driver only
//
__inline BOOL DVAGetSurface(HDC hdc, int nSurface, DVASURFACEINFO FAR *pdva)
{
int i;
i = Escape(hdc, DVAGETSURFACE,sizeof(int),(LPCSTR)&nSurface,(LPVOID)pdva);
return i > 0;
}
#endif
/****************************************************************************
***************************************************************************/
__inline PDVA DVAOpenSurface(HDC hdc, int nSurface)
{
PDVA pdva;
pdva = (PDVA)GlobalLock(GlobalAlloc(GHND|GMEM_SHARE, sizeof(DVASURFACEINFO)));
if (pdva == NULL)
return NULL;
if (!DVAGetSurface(hdc, nSurface, pdva) ||
!pdva->OpenSurface(pdva->lpSurface))
{
GlobalFree((HGLOBAL)SELECTOROF(pdva));
return NULL;
}
return pdva;
}
/****************************************************************************
***************************************************************************/
__inline void DVACloseSurface(PDVA pdva)
{
if (pdva == NULL)
return;
pdva->CloseSurface(pdva->lpSurface);
GlobalFree((HGLOBAL)SELECTOROF(pdva));
}
/****************************************************************************
***************************************************************************/
__inline BOOL DVABeginAccess(PDVA pdva, int x, int y, int dx, int dy)
{
return pdva->BeginAccess(pdva->lpSurface, x, y, dx, dy);
}
/****************************************************************************
***************************************************************************/
__inline void DVAEndAccess(PDVA pdva)
{
pdva->EndAccess(pdva->lpSurface);
}
/****************************************************************************
***************************************************************************/
__inline LPBITMAPINFOHEADER DVAGetSurfaceFmt(PDVA pdva)
{
if (pdva == NULL)
return NULL;
return &pdva->BitmapInfo;
}
/****************************************************************************
***************************************************************************/
__inline LPVOID DVAGetSurfacePtr(PDVA pdva)
{
if (pdva == NULL)
return NULL;
return (LPVOID)MAKELONG(pdva->offSurface, pdva->selSurface);
}
#ifdef __cplusplus
}
#endif
#endif // _INC_DVA