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

📄 simpapi13.txt

📁 AVE1000S系列卡SDK&Driver
💻 TXT
📖 第 1 页 / 共 5 页
字号:
	
  SAPI BOOL DLLCALL sapiStopDetect2WithCompressRec(UINT CardID,UINT EncoderID);
	//该卡压缩流报警记录是否启动,返回值为真,则启动了,否则,没有启动。
  SAPI BOOL DLLCALL sapiIfDetect2Going(int CardID,int ChannelID);

	//to get USRDETECTINFO
	//获得用户输入参数,USRDETECTINFO见6-1。
  SAPI BOOL DLLCALL sapiGetDetect2UsrInfo(int CardID,int ChannelID,USRDETECTINFO * usrInfo);
	//if you know about compress record process,you can use the next function to detect ,just need you input the compress stream 
	//you can get the return value which can tell you if the input compress stream has motion object.
	//用户可自己用压缩流进行检测,返回值为真,则有移动目标,否则没有移动目标。
  SAPI BOOL DLLCALL sapiExDetect2(int CardID,int ChannelID,unsigned char *pCompressBuffer);

V11Update5: 新增4个函数:
1.  SAPI BOOL DLLCALL sapiGetHWObjPtr(int CardID,int HWObjID,void ** ObjPtr );
  获得硬件对象指针,直接操纵硬件,显示对象,实现基本SDK与SSAPI混合编程,以便高效,灵活,快速地实现应用程序。 
  适用于高级用户及直接使用S卡基本SDK编程的用户。对一般用户不推荐使用。
  CardID:卡号 0-15
  HWObjID:操纵对象标识,可取
           IOOBJ        (0):访问SurvIO(SurvIO.H) 基本IO对象 
           VIDEODEC1OBJ (1):访问VideoDec1(VidDec.h) 视频输入对象1  
           VIDEODEC2OBJ (2):访问VideoDec2(VidDec.h) 视频输入对象2
           VIDEOOBJ     (3):访问Video(Video.H)视频预览对象
           MPEGOBJ      (4):访问MpegEnc(MpgEnc.H)视频压缩对象
           MPEGAVOBJ    (5):访问MpegAVEnc(MpegAVEnc.H)复合MPEG1音视频对象
           CONFIGOBJ    (6):访问Configh(Config.H)S卡配置对象
           DISPLAY      (7):访问Display(Display.h)显示对象
 注意:应在应用程序开始时调用sapiDeviceInit,初始化除DISPLAY对象以外的所有对象;调用sapiDisplayCreate 初始化除DISPLAY对象;
 DISPLAY对象仅有一个,大家共享,CardID参数不用,可用0。
 其他硬件对象则与卡相关。退出应用程序时应调用sapiDeviceExit和sapiDisplayDestory。

 ObjPtr:如成功返回对象指针,失败指针为0。
 使用该函数时需要包括HWlib目录下的有关.H文件及库,参考MANUAL.TXT
 例启动0号卡视频捕获:
 设置视频源:
 CVideo * m_pVideo;
 sapiGetHWObjPtr(0,VIDEOOBJ,(void **)&m_pVideo);
 if (m_pVideo)
    m_pVideo->StartCapture();


2.  SAPI BOOL DLLCALL sapiGetIniFileEncoderParams(UINT CardID,unsigned int enc_id,ENCODERPARM * pEncoderParams);
  获得TVCARD.INI文件[ENCODER]节编码器参数。
  enc_id:ENCODER1或ENCODER2
  pEncoderParams:一个ENCODERPARM对象地址,返回时对象被更新。

3.  SAPI int DLLCALL sapiIsVideoSignalExist(UINT CardID,UINT VChannelID,int VInputChannel);
  判断视频输入信号是否中断,可用于检测视频输入信号的有无。
  CardID:卡号 0-15
  VChannelID:为0(MAIN_VCH)
  VInputChannel为0(自动检测),1-4对SS1,SD PRO,SQ PRO可取1,即视频输入通道1。
  返回:整型数0,1,2,4,8
  0:无信号
  1:视频输入通道1有信号;2:视频输入通道2有信号,4:视频输入通道3有信号...
  如VInputChannel为0,自动检测,且有多路信号,则可返回1,2,4,8的或值
  调用该函数将有200-800ms的延迟。

4.  SAPI BOOL DLLCALL sapiSetCompressFrameRate(UINT CardID,UINT EncoderID,unsigned int nOnFrame,unsigned int nOffFrame);
  支持SQ PRO卡的变帧速率MPEG压缩功能
  CardID:卡号 0-15
  EncoderID:为0(ENCODER1)
  nOnFrame:为0,1,2 连续保留帧数。
  nOffFrame:为0,1,2,3,4,5,6,7 连续丢弃帧数。
  帧速率=正常帧速率*(nOnFrame/(nOnFrame+nOffFrame))
  例nOnFrame=1,nOffFrame=1:帧速率=1/2 正常帧速率
  例nOnFrame=2,nOffFrame=1:帧速率=2/3 正常帧速率

******************************* V12 新增函数 ************************
使用请参考TT3V6.EXE源码,或Dephi源码!

一.新报警检测接口

结构:
压缩报警回调函数:
//state: 0 normal,no move object,1 it detectd that object is moving
state值反映移动报警检测状态,0:无移动目标(或回调报警检测被禁止,call apiDisableCallBackDetect);
>0:有移动目标.state的bit0-bit7为1时分别表示该区域(0,1,...7)检测到运动目标. 
typedef void  (__stdcall * VOIDENCODERCALLBACK2)(UINT CardID,UINT EncoderID,int state,BYTE * buf,int length,void * pUsrParam);
例: 
void __stdcall MpegEncoderCallBackFun(UINT CardID,UINT EncoderID,int state,BYTE * buf,int length,void * pUsrParam)
{
 CMainFrame * pMainWin=(CMainFrame *)pUsrParam;
 if (state!=0)
 {
   pMainWin->SetWindowText("报警");
 }
 else
   pMainWin->SetWindowText(" ");
}


1. SAPI 	int DLLCALL sapiStartOneCompressRecMVDetect(UINT CardID,UINT EncoderID,stEncoderParams * pParams,VOIDENCODERCALLBACK2 pEncodercallback);
    启动压缩(带回调报警检测)同sapiStartOneCompressRec类似,但使用压缩报警回调函数
    输入: CardID:卡号.
          EncoderID:卡上视频编码器号,为0(ENCODER1)或1(ENCODER2)(SD,SDA卡才有).
          pParams: 为结构指向stEncoderParams(见3-3)的指针(同sapiStartOneCompressRec)。
                   结构中pEncodercallback置0.                   
          pEncodercallback:压缩报警回调函数地址.不能为0.
   
2. SAPI    BOOL DLLCALL sapiEnableCallBackDetect(UINT CardID,UINT EncoderID);
    使能(回调)报警检测.
3. SAPI    BOOL DLLCALL sapiDisableCallBackDetect(UINT CardID,UINT EncoderID);
    禁止(回调)报警检测.
	//DataType:0 mpeg1 video stream data;1 mpeg1 system stream data
4. SAPI    int DLLCALL sapiMpgMoveDetect(UINT CardID,UINT EncoderID,int DataType, BYTE * buffer,UINT length);
    对压缩缓存进行移动报警检测.在使用回调报警检测后,不再需要调用该函数(SSAPI内部已用了该函数).
    仅在用sapiStartOneCompressRec,sapiStartOneCompressRec2启动压缩后,需进行移动报警检测时,才用该函数。
    buffer为需要检测的压缩缓存地址,length为缓存长度。
    输入: CardID:卡号.
          EncoderID:卡上视频编码器号,为0(ENCODER1)或1(ENCODER2)(SD,SDA卡才有).
          DataType:缓冲区压缩数据类型(0 mpeg1 video stream data;1 mpeg1 system stream data)目                   前保留没用置0。
          buffer:压缩缓冲区地址。
          length:为缓存长度。
    输出:整数bit0-bit7 对应8个区域是否有动目标,为0无,为1有。
    
5. SAPI    BOOL DLLCALL sapiMpgSetMoveDetectLevel(UINT CardID,UINT EncoderID,UINT level);
     
    设置报警检测门限,缺省为10较好。
    level:报警检测门限,范围1-100,越小越灵敏。
6. SAPI    BOOL DLLCALL sapiMpgSetMoveDetectInterval(UINT CardID,UINT EncoderID,UINT interval);
    设置报警检测间隔,缺省为1。通过设置报警检测间隔可在检测速度和CPU占用之间进行平衡。
    interval:范围>=0;为0则对每一帧都进行报警检测,为1则隔一帧检测一帧。
7. SAPI    BOOL DLLCALL sapiMpgSetMoveDetectArea(UINT CardID,UINT EncoderID,DetectAera * pDetectAera);
    设置报警检测区域,缺省为全区,该函数可将一帧压缩数据分为几个区域,只对这些区域进行报警检测。
    DetectAera 为总检测区域结构:最多可检测5个区域。
typedef struct {
 UINT TotalNum; 有效检测区域数。
 RECT Aera[5]; //max 5 aera 区域矩形。每个矩形大小对PAL视频为水平0-351,垂直0-287;对NTSC视频为水平0-351,垂直0-239;
               每个区域矩形不应重叠。
 int Level[5];//the detect level of every area 每个区域检测门限。
} DetectAera,* PDetectAera;
  要恢复全区检测,置TotalNum为0。

8. SAPI    BOOL DLLCALL sapiMpgMoveDetectReset(UINT CardID,UINT EncoderID);
    使用已设置好的参数重启报警检测。
    当使用了区域设置后用它重启报警检测。    

二.新位图捕获接口
结构: stBMP2
typedef struct
{
	int BmpID ;////[out] ID <=0 is error  位图捕获标识ID,唯一
	BITMAPFILEHEADER  FileHeader;//[out]  MS Windows 结构
	BITMAPINFO        BmpInfo;//[out]     MS Windows 结构
        DWORD  dwMask[3];//[out]              位图数据MASK
	BYTE * DataBuf;//[out]                捕获位图数据缓存 
	BYTE * TempDataBuf;//[out]            内部用
	int    Width;//[out]                  位图宽度
	int    Height; //[out]                位图高度  
	int    Pitch;//[out]                  内部用
	int    LineBytes;//[out]              内部用  
	int    TotalBytes;//[out]             位图数据总字节数  
	int    PixelBytes;                    字节数/象素
	BYTE * pSrc;//[out]                   内部用
	UINT   PixelFormat;//[out]            内部用
	void * pInter;                        内部用
}stBMP2;

1. SAPI    BOOL DLLCALL sapiPrepareMemBmpCap(UINT CardID,int ChannelID,UINT Width,UINT Height,BOOL IsSingle,stBMP2 * pstBmp);
    该函数用于准备从S卡上直接捕获位图(与显示无关)(内存位图).准备包括,内存分配,填充stBMP2结构,供其它函数使用.
    输入: CardID:卡号;ChannelID视频通道号:为MAIN_VCH    
          Width捕获位图宽度,Height捕获位图高度<=576(PAL);<=480(NTSC)
          IsSingle:是否为单帧捕获,是(TRUE)则使用sapiSingleMemBmpCap捕获.
                   否(FALSE)则使用sapiBmpCap捕获. 
          pstBmp:stBMP2 结构指针(地址),该结构不需要用户填充.
    输出: 填充后stBMP2结构指针,内部有内存分配.
    返回: 成功返回TRUE,失败返回FALSE

    注意:当系统连续物理内存不足时,调用该函数可能失败,报告"Alloc HW Cap buffer error"
    特别是程序运行过一段时间或是反复调用sapiPrepareMemBmpCap和sapiReleaseBmpCap时.
    你可在程序刚启动时调用sapiPrepareMemBmpCap分配内存,并保存pstBmp,而在程序退出时调用
    sapiReleaseBmpCap释放内存,而在运行期可直接调用sapiSingleMemBmpCap或sapiBmpCap捕获,
    调用sapiSaveBMPTOFile存盘.且此方法效率更高.
    对显示位图捕获(用sapiPrepareDispBmpCap准备)则无此问题.

2. SAPI    BOOL DLLCALL sapiPrepareDispBmpCap(int MRgnID,int SRgnID,stBMP2 * pstBmp);
    该函数用于准备从显示卡显存上捕获当前显示子区域位图.(显示位图).准备包括,内存分配,创建stBMP2结构,供其它函数使用.
    必须在该子区域(SRgnID)处于预览显示状态下进行。
    输入: MRgnID:主区域标识;SRgnID子区域标识。
          pstBmp:stBMP2 结构指针(地址),该结构不需要用户填充.
    输出: 填充后stBMP2结构指针,内部有内存分配.
    返回: 成功返回TRUE.
    
3. SAPI    BOOL DLLCALL sapiBmpCap(stBMP2 * pstBmp);
    捕获一帧或多帧内存或显示位图,每调用一次捕获一帧,注意因帧间隔为40ms,帧帧之间应有延时.
    若当前预览显示是开启的,且是调用sapiPrepareMemBmpCap准备,则调用该函数后预览显示会停止.
    该函数捕获位图易出现分裂现象,及重复现象不推荐使用。建议使用sapiSingleMemBmpCap函数捕获位图
    输入:准备好的pstBmp:stBMP2 结构指针(地址)(由sapiPrepareDispBmpCap或sapiPrepareMemBmpCap准备好)
    输出: pstBmp:stBMP2 结构指针(地址)
    返回: 成功返回TRUE.
    
4. SAPI    BOOL DLLCALL sapiSingleMemBmpCap(stBMP2 * pstBmp);
    捕获一帧或多帧内存位图,在预览显示开启或关闭时均可使用.每调用一次捕获一帧新位图,位图大小为
    Size<=352*288(PAL)或Size<=352*240(NTSC).建议使用sapiSingleMemBmpCap函数捕获位图
    调用该函数一次预览显示仅受少量影响,停止调用预览显示自动恢复.捕获速度约20F/S。
    输入:准备好的pstBmp:stBMP2 结构指针(地址)(由sapiPrepareMemBmpCap,参数IsSingle置TRUE准备好)
    输出: pstBmp:stBMP2 结构指针(地址)
    返回: 成功返回TRUE.
    注意:a.在sapiPrepareDispBmpCap之后,首次调用sapiSingleMemBmpCap时捕获的1-2帧BMP可能是无效的,
          以后就正常了,可将捕获的头1-2帧仍掉。
          b.当无视频信号输入时,掉用该函数,等待时间较长约300-500ms才返回,有信号时<50ms.
    
5. SAPI    BOOL DLLCALL sapiSaveBMPTOFile(char * filename,stBMP2 * pstBmp);
    将位图存盘
    输入:捕获后的pstBmp:stBMP2 结构指针(地址)(经过sapiBmpCap或sapiSingleMemBmpCap调用)
    返回: 成功返回TRUE.
6. SAPI    BOOL DLLCALL sapiReleaseBmpCap(stBMP2 * pstBmp);
    释放位图准备时分配的内存,结束捕获
    返回: 成功返回TRUE.

三.  AVE3000 (S3000)卡新函数(停止压缩,仍用sapiStopCompressRec)
结构:stEncoderParams2 该结构与S1000卡的stEncoderParams类似,参考stEncode

⌨️ 快捷键说明

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