www.pudn.com > bk.1.rar > Sa7134Capture.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