⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 okapi32.h

📁 OK视频采集卡VC源代码
💻 H
📖 第 1 页 / 共 4 页
字号:


//-----sub-function defines for lParam of GetSignalParam
#define		SIGNAL_VIDEOEXIST		1 //0 video  absent, 1 exist
#define		SIGNAL_VIDEOTYPE		2 //0 field, 1 interlaced
#define		SIGNAL_SCANLINES		3 //scan lines per frame
#define		SIGNAL_LINEFREQ			4 //line frequency
#define		SIGNAL_FIELDFREQ		5 //frame frequency
#define		SIGNAL_FRAMEFREQ		6 //frame frequency
#define		SIGNAL_EXTTRIGGER		7 //extern trigger status, 1 trigger
#define		SIGNAL_FIELDID			8 //Field ID 0 odd, 1 even
#define		SIGNAL_VIDEOCOLOR		9 //color(1) or B/W(0)
#define		SIGNAL_TRANSFERING		10 //1 transfering video data

//-----sub-function defines for lEvent of WaitSignalEvent
#define		EVENT_FIELDHEADER		1 //field header
#define		EVENT_FRAMEHEADER		2 //frame header
#define		EVENT_ODDFIELD			3 //odd field come
#define		EVENT_EVENFIELD			4 //even field come
#define		EVENT_EXTTRIGGER		5 //extern trigger come, 
									  //(HIWORD(lEvent) is pole)

//-----sub-function defines for lParam of PutSignalParam
#define		PUTSIGNAL_TRIGGER		1 //put trigger signal, 1 trigger
#define		PUTSIGNAL_VERTSYNC		2 //enbale vertic sync. output


//-----sub-function defines for lParam of okSetConvertParam
#define		CONVERT_RESETALL		0 //reset all to sys default
#define		CONVERT_FIELDEXTEND		1 //field extend				
#define		CONVERT_PALETTE			2 //set convert palette (just for 8 to 24 or 32)
					//lParam=0: restore system default, >0: new palette pointer 
#define		CONVERT_HORZEXTEND		3 //horzental extend (integer times)
#define		CONVERT_HORZSTRETCH		4 //horzental stretch (arbitrary number times)
#define		CONVERT_MIRROR			5 //x(=1) and y(=2) mirror (note:just to convert data with BUFFER)
#define		CONVERT_UPRIGHT			6 //up to righ(=1)(rotate right 90 D) or left (=2) (rotate left 90 D


//when wParam=CONVERT_FIELDEXTEND
//field extend mode
#define		FIELD_JUSTCOPY			0 //just copy row by row 
#define		FIELD_COPYEXTEND		1 //copy one row and expend one row (x2)
#define		FIELD_INTERLEAVE		2 //just copy odd(1.) rows (/2)
#define		FIELD_INTEREXTEND		3 //copy one odd row and expend one row 
#define		FIELD_COPYINTERPOL		4 //copy one odd row and interpolate one row
#define		FIELD_INTERINTERPOL		5 //copy odd row and interpolate even row

#define		FIELD_INTEREVEN			6 //just copy even(2.) rows (/2)
#define		FIELD_INTEREXTEVEN		7 //copy one even row and expend one row 
#define		FIELD_JUSTCOPYODD		8 //just copy odd rows to odd rows  
#define		FIELD_JUSTCOPYEVEN		9 //just copy even rows to even rows  
#define		FIELD_ODDEVENCROSS		10 //copy odd and even cross 

									//just for the case without bit converting



//-----defines for several target we can support 
typedef	LPARAM	TARGET;

#define		BUFFER		(TARGET)1	//Buffer(physical) allocated from host memory
#define		VIDEO		(TARGET)0	//Video source input to the board 
#define		SCREEN		(TARGET)-1	//Screen supported by VGA
#define		FRAME		(TARGET)-2	//Frame buffer on the board
#define		MONITOR		(TARGET)-3	//Monitor supported by (D/A) TV standard


#define		SEQFILE			0x5153	//SQ 
#define		BMPFILE			0x4d42	//BM
#define		JPGFILE			0x504A	//JP 

#define		BLKHEADER		0x4b42	//BK
#define		BMPHEADER		0x4d42	//BM
#define		BUFHEADER		0x4642	//BF

//-----defines messages for user 

#define	WM_CLOSEREPLAY			WM_USER+100
		//send this message when close replay dlg

#define	WM_BEGINSEQPROC			WM_USER+101
		//begin seq proc, wParam=hBaord
#define	WM_SEQPROGRESS			WM_USER+102
		//seq in progress, wParam=hBaord, lParam=No. to
#define	WM_ENDSEQPROC			WM_USER+103
		//end seq proc, wParam=hBaord

//-----------struct defines---------------

//--app user used struct



typedef struct _okdevtype { //added after 28/02/2005, to replace struct _boardtype
	long	iBoardTypeCode; //ok image device type code (e.g. 2030(capture card), 201100(camera))
	long	iBoardIdentCode; //ok image device identity code (e.g. 2130)
	long	iBoardRankCode; //ok image device model code 0,1,..
	char	szBoardName[116]; //ok image device name (eg."OK_M20H", "OK_AM1100"...)
} OKDEVTYPE, *LPOKDEVTYPE; //128 bytes 

typedef struct _boardtype {
	short	iBoardTypeCode; //ok board type code (e.g. 2030)
	char	szBoardName[18]; //board name (eg."OK_M20H")
	short	iBoardIdentCode; //ok board identity code (e.g. 2130)
	short	iBoardRankCode; //ok board model code 0,1,..
} BOARDTYPE, *LPBOARDTYPE; //24 bytes

//image file block size
typedef struct _blocksize {
	short	iWidth;		//width
	short	iHeight;	//height
	short	iBitCount; //pixel bytes iBitCount
	short	iFormType;	//rgb format type, need to fill when RGB565 or RGB 555
	long	lBlockStep; //block stride (step to next image header)
						//need to fill when treat multi block else set 0
}BLOCKSIZE;



//image block info
typedef struct _blockinfo {
	short	iType;	//=BK or SQ, BM
	//struct _blocksize;
	short	iWidth;		//width
	short	iHeight;	//height
	short	iBitCount; //pixel bytes iBitCount
	short	iFormType;	//rgb format type, need to fill when RGB565 or RGB 555
	short	lBlockStep; //block stride (step to next image header)
	short	iHiStep;// HIWORD of block stride
	short	lTotal;	//frame num
	short	iHiTotal;// HIWORD of total
	short	iInterval; //frame interval
	LPBYTE	lpBits;// image data pointer / file path name
	LPBYTE	lpExtra;// extra data (like as palette, mask) pointer
} BLOCKINFO, *LPBLOCKINFO;

//sequence file info
typedef struct { //file info for seq
	short	iType;	//=SQ or BM
	//struct _blocksize;
	short	iWidth;		//width
	short	iHeight;	//height
	short	iBitCount; //pixel bytes iBitCount
	short	iFormType;	//rgb format type, need to fill when RGB565 or RGB 555
	short	lBlockStep; //block stride (step to next image header)
	short	iHiStep;// HIWORD of block stride
	short	lTotal;	//frame num
	short	iHiTotal;// HIWORD of total
	short	iInterval; //frame interval
} SEQINFO;


//for replay
typedef struct { //file info for seq
	LPBITMAPINFOHEADER	lpbi; //bitmap info
	BYTE			*lpdib; //dib data
	HWND			hwndPlayBox; //1 replaying, 0 quit
	short			iCurrFrame; //current frame in buffer
	short			iReserved; //
} DIBINFO, *LPDIBINFO;


//---set text mode----
typedef struct _settextmode {
	DWORD	dwForeColor; // forecolor, see macro RGB in win
	DWORD	dwBackColor; // backcolor, see macro RGB in win
	DWORD	dwSetMode; // 0:FULLCOPY, 1: FULLXOR, ...
	WORD	wFrameNo; // place which frame of target
	WORD	wReserved; // not used
} SETTEXTMODE;

#define		FULLCOPY		0		//copy full text region into target
#define		FULLXOR			1		//xor full text region and target
#define		COPYFONT		2		//just copy fonts strokes to target
#define		XORFONT			3		//just xor fonts strokes and target


//---encode and decode-----------------------------

//---get image size for jpeg------
typedef struct _imagesize {
	DWORD	dwWidth;
	DWORD	dwHeight;
	DWORD	dwBitCount;
	DWORD	dwTotal;
}IMAGESIZE, *LPIMAGESIZE;

//--set jpeg params
typedef struct _jpegparam {
	DWORD		dwSize; // the size of this strcut, must be set
	LPSTR		lpstrName;	//must be NULL if not use
	DWORD		dwQuality; //
	DWORD		dwReserved1;
} JPEGPARAM, *LPJPEGPARAM;



//----------
struct _imagesize_info {
	long	lHeadSize;      //struct header size
	long	lHorzSize;		//width, (default=768 when it as input)
	long	lVertSize;		//height, (default=768 when it as input)
	long	lBitCount;      //bit count (default=24 when it as input)
	long	lTotalFrame;    //total frames 
	long	reserved0;      //reserved
};

//---used to set and get image info ------
typedef struct _jpg2k_header_info {
	struct _imagesize_info;

	long	lQuality;     //jpeg quality factor (default=75),

	long	reserved1;    //reserved
	long	reserved2;    //reserved
	long	reserved3;    //reserved
	long	reserved4;    //reserved
} JPG2KHEADER;



//---used to set and get image info ------
typedef struct _mpg2_header_info {
	struct _imagesize_info;

	double	dbFrameRate;      //frame rate (default=25, and it is expected rate when it as input)
	double	dbBitRate;        //bits rate

	long	reserved1;        //reserved
	long	reserved2;        //reserved
	long	reserved3;        //reserved
	long	reserved4;        //reserved
} MPEG2HEADER;


//---used to set and get image info ------
typedef struct _mpg4_header_info  
{
	struct _imagesize_info;

	double	dbFrameRate;	//frame rate (default=25, and it is expected rate when it as input)
	double	dbBitRate;		//bits rate, (default=4000000, and it is recommended)
	long	lEncodeMode;    //Encode mode, (value range 0~1, 0: double channels, 1:fix code rate as dbBitRate preset.
							//default=0, when it as input) 
	long	lInterval;      //Interval between key frame, (range: 1--300, default =100)
	long	lBFrameNum;		//B frame mode, (value range:0~2,  default=0. It is compatible as divx5.0
							//=2, little coded data but more encoding times
	long	lQualityIdx;	//mpeg4 quality control index, (value range: 0~6, default=0)
							//It will be better quality if value greater, but it will need longer times

	long	reserved1;        //reserved
	long	reserved2;        //reserved
	long	reserved3;        //reserved
	long	reserved4;        //reserved
} MPEG4HEADER;


//---used to set and get image info ------
typedef struct _mjpg_header_info   
{
	struct _imagesize_info;

	long	lQuality;     //jpeg quality factor (default=75, 1~100) 
	double	dbFrameRate;  //frame rate (default=25, and it is expected rate when it as input)

	long	reserved1;    //reserved
	long	reserved2;    //reserved
	long	reserved3;    //reserved
	long	reserved4;    //reserved
} MJPGHEADER;


//--get frame type decoded 
typedef struct _mpeg_frame_info    
{
	long	lHeadSize;       //struct size
	long	lFrameType;		//current frame type
	long	lSkip;  		//input
	long	reserved1;      //reserved
	long	reserved2;      //reserved
	long	reserved3;      //reserved
	long	reserved4;      //reserved
} MPEGFRAMEINFO;



//------ okapi32 functions list -----------

#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif /* __cplusplus */


//--1. basic routines--------------

//prolog and epilog
HANDLE	WINAPI okOpenBoard(long *iIndex); //okLockBoard
		//open a Ok series board in specified index(0 based), return 0 if not found any
		//if success, return a handle to control specified board
		//if set index=-1, mean takes default index no. (default is 0 
		//if user not specified by 'Ok Device Manager' in Control Pannel)
		//this index can be also a specified board type code
		//this function will change iIndex to the true used index, 
		//if index input is -1 or type code 

BOOL	WINAPI okCloseBoard(HANDLE hBoard); //okCloseBoard
		//Unlock and close Ok board specified handle

long	WINAPI okGetLastError();
		//Get last error msg

long	WINAPI okGetDriverVer(LPSTR lpString, int iSize);
		//get version of current ok cards driver
		//lpString return version char string (e.g "5.08"),  iSize is lpString' size


long	WINAPI okGetBufferSize(HANDLE hBoard, void **lpLinear, DWORD *dwSize);
		//get base address and size of pre-allocated buffer,
		//if success return the max. frame num in which can be store according to current set
		//else return false;
LPVOID  WINAPI okGetBufferAddr(HANDLE hBoard, long lNoFrame);
		//get base address of specified frame No. in BUFFER
		//if success return the linear base address 
		//else return false;

LPVOID  WINAPI okGetTargetInfo(HANDLE hBoard, TARGET tgt, long lNoFrame, short * wid, short * ht, long *stride);
		//get target info include base address, width, height and stride specified frame No. 
		//if success return the linear base address and other infos, else return false;

long	WINAPI okGetTypeCode(HANDLE hBoard, LPSTR lpBoardName);
		//return type code and name of specified handle 


//set rect and capture 
long	WINAPI okSetTargetRect(HANDLE hBoard, TARGET target, LPRECT lpTgtRect);
		//set target (VIDEO, SCREEN, BUFFER, FRAME)capture to or from
		//if Rect.right or .bottom) are -1 , they will be filled current value
		//special note for target=BUFFER:
		//if never set CAPTURE_BUFBLOCKSIZE, the block size(W,H) of buffer will be changed 
		//according to size of right x bottom of lpRect, else the size will not changed 
		//if success return max frames this target can support, else return <=0

BOOL	WINAPI okSetToWndRect(HANDLE hBoard, HWND hWnd);
		//set client rect of hwnd as screen rect


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -