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

📄 sa7134capture.h

📁 视频采集卡
💻 H
字号:
#ifndef VC404_CAPTURE_SAA7134
#define VC404_CAPTURE_SAA7134

#ifdef SAA7134CAPTURE_EXPORTS
#define SAA7134CAPTURE_API __declspec(dllexport)
#else
#define SAA7134CAPTURE_API __declspec(dllimport)
#endif

static const ULONG BrightnessDefault = 0x80;
static const ULONG ContrastDefault   = 0x44;
static const ULONG SaturationDefault = 0x40;
static const ULONG HueDefault        = 0x00;
static const ULONG SharpnessDefault  = 0x00;

#define MIN_VAMP_BRIGHTNESS_UNITS    0
#define MAX_VAMP_BRIGHTNESS_UNITS  255

#define MIN_VAMP_CONTRAST_UNITS   -128 
#define MAX_VAMP_CONTRAST_UNITS    127 

#define MIN_VAMP_HUE_UNITS        -128
#define MAX_VAMP_HUE_UNITS         127

#define MIN_VAMP_SATURATION_UNITS -128 
#define MAX_VAMP_SATURATION_UNITS  127

#define MIN_VAMP_SHARPNESS_UNITS    -8
#define MAX_VAMP_SHARPNESS_UNITS     7

//#define NEW_DATE_TIME				_T("NEW_DATE_TIME") 

typedef enum {		            //@enum Decoder control types
    BRIGHTNESS,                 //@emem control for brightness
    CONTRAST,                   //@emem control for contrast
    SATURATION,                 //@emem control for saturation
    HUE,                        //@emem control for hue
    SHARPNESS,                  //@emem control for sharpness
}COLORCONTROL;

typedef enum{               
    COLOR_DECODER = 0, //解码器(包括视频预览和视频捕获)
    COLOR_PREVIEW = 1, //视频预览          
    COLOR_CAPTURE = 2  //视频捕获   
}COLORDEVICETYPE;


typedef enum{
    VID_CAPTURE_EVENT   = 0,
	AUD_CAPTURE_EVENT1  = 1,
	AUD_CAPTURE_EVENT2  = 2,
	IO_ALERT_EVENT		= 3,
	MOTION_DETECT		= 4
}EVENTTYPE;


typedef enum
{
	RGB32	= 0x0,
	RGB24	= 0x1,
	RGB16	= 0x2,
	RGB15	= 0x3,
	YUY2	= 0x4,
	BTYUV	= 0x5,
	Y8		= 0x6,
	RGB8	= 0x7,
	PL422	= 0x8,
	PL411	= 0x9,
	YUV12	= 0xA,
	YUV9	= 0xB,
	RAW		= 0xE
}COLORFORMAT;

typedef enum
{
	CAP_NULL_STREAM		= 0,	//捕获无效
	CAP_ORIGIN_STREAM	= 1,	/*原始流回调*/
	CAP_MPEG4_STREAM	= 2		/*Mpeg4流*/
}CAPMODEL;


typedef enum
{
	MPEG4_AVIFILE_ONLY,			//存为MPEG文件
	MPEG4_CALLBACK_ONLY,		//MPEG数据回调
	MPEG4_AVIFILE_CALLBACK		//存为MPEG文件并回调
}MP4MODEL;

typedef enum  
{          //@enum Field frequency
    FIELD_FREQ_50HZ = 0,        //@emem source is 50 Hz (PAL)
    FIELD_FREQ_60HZ = 1,        //@emem source is 60 Hz (NTSC)
    FIELD_FREQ_0HZ  = 2         //@emem source is 0 Hz   (NO SIGNL)
}eFieldFrequency;

typedef enum {			        //电平等级
    HIGH_VOLTAGE = 0,			//高电平
    LOW_VOLTAGE = 1				//低电平
}eVOLTAGELEVEL;
/*
typedef enum{
	OSD_DATE  = 0,				//日期类型
	OSD_TIME  = 1,				//时间类型
	OSD_DATE_TIME  = 2			//日期类型 + 时间类型
}OSD_DATE_TIME_TYPE;
*/
typedef struct
{
//	BOOL		cfEnableOSD;    //是否允许叠加 FALSE—不允许 TRUE—允许 
//	OSDTYPE		cfType;			//叠加类型 0—文本类型 1—日期类型 2—时间类型
//	TCHAR		cfText[256];	//叠加文本
	LONG		cfHeight;		//字符高度
	LONG		cfWidth;		//字符宽度
	LONG		cfWeight;		//字符粗细
	LONG		cfSpacing;		//字符间距
	BOOL		cfItalic;		//斜体
	BOOL		cfUnderline;	//下划线
	BOOL		cfStrikeOut;	//删除线
	COLORREF	cfBkColor;		//背景色 
	COLORREF	cfTextColor;	//前景色
//	BOOL		cfTransparent;   //背景是否透明,当背景透明时,在字符边缘参杂有背景色的杂色,请将背景色设为背景相近的颜色,这样使杂色不明显
	TCHAR		cfFaceName[32];	//字体名
//	POINT		cfTopLeft;		//叠加文本左顶点位置(捕获窗口中)
}OSDPARAM;
/*1—日期类型 和 2—时间类型 比较特殊,为了提高视频捕获叠加的效率,每路视频捕获的日期类型和时间类型共用一下属性
 	LONG		cfHeight;		//字符高度
	LONG		cfWidth;		//字符宽度
	LONG		cfWeight;		//字符粗细
	LONG		cfSpacing;		//字符间距
	BOOL		cfItalic;		//斜体
	BOOL		cfUnderline;	//下划线
	BOOL		cfStrikeOut;	//删除线
	COLORREF	cfBkColor;		//背景色 
	COLORREF	cfTextColor;	//前景色
	TCHAR		cfFaceName[32];	//字体名
当叠加文本为"NEW_DATE_TIME", 时表示每路叠加重新设置日期类型和时间类型,这时每路视频捕获停止时或捕获暂停时调用有效
*/
//error define area

#define		ERR_SUCCESS					0			//no error,success
#define		ERR_NODEVICEFOUND			1			//no device found in system
#define		ERR_UNSUPPORTFUNC			2			//unsupport func tempro?
#define		ERR_ALLOCRESOURCE			3			//alloc resource error
#define		ERR_INITDIRECTDRAW			4			//Init Directdraw error
#define		ERR_INITDIRECTSOUND			5			//Init Directdraw error
#define		ERR_NOT_10MOONSDEV			6			//it is not device of 10Moons 

//动态检测回调
typedef void (CALLBACK *PrcCbMotionDetect)( DWORD dwCard, BOOL bMove, LPVOID lpContext );
//视频捕获原始数据回调
typedef void (CALLBACK *PrcVidCapCallBack)( DWORD dwCard, BYTE *pbuff, DWORD dwSize );
//视频MPEG压缩数据回调
typedef void (CALLBACK *PrcVidMpegCallBack)( DWORD dwCard, BYTE *pbuff, DWORD dwSize, BOOL isKeyFrm );
//视频捕获存盘出错回调
typedef void (CALLBACK *PrcVidSaveErrCallBack)( DWORD dwCard );
//视频捕获字幕叠加出错回调
typedef void (CALLBACK *PrcVidOSDErrCallBack)( DWORD dwCard, DWORD dwOSDNum );
//音频捕获原始数据回调
typedef void (CALLBACK *PrcAudCapCallBack)( DWORD dwCard, BYTE *pbuff,DWORD dwSize );
//音频MPEG压缩数据回调
typedef void (CALLBACK *PrcAudMpegCallBack)( DWORD dwCard, BYTE *pbuff,DWORD dwSize );
//音频捕获存盘出错回调
typedef void (CALLBACK *PrcAudSaveErrCallBack)( DWORD dwCard );
//IO报警回调
typedef void (CALLBACK *PrcIoAlertCallBack)( DWORD dwCard );
//注册视频捕获原始数据回调
BOOL  WINAPI VCARegVidCapCallBack( DWORD dwCard, PrcVidCapCallBack ppCall );
//注册视频MPEG压缩数据回调
BOOL  WINAPI VCARegVidMpegCallBack( DWORD dwCard, PrcVidMpegCallBack ppCall );
//注册视频捕获存盘出错回调
BOOL  WINAPI VCARegVidSaveErrCallBack( DWORD dwCard, PrcVidSaveErrCallBack ppCall );
//注册视频捕获字幕叠加出错回调
BOOL WINAPI VCARegVidOSDErrCallBack( DWORD dwCard, PrcVidOSDErrCallBack ppCall );
//注册音频捕获原始数据回调
BOOL  WINAPI VCARegAudCapCallBack( DWORD dwCard, PrcAudCapCallBack ppCall );
//注册音频MPEG压缩数据回调
BOOL  WINAPI VCARegAudMpegCallBack( DWORD dwCard, PrcAudMpegCallBack ppCall );
//注册音频频捕获存盘出错回调
BOOL  WINAPI VCARegAudSaveErrCallBack( DWORD dwCard, PrcAudSaveErrCallBack ppCall );
//注册IO报警回调
BOOL  WINAPI VCARegIoAlertCallBack( DWORD dwCard, PrcIoAlertCallBack ppCall );
//设置错误序号
void  WINAPI VCASetLastError( DWORD dwError );
//得到错误序号
DWORD WINAPI VCAGetLastError();
//初始化SDK
BOOL  WINAPI VCAInitSdk( HWND hWndMain, BOOL bInitVidDev = TRUE, BOOL bInitAudDev = TRUE );
//释放SDK资源
void  WINAPI VCAUnInitSdk();
//得到设备总数
LONG  WINAPI VCAGetDevNum();
//打开设备
BOOL  WINAPI VCAOpenDevice( DWORD dwCard,HWND hPreviewWnd );
//关闭设备
BOOL  WINAPI VCACloseDevice( DWORD dwCard );
//开始视频预览
BOOL  WINAPI VCAStartVideoPreview( DWORD dwCard );
//停止视频预览
BOOL  WINAPI VCAStopVideoPreview( DWORD dwCard );
//更新视频预览,比如已经改变了显示窗口的尺寸,想更新显示分辨率为当前窗口的大小,或改变了显示窗口时,调用。
BOOL  WINAPI VCAUpdateVideoPreview( DWORD dwCard, HWND hPreviewWnd );
//OVERLAY的逻辑区域到用户区域的映射,比如已经改变了显示窗口的尺寸或位置,但不想当前改变显示分辨率,时调用。
BOOL  WINAPI VCAResetMapRegion( RECT* stuSrcRect, RECT* stuDesRect );
//设置视频预览色彩
//BOOL  WINAPI VCASetVidDisplayColor( DWORD dwCard, COLORCONTROL enCtlType, DWORD dwValue );
//保存快照数据到相应的缓冲区
BOOL  WINAPI VCASaveBitsToBuf( DWORD dwCard, PVOID pDestBuf, DWORD& dwWidth, DWORD& dwHeight );
//保存快照为JPEG文件
BOOL  WINAPI VCASaveAsJpegFile( DWORD dwCard, LPCTSTR lpFileName,DWORD dwQuality = 100 );
//保存快照为BMP文件
BOOL  WINAPI VCASaveAsBmpFile( DWORD dwCard, LPCTSTR lpFileName );
//开始视频捕获
BOOL  WINAPI VCAStartVideoCapture( DWORD		dwCard,
								   CAPMODEL	    enCapMode,
								   MP4MODEL		enMp4Mode,
								   LPCTSTR		lpFileName );
//停止视频捕获
BOOL  WINAPI VCAStopVideoCapture( DWORD dwCard );
//设置视频捕获尺寸
BOOL  WINAPI VCASetVidCapSize( DWORD dwCard, DWORD dwWidth, DWORD dwHeight );
//得到视频捕获尺寸
BOOL  WINAPI VCAGetVidCapSize( DWORD dwCard, DWORD &dwWidth, DWORD &dwHeight );

/*设置视频捕获帧率,bFrameRateReduction参数表示是否允许显示帧率随捕获帧率的而减小。

	当bFrameRateReduction为FALSE时以下有效。
	PAL显示帧率显示帧率始终为25,NTSC显示帧率始终为30

	当bFrameRateReduction为TRUE时以下有效,这样有助缓解多路视频捕获时PCI总线的负荷量。
	PAL捕获帧率		PAL显示帧率				NTSC捕获帧率		NTSC显示帧率
	1				1						1					1
	2				2  + 1/2				2					2
	3				3  + 1/8				3					3
	4				4  + 1/6				4					4  + 2/7
	5				5						5					5
	6				6  + 1/4				6					6
	7				8  + 1/3				7					7  + 1/2
	8				8  + 1/3				8					10
	9				12 + 1/2				9					10
	10				12 + 1/2				10					10
	11				12 + 1/2				11					15
	12				12 + 1/2				12					15
	13				25						13					15
	14				25						14					15
	15				25						15					15
	16				25						16					30
	17				25						17					30
	18				25						18					30
	19				25						19					30
	20				25						20					30
	21				25						21					30
	22				25						22					30
	23				25						23					30
	24				25						24					30
	25				25						25					30
											26					30
											27					30
											28					30
											29					30
											30					30
*/	
BOOL  WINAPI VCASetVidCapFrameRate( DWORD dwCard, DWORD dwFrameRate, BOOL bFrameRateReduction = FALSE );
//设置MPEG压缩的位率,范围:56KBPS ~ 10MBPS
BOOL  WINAPI VCASetBitRate( DWORD dwCard, DWORD dwBitRate);
//设置MPEG压缩的关键帧间隔,必须大于等于帧率
BOOL  WINAPI VCASetKeyFrmInterval( DWORD dwCard, DWORD dwKeyFrmInterval);
//设置动态检测,视频捕获停止时调用有效
BOOL  WINAPI VCAEnableMotionDetect( DWORD			  dwCard,				   
								    BOOL			  bEnaDetect,		  //是否允许动态检测
								    BYTE			  *pAreaMap,          //运动检测地图
								    LONG			  nSizeOfMap,		  //pAreaMap尺寸,以BYTE为单位
								    LONG			  nPersistTime,       //物体持续nPersistTime秒不动则认为停止 1-30s
								    LPVOID			  lpContext,		  //监测上下文
								    PrcCbMotionDetect OnObjectMove );     //运动/停止回调函数
//设置视频捕获色彩
//BOOL  WINAPI VCASetVidCaptureColor( DWORD dwCard, COLORCONTROL enCtlType, DWORD dwValue );
//设置视频色彩
BOOL  WINAPI VCASetVidDeviceColor( DWORD dwCard, COLORCONTROL enCtlType, DWORD dwValue );
//得到视频源输入频率( 0HZ / 50HZ / 60HZ )对应( 无信号 / PAL制 / NTSC制 ), 参考枚举变量eFieldFrequency
BOOL  WINAPI VCAGetVidFieldFrq( DWORD dwCard, eFieldFrequency &eVidSourceFieldRate );
//开始音频捕获,如果音频捕获方式为MPEG4,视频捕获MPEG4方式开始时,调用有效
BOOL  WINAPI VCAStartAudioCapture( DWORD		dwCard, 
								   CAPMODEL	    enCapMode,
								   MP4MODEL	    enMp4Mode );
//允许音频从声卡输出,当dwCard >= 16 时,为静音;开始音频捕获时有效
BOOL  WINAPI VCASetAudioCardOutOn( DWORD dwCard );

//停止音频捕获,如果音频捕获方式为MPEG4,视频捕获MPEG4方式开始时,调用有效
BOOL  WINAPI VCAStopAudioCapture( DWORD dwCard );
//设置IO输入报警当前电平
BOOL  WINAPI VCASetIOAlertLevelIn( DWORD dwCard, eVOLTAGELEVEL enCurrentLevel );
//开始IO输入报警,enSpringLevel为触发电平
BOOL  WINAPI VCAStartIOAlertIn( DWORD dwCard, eVOLTAGELEVEL enSpringLevel );
//停止IO输入报警
BOOL  WINAPI VCAStopIOAlertIn( DWORD dwCard );
//IO输出报警
BOOL  WINAPI VCAIOAlertOut( DWORD dwCard, eVOLTAGELEVEL enLevel );
//暂停捕获,暂停视频捕获和音频捕获,可用于快速改变音视频捕获类型和文件切换,设置视频捕获字幕叠加
BOOL  WINAPI VCAPauseCapture( DWORD dwCard );
//设置视频捕获文本叠加,视频捕获停止时或捕获暂停时调用有效
BOOL  WINAPI VCASetVidCapTextOSD( DWORD dwCard, BOOL bEnableOSD, TCHAR*	tcText, POINT ptTopLeft, BOOL bTransparent, OSDPARAM* pOSDParm );
//设置视频捕获时间、日期叠加,在VCASetVidCapDateTimeOSDPARAM()函数设置后调用有效
BOOL  WINAPI VCASetVidCapDateTimeOSD( DWORD dwCard, BOOL bEnableOSD, POINT ptTopLeft, BOOL bTransparent);
//设置视频捕获字幕叠加,视频捕获停止时或捕获暂停时调用有效
BOOL  WINAPI VCASetVidCapDateTimeOSDParam( OSDPARAM* pOSDParm );
//初始化视频
BOOL  WINAPI VCAInitVidDev();
//初始化音频
BOOL  WINAPI VCAInitAudDev();
#endif

⌨️ 快捷键说明

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