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

📄 bt848.h

📁 嵌入式开发 嵌入式开发 嵌入式开发
💻 H
字号:
#ifndef __BT_878_H__
#define __BT_878_H__

#define UINT unsigned int
#define BYTE unsigned char
#define WORD unsigned int
#define DWORD unsigned long

#define  SUCCESS   1
#define  FAIL      0

#define START_CAPTURE 1
#define STOP_CAPTURE 0

#define SOURCE_NTSC	0
#define SOURCE_PAL	1

#define SOURCE_CHANNEL_1	0
#define SOURCE_CHANNEL_2	1
#define SOURCE_CHANNEL_3	2
#define SOURCE_CHANNEL_4	3	//s_video

//Qiao,2001.1.18
#define AD_SOURCE 0		//视频源
#define AD_FORMAT 1		//NTSC,PAL
#define AD_BRIGHTNESS 2		//亮度
#define AD_CONTRAST 3		//对比度
#define AD_HUE 4		//色度
#define AD_SATURATION_U 5		//U饱和度
#define AD_SATURATION_V 6		//V饱和度
#define AD_SATURATION 7			//饱和度:U+V
#define AD_HDELAY 8
#define AD_VDELAY 9
#define AD_FRAME_Or_FIELD 10	//采集方式:按帧采集,或按场采集

enum ColorMode
{
	RGB8,		//0
	RGB555,		//1
	RGB565,		//2
	RGB888,		//3
	RGB8888		//4
};

enum FrameOrField
{
	ByFrame,	//=0:按帧采集
	ByField	//=1:按场采集,(只采集偶场),
				//当按场采集时,只采集偶场,并且用户输入的图像高度为整帧的高度.
};
enum SampleTarget
{
	IMGtoVideoMem,	//0:采集图像到显卡
	IMGtoCPUMem		//1:采集图像到内存
};

typedef struct
{
	int left;
	int top;
	int right;
	int bottom;
}iRect;

//返回错误信息
void Get878ErrInfo(char* str);

//设置VESA为线性方式,
//x,y:屏幕分辨率,比如800*600,1024*768
//colordepth:屏幕颜色位数,8,15,16,24,32
//int InitBt878VesaLinear(int x,int y,int colordepth);

//初始化采集卡
//add:为采集卡保留的地址,比如0xD000,0xE000,
//RiscMemLen:采集卡使用的扩展内存,通常为40*1024L,即40K.如果要有复杂的mask,
//则应加大该值.最大为1M.
//为此,在config.sys中要有下面两句话:
//DEVICE=C:\dos\HIMEM.SYS
//DEVICE=C:\DOS\EMM386.EXE NOEMS x=D000-Dfff	=>Init878(0xd000,40L*1024L);
//如果D000段不能使用,则使用E000段:
//DEVICE=C:\DOS\EMM386.EXE NOEMS x=E000-Efff	=>Init878(0xe000,40L*1024L);
UINT Init878(UINT add,DWORD RiscMemLen);

//停止采集卡,释放采集卡占用的内存
void End878(void);

//设置采集卡的缺省参数
//void DefaultBt878Para(int n878);

//控制采集卡是否向屏幕采集活动图像
//nCommand:1:start capture to screen;	0:stop capture
void Bt878Capture(int nCommand,int n878);

//控制采集卡向内存采集活动图像
//nTotal:采集的帧数或场数,缺省是采集帧.采集方式可以用下面函数来设置:
//		Bt878SetADParam(AD_FRAME_Or_FIELD,ByField,n878);	//按场采集
//		Bt878SetADParam(AD_FRAME_Or_FIELD,ByFrame,n878);	//按frame采集
//lAdd:扩展内存的地址,该地址用LockXMSMem得到.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
void Bt878CaptureToMem(int nTotal,DWORD lAdd,int n878);

//设置采集参数.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
//nWho:要改变的参数,包括:AD_SOURCE,AD_FORMAT,AD_BRIGHTNESS,
//                      AD_CONTRAST,AD_HUE,AD_SATURATION,
//			AD_HDELAY,AD_VDELAY,AD_FRAME_Or_FIELD
//nValue:要改变的值,各个参数下的值的范围和缺省值:
//			参数			   范围				   缺省值
//			AD_SOURCE		SOURCE_CHANNEL_1		SOURCE_CHANNEL_1
//						SOURCE_CHANNEL_2
//						SOURCE_CHANNEL_3
//						SOURCE_CHANNEL_4(S Video)
//			AD_FORMAT		SOURCE_NTSC			SOURCE_PAL
//						SOURCE_PAL
//			AD_BRIGHTNESS		0~255				128
//			AD_CONTRAST		0~255				108
//			AD_HUE			0~255				128
//			AD_SATURATION		0~255				127
//			AD_HDELAY		-512~512			0	必须是偶数
//			AD_VDELAY		-512~512			0
//			AD_FRAME_Or_FIELD 	ByFrame,ByField			ByFrame
void Bt878SetADParam(int nWho,int nValue,int n878);


//得到采集参数.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
//nWho:要得到的参数,包括:AD_SOURCE,AD_FORMAT,AD_BRIGHTNESS,
//                      AD_CONTRAST,AD_HUE,AD_SATURATION,
//						AD_HDELAY,AD_VDELAY,AD_FRAME_Or_FIELD
int GetBt878ADParam(int nWho,int n878);

//设置视频输入窗口的大小,范围不能超过(0,0)~(768,576).
//缺省值是:nLeft=0,nTop=0,nWid=768,nHei=576.
//注意宽度是4的倍数,高是2的倍数
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
void Bt878SetInpVideoWindow(int nLeft,int nTop,int nWid,int nHei,int n878);

//设置采集到的图像大小和位置.
//注意:起点X坐标是4的倍数,起点Y坐标是2的倍数, 宽度是4的倍数,高是2的倍数.
//如果是向屏幕采集,则该窗口决定了图像显示的位置;
//如果是向内存采集,起点应该是(0,0).
//另外,显示窗口不能大于图像输入窗口,即不能超出函数Bt878SetInpVideoWindow设置的窗口.
//如果该窗口小于图像输入窗口,则采集得到的图像会比例压缩,
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
void Bt878SetDispWindow(int nLeft,int nTop,int nWid,int nHei,int n878);

//设置采集的图像颜色位数,
//bySpace:应该是:
//	RGB8,		8bit黑白
// 	RGB555,		15bit彩色
//	RGB565,		16bit彩色
//	RGB888,		24bit彩色
//	RGB8888		32bit彩色
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
void Bt878SetColorSpace(BYTE bySpace,int n878);

//设置Mask功能
//RectMask:要Mask的矩形区域,Wid*Hei;
//pMask:Mask的属性,对奇,偶场分别调用该函数.
//该缓冲区的大小:对单场: ((Wid+7)/8*8) * (Hei/2);
//缓冲区的每一位控制一个像素点.该位是1,有活动图像;是0,屏蔽活动图像.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
void SetMask(iRect* RectMask,BYTE* pMask,int n878);

//采集了多少帧或场图像
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
long GetFramesSampled(int n878);

//图像采集卡使用了多少内存.如果该值超过了在Init878中设置的值,
//则应该重新调用Init878,并设置足够大的内存.
//如果采集活动图像的时候不使用Mask,在函数Init878中给40K内存即可.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
long GetRiscMemNeed(int n878);


//检查是否接有视频源.
//return:	1,有视频源.
//			0,无视频源.
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
int IsVideoPresent(int n878);

//当前视频是奇场还是偶场
//return:	1,偶场
//			0,奇场
//n878:当前采集卡的编号,从0开始.如果只有一块卡,应该是0.
int OddOrEvenField(int n878);


///////////XMS_XMS_XMS///////////////////////
//使用扩展内存前,必须调用改函数
WORD   InitXMSMem(void);

//得到当前能够使用的扩展内存量,单位是K.
WORD   GetFreeXMSMem(void);

//分配扩展内存.
//kk:	单位是K
//return:	成功则返回扩展内存的句柄,否则返回0
WORD   AllocXMSMem(WORD kk);

//释放扩展内存,
//hxms:	扩展内存的句柄
WORD   FreeXMSMem(WORD hxms);

//锁定扩展内存,
//hxms:	扩展内存的句柄
//line:	锁定成功后返回的地址,改地址供采集卡向内存采集时使用.
WORD   LockXMSMem(WORD hxms,DWORD *line);

//解锁扩展内存
//hxms:	扩展内存的句柄
WORD   UnlockXMSMem(WORD hxms);

//扩展内存之间,或者扩展内存和常规内存之间的数据Copy函数.
//常规内存的句柄是0.
//hsource:	源的句柄,常规内存的句柄是0.
//souoff:	源的偏移量
//lmove:	copy的大小
//htarget:	目标句柄
//taroff:	目标偏移量
WORD   CopyXMSMem(WORD hsource,DWORD souoff,DWORD lmove,WORD htarget,DWORD taroff);
///////////XMS_XMS_XMS///////////////////////
#endif

⌨️ 快捷键说明

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