📄 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -