📄 bt848.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 + -