#ifndef _VIA_DDMPEG_H_
#define _VIA_DDMPEG_H_ 1
#include "via_capture.h"
#define NUM_FRAME_BUFFERS 4
#define ALIGN_TO_32_BYTES(f) (((f) + 31) & ~31)
#define ALIGN_TO_16_BYTES(f) (((f) + 15) & ~15)
#define ALIGN_TO_256_BITS(f) (((f) + 255) & ~255)
#define ALIGN_TO_8_BYTES(f) (((f) + 7) & ~7)
#define ALIGN_TO_64_BITS(f) (((f) + 63) & ~63)
#define ENG_ALIGN_BYTE ALIGN_TO_32_BYTES
#define ENG_ALIGN_BIT ALIGN_TO_256_BITS
#define FOURCC_VIA 0x4E4B4C57
#define FOURCC_SUBP 0x50425553
#define FOURCC_TV0 0x00325654
#define FOURCC_TV1 0x00315654
#define FOURCC_ALPHA 0x48504C41
#define FOURCC_YUY2 0x32595559
#define FOURCC_YV12 0x32315659
#define FOURCC_Y211 0x31313259
#define FOURCC_UYVY 0x59565955
#define FOURCC_YVYU 0x55595659
#define FOURCC_IYUV 0x56555949
#define FOURCC_HQVMPEG 0x31565148
#define FOURCC_HQVTV0 0x33565148
#define FOURCC_HQVTV1 0x32565148
#define FOURCC_HQVSW 0x34565148
#define CREATEDRIVER 0x00
#define DESTROYDRIVER CREATEDRIVER +1
#define CREATESURFACE CREATEDRIVER +2
#define DESTROYSURFACE CREATEDRIVER +3
#define LOCKSURFACE CREATEDRIVER +4
#define UNLOCKSURFACE CREATEDRIVER +5
#define UPDATEOVERLAY CREATEDRIVER +6
#define FLIP CREATEDRIVER +7
#define SETALPHAWIN CREATEDRIVER +8
#define BEGINPICTRE CREATEDRIVER +9
#define BEGINPICTURE CREATEDRIVER +9
#define ENDPICTURE CREATEDRIVER +10
#define SLICERECEIVEDATA CREATEDRIVER +11
#define DRIVERPROC CREATEDRIVER +12
#define DISPLAYCONTROL CREATEDRIVER +13
#define SUBPICTURE CREATEDRIVER +14
#define SETDEINTERLACEMODE CREATEDRIVER +15
#define MPEGENABLE CREATEDRIVER +16
#define MPEGGETPICTYPE CREATEDRIVER +17
#define PUTVIDEO CREATEDRIVER +100
#define PUTSTILL CREATEDRIVER +101
#define GETVIDEO CREATEDRIVER +102
#define GETSTILL CREATEDRIVER +103
#define STOPVIDEO CREATEDRIVER +104
#define SETPORTATTRIBUTE CREATEDRIVER +105
#define GETPORTATTRIBUTE CREATEDRIVER +106
#define SELECTCAPTUREPORT CREATEDRIVER +107
#define VIDEOCONTROL CREATEDRIVER +108
#define HQVCONTROL CREATEDRIVER +109
#define PUTIMAGE CREATEDRIVER +110
#define VDEC_DETECT CREATEDRIVER +150
#define VDEC_INIT CREATEDRIVER +151
#define TUNER_DETECT CREATEDRIVER +152
#define TUNER_INIT CREATEDRIVER +153
#define TUNER_SETTVBAND_CABLE CREATEDRIVER +154
#define TUNER_SETCHANNEL CREATEDRIVER +155
#define AUDIOCONTROL CREATEDRIVER +170
#define UT_XV_FUNC_BIOS 0x11
#define UT_XV_FUNC_DRIVER 0x12
#define UT_XV_FUNC_DEVICE 0x13
#define UT_XV_FUNC_PANEL 0x14
#define UT_XV_FUNC_TV 0x15
#define UT_XV_FUNC_GAMMA 0x16
#define UT_XV_FUNC_BIOS_GetChipID 0x01
#define UT_XV_FUNC_BIOS_GetVersion 0x02
#define UT_XV_FUNC_BIOS_GetDate 0x03
#define UT_XV_FUNC_BIOS_GetVideoMemSizeMB 0x04
#define UT_XV_FUNC_DRIVER_GetFileName 0x01
#define UT_XV_FUNC_DRIVER_GetFileVersion 0x02
#define UT_RESULT_OK 1
#define UT_RESULT_FAIL 0
#define UT_RESULT_NO_FUNC -1
typedef struct _DDSURFACEDESC
{
unsigned long dwSize;
unsigned long dwFlags;
unsigned long dwHeight;
unsigned long dwWidth;
unsigned long lPitch;
unsigned long dwBackBufferCount;
void * lpSurface;
unsigned long dwColorSpaceLowValue;
unsigned long dwColorSpaceHighValue;
unsigned long dwFourCC;
} DDSURFACEDESC;
typedef DDSURFACEDESC * LPDDSURFACEDESC;
typedef struct _SUBDEVICE
{
unsigned char * lpSUBOverlaySurface[2];
unsigned long dwSUBPhysicalAddr[2];
unsigned long dwPitch;
unsigned long gdwSUBSrcWidth;
unsigned long gdwSUBSrcHeight;
unsigned long gdwSUBDstWidth;
unsigned long gdwSUBDstHeight;
unsigned long gdwSUBDstLeft;
unsigned long gdwSUBDstTop;
}SUBDEVICE;
typedef SUBDEVICE * LPSUBDEVICE;
typedef struct _MPGDEVICE
{
unsigned char * lpVideoMemIO;
unsigned char * lpMPEGOverlaySurface[NUM_FRAME_BUFFERS];
unsigned long dwMPEGPhysicalAddr[NUM_FRAME_BUFFERS];
unsigned long dwWidth;
unsigned long dwHeight;
unsigned long dwPitch;
unsigned long dwPageNum;
unsigned char byDeviceType;
unsigned long gdwSetBufferIndex;
unsigned long gdwMPGState;
unsigned long gdwSUBPState;
unsigned long dwSubpPageNum;
unsigned long dwSUBPPitch;
unsigned long gdwSUBPSrcLeft;
unsigned long gdwSUBPSrcTop;
unsigned long gdwSUBPSrcWidth;
unsigned long gdwSUBPSrcHeight;
unsigned long gdwSUBPDisplayIndex;
unsigned long gdwMPGSrcWidth;
unsigned long gdwMPGSrcHeight;
unsigned long gdwMPGDstWidth;
unsigned long gdwMPGDstHeight;
unsigned long gdwMPGDstLeft;
unsigned long gdwMPGDstTop;
unsigned long dwDeinterlaceMode;
unsigned long gdwSUBP_NotVisible;
unsigned long dwMPEGYPhysicalAddr[NUM_FRAME_BUFFERS];
unsigned long dwMPEGCbPhysicalAddr[NUM_FRAME_BUFFERS];
unsigned long dwMPEGCrPhysicalAddr[NUM_FRAME_BUFFERS];
unsigned long dwMPEGDisplayIndex ;
unsigned long dwHQVAddr[3];
unsigned long dwEnableErrorConcealment;
unsigned long dwVendorID;
unsigned long dwDeviceID;
unsigned long dwRevisionID;
unsigned long dwSubVendorID;
unsigned long dwSubDeviceID;
}MPGDEVICE, * LPMPGDEVICE;
typedef struct _SWDEVICE
{
unsigned char * lpSWOverlaySurface[2];
unsigned long dwSWPhysicalAddr[2];
unsigned long dwSWCbPhysicalAddr[2];
unsigned long dwSWCrPhysicalAddr[2];
unsigned long dwHQVAddr[3];
unsigned long dwWidth;
unsigned long dwHeight;
unsigned long dwPitch;
unsigned long gdwSWSrcWidth;
unsigned long gdwSWSrcHeight;
unsigned long gdwSWDstWidth;
unsigned long gdwSWDstHeight;
unsigned long gdwSWDstLeft;
unsigned long gdwSWDstTop;
unsigned long dwDeinterlaceMode;
}SWDEVICE;
typedef SWDEVICE * LPSWDEVICE;
#define DEV_MPEG 0
#define DEV_SUBP 1
#define VIA_PICT_STRUCT_TOP 0x00000001
#define VIA_PICT_STRUCT_BOTTOM 0x00000002
#define VIA_PICT_STRUCT_FRAME 0x00000003
typedef struct _DDLOCK
{
unsigned long dwVersion;
unsigned long dwFourCC;
unsigned long dwPhysicalBase;
SUBDEVICE SubDev;
CAPDEVICE Capdev_TV0;
CAPDEVICE Capdev_TV1;
MPGDEVICE MPGDev;
SWDEVICE SWDevice;
} DDLOCK;
typedef DDLOCK * LPDDLOCK;
typedef struct _RECTL
{
unsigned long left;
unsigned long top;
unsigned long right;
unsigned long bottom;
} RECTL;
typedef struct _DDUPDATEOVERLAY
{
RECTL rDest;
RECTL rSrc;
unsigned long dwFlags;
unsigned long dwColorSpaceLowValue;
unsigned long dwColorSpaceHighValue;
unsigned long dwFourcc;
} DDUPDATEOVERLAY;
typedef DDUPDATEOVERLAY * LPDDUPDATEOVERLAY;
typedef struct _ADJUSTFRAME
{
int x;
int y;
} ADJUSTFRAME;
typedef ADJUSTFRAME * LPADJUSTFRAME;
#define DDOVER_HIDE 0x00000001
#define DDOVER_SHOW 0x00000002
#define DDOVER_KEYDEST 0x00000004
#define DDOVER_ENABLE 0x00000008
#define DDOVER_CLIP 0x00000010
#define DDOVER_BOB 0x00200000l
#define DDOVER_OVERRIDEBOBWEAVE 0x00400000l
#define DDOVER_INTERLEAVED 0x00800000l
#define DDOVER_BOBHARDWARE 0x01000000l
typedef struct _DDFLIP
{
unsigned long dwBuffIndex;
unsigned long dwFlags;
} DDFLIP;
typedef DDFLIP * LPDDFLIP;
typedef struct
{
CARD32 dwWidth;
CARD32 dwHeight;
CARD32 dwOffset;
CARD32 dwUVoffset;
CARD32 dwFlipTime;
CARD32 dwFlipTag;
CARD32 dwStartAddr;
CARD32 dwV1OriWidth;
CARD32 dwV1OriHeight;
CARD32 dwV1OriPitch;
CARD32 dwV1SrcWidth;
CARD32 dwV1SrcHeight;
CARD32 dwV1SrcLeft;
CARD32 dwV1SrcRight;
CARD32 dwV1SrcTop;
CARD32 dwV1SrcBot;
CARD32 dwSPWidth;
CARD32 dwSPHeight;
CARD32 dwSPLeft;
CARD32 dwSPRight;
CARD32 dwSPTop;
CARD32 dwSPBot;
CARD32 dwSPOffset;
CARD32 dwSPstartAddr;
CARD32 dwDisplayPictStruct;
CARD32 dwDisplayBuffIndex;
CARD32 dwFetchAlignment;
CARD32 dwSPPitch;
unsigned long dwHQVAddr[3];
CARD32 dwMPEGDeinterlaceMode;
CARD32 dwMPEGProgressiveMode;
CARD32 dwHQVheapInfo;
CARD32 dwVideoControl;
CARD32 dwminifyH;
CARD32 dwminifyV;
CARD32 dwMpegDecoded;
} OVERLAYRECORD;
#define VIA_DEINTERLACE_WEAVE 0x00000000
#define VIA_DEINTERLACE_BOB 0x00000001
#define VIA_NON_PROGRESSIVE 0x00000000
#define VIA_PROGRESSIVE 0x00000010
typedef struct _DDPIXELFORMAT
{
unsigned long dwSize;
unsigned long dwFlags;
unsigned long dwFourCC;
unsigned long dwRGBBitCount;
unsigned long dwYUVBitCount;
unsigned long dwZBufferBitDepth;
unsigned long dwAlphaBitDepth;
unsigned long dwRBitMask;
unsigned long dwYBitMask;
unsigned long dwGBitMask;
unsigned long dwUBitMask;
unsigned long dwBBitMask;
unsigned long dwVBitMask;
unsigned long dwRGBAlphaBitMask;
unsigned long dwYUVAlphaBitMask;
unsigned long dwRGBZBitMask;
unsigned long dwYUVZBitMask;
} DDPIXELFORMAT;
typedef DDPIXELFORMAT * LPDDPIXELFORMAT;
#define DDPF_FOURCC 0x00000004l
#define DDPF_RGB 0x00000040l
#define PI_OK 0x00
#define PI_ERR 0x01
#define PI_ERR_NO_X_WINDOW PI_ERR +1
#define PI_ERR_CANNOT_OPEN_VIDEO_DEVICE PI_ERR +2
#define PI_ERR_CANNOT_USE_IOCTL PI_ERR +3
#define PI_ERR_CANNOT_CREATE_SURFACE PI_ERR +4
unsigned long VIADriverProc(unsigned long wAction, void * lpParam);
unsigned long VIABeginPicture(void * lpMPGSurface);
unsigned long VIAEndPicture(void * lpMPGSurface);
unsigned long VIASliceReceiveData(unsigned long dwByteCount, unsigned char * lpData);
unsigned long VIADisplayControl(unsigned long devType, void * lpData);
unsigned long VIASUBPicture(void * lpSubp);
unsigned long VIASetDeInterlaceMode(unsigned long dwMode);
int PrivPutImage(unsigned char* buf);
#endif