我急要杭州海康卡DS-4004HC卡的动态联结库的C++语言译为Delphi的头文件(200分)

  • 主题发起人 主题发起人 rzqcjwrz
  • 开始时间 开始时间
R

rzqcjwrz

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家帮助我,我急要杭州海康卡DS-4004HC卡的动态联结库的C++语言译为Delphi的头文件.
电子邮件:rzqcjwrz@public.cta.cq.cn
 
自己定义下,很快的。函数不多嘛。我是自己定义的,可惜在家里的电脑上
 
帮顶!

╭=========================================╮

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!
╰=========================================╯
 
想:
因我对C不是很精通,请您帮助我一下,能否提供改好的头文件.
 
放上C的头文件和DLL,let me try
 
Writer:
谢谢!!!
 
想:
您好,已发到您邮箱.
 
请大家帮助我,我急要杭州海康卡DS-4004HC卡的动态联结库的C++语言译为Delphi的头文件.
电子邮件:rzqcjwrz@public.cta.cq.cn
 
发一份给我看看
 
sun_8113:
您的邮箱呢?
 
目录

1.板卡介绍篇...................................................................................................................................4
2.SDK版本更新说明篇....................................................................................................................5
3.SDK数据类型及数据结构定义篇..............................................................................................11
4.SDK使用的错误代号定义及说明篇..........................................................................................13
5.SDK函数篇.................................................................................................................................14
5.1 API函数调用顺序............................................................................................................14
5.2板卡初始化及卸载...........................................................................................................16
5001. 初始化DSP:InitDSPs()................................................................................16
5002. 卸载DSP:DeInitDSPs()................................................................................16
5.3通道打开及关闭...............................................................................................................16
5003. 打开通道:ChannelOpen()............................................................................16
5004. 关闭通道:ChannelClose()............................................................................16
5.4取得板卡相关信息...........................................................................................................17
5005. 获取总的通道个数:GetTotalChannels().....................................................17
5006. 获取系统内正确安装的通道个数:GetTotalDSPs()...................................17
5007. 获取系统中板卡的个数:GetBoardCount().................................................17
5008. 获取系统中DSP个数:GetDspCount().........................................................17
5009. 获取板卡的详细信息:GetBoardDetail().....................................................17
5010. 获取DSP的详细信息:GetDspDetail().........................................................18
5011. 获取系统中所有的编码通道个数:GetEncodeChannelCount()..................18
5012. 获取系统中所有的解码通道个数:GetDecodeChannelCount().................18
5013. 获取系统中所有显示通道(视频输出)个数:GetDisplayChannelCount()...19
5014. 获取板卡的型号和序列号:GetBoardInfo()................................................19
5015. 获取板卡的特殊功能信息:GetCapability()................................................19
5.5设置视频预览模式及启停视频预览...............................................................................20
5016. 设置视频预览模式:SetPreviewOverlayMode()..........................................20
5017. 启动视频图像预览:StartVideoPreview()....................................................20
5018. 停止视频图像预览:StopVideoPreview()....................................................20
5.6设置及获取视频参数.......................................................................................................21
5019. 设置视频参数:SetVideoPara()....................................................................21
5020. 获取视频参数:GetVideoPara()....................................................................21
5.7获取SDK信息...................................................................................................................21
5021. 获取SDK版本号:GetSDKVersion()............................................................21
5022. 获取SDK及DSP错误报告:GetLastErrorNum()..........................................21
5.8设置及获取编码流类型...................................................................................................22
5023. 设置主通道编码流类型:SetStreamType()..................................................22
5024. 获取主通道编码流类型:GetStreamType().................................................22
5025. 设置子通道编码流类型:SetSubStreamType ()..........................................22
5026. 获取子通道编码流类型:GetSubStreamType ()..........................................22
5.9启动及停止录像...............................................................................................................22
5027. 启动主通道数据截取:StartVideoCapture()................................................22
5028. 停止主通道数据截取:StopVideoCapture().................................................23
5029. 启动子通道数据截取:StartSubVideoCapture()..........................................23
5030. 停止子通道数据截取:StopSubVideoCapture()...........................................23
5.10编码数据流的读取.........................................................................................................23
5031. 注册数据流直接读取回调:RegisterStreamDirectReadCallback()..............23
5032. 设定读消息阀值:SetupNotifyThreshold()...................................................24
5033. 注册读取码流消息函数:RegisterMessageNotifyHandle().........................24
5034. 读取音视频数据流函数:ReadStreamData()...............................................24
5035. 另一个注册数据流读取函数:RegisterStreamReadCallback()...................24
5.11设置编码图像质量及编码帧结构、帧率.....................................................................25
5036. 设置图像质量:SetDefaultQuant()...............................................................25
5037. 设置编码帧结构、帧率:SetIBPMode()......................................................25
5.12设置编码的分辨率格式.................................................................................................26
5038. 设置主通道的编码分辨率格式:SetEncoderPictureFormat().....................26
5039. 设置子通道的编码分辨率格式:SetSubEncoderPictureFormat()...............26
5.13设置码流及码流控制模式.............................................................................................26
5040. 设置码流的最大比特率:SetupBitrateControl()..........................................26
5041. 设置码流控制模式:SetBitrateControlMode().............................................26
5.14设置Overlay关键色及恢复Overlay表面.......................................................................27
5042. 设置Overlay关键色:SetOverlayColorKey()................................................27
5043. 恢复Overlay表面:RestoreOverlay()............................................................27
5.15设置及获取视频信号制式、状况、视频信号输入位置调整.....................................27
5044. 设置视频标准:SetVideoStandard().............................................................27
5045. 设置默认的视频制式:SetDefaultVideoStandard()......................................27
5046. 设置视频信号的灵敏度:SetVideoDetectPrecision()..................................28
5047. 获取视频信号输入情况:GetVideoSignal().................................................28
5048. 调整视频信号输入位置:SetInputVideoPosition()......................................28
5.16设置OSD、LOGO及视频遮挡......................................................................................28
5049. 设置OSD显示模式:SetOsdDisplayMode().................................................28
5050. 设置OSD显示模式(扩展):SetOsdDisplayModeEx ().................................30
5051. 设置OSD显示与否:SetOsd().......................................................................30
5052. 设置OSD时间(用于网络校时):SetupDateTime().......................................31
5053. 将24位bmp 文件转成yuv格式的数据:LoadYUVFromBmpFile()..........31
5054. 设置LOGO图像位置及数据:SetLogo()......................................................31
5055. 设置LOGO显示模式:SetLogoDisplayMode()............................................32
5056. 停止LOGO显示:StopLogo().......................................................................32
5057. 设置屏幕遮挡:SetupMask()........................................................................32
5058. 停止屏幕遮挡:StopMask()..........................................................................32
5.17 Offscreen方式预览时的画图回调函数.........................................................................32
5059. 注册画图回调函数:RegisterDrawFun()......................................................32
5060. 停止画图回调函数:StopRegisterDrawFun()...............................................33
5.18移动侦测.........................................................................................................................33
5061. 设置移动侦测灵敏度:AdjustMotionDetectPrecision()...............................33
5062. 设置移动侦测区域及个数:SetupMotionDetection()..................................33
5063. 启动移动侦测:StartMotionDetection().......................................................34
5064. 移动侦测分析:MotionAnalyzer()................................................................34
5065. 停止移动侦测:StopMotionDetection()........................................................34
5066. 设置移动侦测(扩展):SetupMotionDetectionEx().......................................35
5.19设置现场音频监听及获取现场声音音量幅度.............................................................36
5067. 设置现场声音监听与否:SetAudioPreview()..............................................36
5068. 获取现场声音音量幅度:GetSoundLevel().................................................36
5.20启动及停止获取原始图像数据流.................................................................................36
5069. 注册获取原始图像数据流的回调函数:RegisterImageStreamCallback()..36
5070. 启动及停止获取原始图像数据流:SetImageStream()................................36
5.21抓图及图像保存函数.....................................................................................................37
5071. 获取原始图像:GetOriginalImage().............................................................37
5072. 图像保存:SaveYUVToBmpFile()................................................................37
5073. 抓取JPEG格式图像:GetJpegImage()..........................................................37
5.22 双编码............................................................................................................................38
5074. 主通道及子通道的切换:SetupSubChannel()..............................................38
5075. 获取双编码时的数据流类型:GetSubChannelStreamType()......................38
5.23获取帧统计信息.............................................................................................................39
5076. 获取帧统计信息:GetFramesStatistics()......................................................39
5.24强制设定I帧...................................................................................................................39
5077. 强制设定I帧:CaptureIFrame().....................................................................39
5.25设置反隔行变换及强度.................................................................................................39
5078. 设置反隔行变换与否及反隔行强度:SetDeInterlace()...............................39
5.26复位DSP.........................................................................................................................40
5079. 复位DSP:ResetDSP ()..................................................................................40
5.27 设置看门狗....................................................................................................................40
5080. 设置看门狗:SetWatchDog()........................................................................40
5.28 MD卡:设置视频输出通道的视频制式......................................................................40
5081. 设置视频输出通道的视频制式:SetDisplayStandard()...............................40
5.29 MD卡:设置、改变、填充、清空显示区域..............................................................40
5082. 设置显示通道的区域个数及参数:SetDisplayRegion().............................40
5083. 改变某个显示区域的位置:SetDisplayRegionPosition()............................41
5084. 用自定义的图像填充显示区域:FillDisplayRegion().................................41
5085. 清空显示区域:ClearDisplayRegion()..........................................................42
5.30 MD卡:设置编码通道的视频外部输出(矩阵输出)...............................................42
5086. 设置编码通道的视频外部输出(矩阵输出):SetEncoderVideoExtOutput()
42
5.31 MD卡:设置解码音视频输出......................................................................................43
5087. 设置解码通道的音频输出:SetDecoderAudioOutput()...............................43
5088. 设置解码通道的视频输出(MD卡内部输出):SetDecoderVideoOutput()..43
5089. 设置解码通道的视频外部输出(矩阵输出):SetDecoderVideoExtOutput()
44











1.板卡介绍篇

海康威视DS-40xxHC是面向数字监控行业而推出的专用板卡,采用了高性能的视频压
缩技术标准H.264及OggVorbis(相当于G.722)的音频编码标准,完全依靠硬件实现了视频及
音频的实时编码(CIF格式25帧PAL / 30帧NTSC)并精确同步,实现了动态码率、可控
帧率、帧模式选择、动态图像质量控制,音频预览、视频丢失报警、能独立调整各通道参数,
性能稳定而且可靠。与MPEG-I产品相比,在保持同等图像质量的前提下,能大大节省存储
空间、并非常适合宽带网或窄带网的传输,是新一代数字监控产品的最佳选择。

海康威视DS-40xxHC系列卡SDK分为三部分,分别为系统SDK、网络SDK、播放SDK,
本文档专门描述系统SDK,其他SDK请参照我公司相关文档。系统SDK是专门为该系列
一路及多路板卡设计的本地录像软件接口程序,以动态连接库的形式提供给应用软件开发
者,并同时附有演示程序(HikVision H.264 Demo Version)及其源码,能有效地缩短应用软
件的开发周期。

在使用过程中,特别提醒软件开发人员,DS-40xxHC系列压缩卡可以在编码的同时修
改除码流类型(复合流、纯视频流)外的所有参数,包括分辨率、码流、帧结构。譬如在压缩
过程中可改变帧率(SetIBPMode(…))、量化系数(SetDefaultQuant)、分辨率、码流、帧结
构而无须停止、启动压缩,还是一个文件记录。播放器会自动识别帧率、分辨率等参数,按
当前压缩帧率、分辨率播放且声音图像播放保持正常。

通过动态修改量化系数(I、B、P)可控制压缩码率,当码率太高时,加大量化系数;
当码率太低时,减少量化系数。当然,在量化系数满足的情况下,不必再降低量化系数。

DS-40xxHC系列压缩卡的运动检测独立于压缩,不进行压缩也可以进行运动检测。可
动态改变帧率非常有价值,在运动时按25F/S录像,在无运动时按低帧率录像,运动时按高
帧率录像,记录在同一个文件内,可大大节省硬盘空间。

DS-4004HC板卡支持4路的2CIF/CIF/QCIF实时编码压缩,也支持2路的4CIF实时编
码压缩。若需要作为4CIF编码录像,应用程序可以从DS-4004HC的4个编码通道中任意
选取两个通道设置为4CIF分辨率,然后对这两个通道进行录像,此时,此DS-4004HC卡
的另外两个通道的图像可以作为视频预览或者不予以显示;

DS-4008HC板卡支持8路的2CIF/CIF/QCIF实时编码压缩,也支持4路的4CIF实时编
码压缩。若需要作为4CIF编码录像,应用程序可以从DS-4008HC的8个编码通道(编码通
道为0,1,2,3,4,5,6,7,8)中的前面4个通道(0,1,2,3)任意选取两个通道设置为4CIF
分辨率,再从后面4个编码通道(4,5,6,7)中任意选取两个通道设置为4CIF分辨率,然后对这
选中的四个通道进行录像;

对于DS-4004HC和DS-4008板卡,通过子通道编码,可以把每一个通道全部设置为4CIF
分辨率(SetSubStreamType),这样每一个通道就都可以实现4CIF编码,然后通过函数
StartSubVideoCapture()实现每个通道的4CIF分辨率录像。在一般场景下,每路图像都可以
达到15帧以上。

DS4016HCS:16路视音频压缩卡。支持16路CIF音视频实时压缩,支持CIF/QCIF分
辨率,不支持4CIF、2CIF、DCIF分辨率,不支持双编码。








2.SDK版本更新说明篇

4.1版本(2005-10-15):

更新:

.. 支持全新推出的DS-40xxHC+ 卡
.. 编码性能优化,全面提升图像质量,特别是4CIF的图像质量有很大提高
.. DS-40xxMD卡增加文件索引功能,支持按照时间或帧号定位功能,并可以获取录像文
件的起止时间


修正bug:

.. DS-40xxMD卡无法解码某些子通道的录像文件
.. DS-40xxMD矩阵输出时可能会出现图像错误
.. DS-40xxMD卡回放小文件时,可能会误报文件结束
.. DS-40xxHC原始图像流的帧率控制无效(Ver:4.0)
.. 录像音频的音量偏小(Ver:3.0-4.0)




4.0版本(2005-07-25):

更新:

.. 支持新的板卡:DS4016HCS、DS4004MD


DS4016HCS:16路视音频压缩卡。支持16路CIF实时压缩,支持CIF/QCIF分辨率,
不支持4CIF、2CIF、DCIF分辨率,不支持双编码。新增加了WatchDog和报警输入、输出
功能;

DS4004MD: 8路解码、4路输出矩阵解码卡。产品功能和2块DS4002MD相同;

.. 视频预览帧率可调(PAL:1-25f/s,NTSC:1-30f/s);
.. 增加新的移动侦测接口SetupMotionDetectionEx(),提供了更灵活的功能,并且简化了用
户的工作量;对于移动侦测的操作应用程序仅需调用3个接口函
数:SetupMotionDetectionEx(),StartMotionDetection()和StopMotionDetection();


在应用程序以新的接口函数实现移动侦测功能时,SDK不再返回移动侦测帧,而仅仅
是通过函数SetupMotionDetectionEx()所调用的回调函数MotionDetectionCallback()的参数

bMotionDetected告知应用程序视频是否处于移动状态;

.. 增加新的OSD接口SetOsdDisplayModeEx(),最多支持8行OSD字符。同时,修改OSD
参数时无需重新启停;
.. 对SDK的发布文件做了简化,实现所有的功能只需ds40xxsdk.dll一个文件;
.. SDK内部增加了异常检测、恢复机制,增强系统稳定性,无需用户干预;
.. 在DS4016HCS上实现了WatchDog功能,接口函数为SetWatchDog(),只要打开任意一块
DS4016HCS的WatchDog功能,就可以实现对上层软件和系统中所有压缩板卡的运行状
态监控;
.. 在DS4016HCS上增加了报警输入、输出功能,当配合报警卡使用时,一块DS4016HCS
支持16路报警输入和4路报警输出,同时增加RS485串口,并提供了简单、实用的串
口操作API;
.. MD卡矩阵功能增强;
.. 增加新的接口函数GetJpegImage(),支持JPEG方式抓图,抓取的图像质量动态可调;




修正bug:

.. 抓图中存在的图像质量差的问题。(增加了反隔行变换);



.. OSD时钟不准确。OSD时钟始终以主机时钟为准,同时SetupDateTime()函数不再有效,
用户无须自行校时;
.. MD卡在频繁切换画面分割时可能产生执行失败的现象;




3.3版本(2005-04-08):

更新:

.. 编码效率进一步提高;
.. 优化不规则窗口预览丢帧的情况;


修正bug:

修正overlay预览的开发在vb、dephi下可能存在的bug ;



3.2版本更新说明

HC卡更新:

.. 编码质量进一步提高,在相同量化系数下,新版本SDK对大部分场景的压缩比比
旧版本提高10-20%,即在提供相同的图象质量情况下,新版本的码流比旧版本降
低10-20%;
.. 移动侦测采用全新算法,增加自适应选项(只要将AdjustMotionDetectPrecision函数
的将运动分析灵敏度等级参数iGrade和0x80000000做“或”操作,即采用自适应分
析),在光线不足的情况下移动检测的准确率大大提高;
.. 在部分显卡上实现overlay预览(函数SetPreviewOverlayMode()),提高了预览的画
质和降低系统的CPU使用率;
.. 反隔行算法优化,提高了预览图象质量;
.. 取原始数据流的效率提高,运行时CPU的使用率下降;
.. 码流控制算法优化;
.. 海外板卡(DS-40xxHCI)支持PCI_X主板;
.. 驱动程序进行了更新,跟旧版本SDK不兼容(3.2版本中的驱动程序和SDK不能与
旧版本中的驱动程序和SDK交叉使用);
.. 同一路视频编码信号支持2路矩阵输出;


MD卡更新:

.. 优化网络解码延时;
.. 完善PCI传输;
.. 增加水平1/3缩小,可实现9画面分割视频输出;


修正bug:

修正了HC卡OSD时间错误的bug;



3.1版本更新说明

.. H卡与HC卡混插时,H卡也可以在录像时动态更改分辨率;
.. 解码器性能优化,与3.0相比提高约50%;
.. 完善MD卡的解码功能,提高了图像显示和音频输出的质量。
.. 在MD卡中完善了对原4004D卡中已有功能的支持,绝大部分API和原4004D卡
兼容;
.. 完善LOGO配置,对SetLogoDisplayMode和SetLogo的使用,无需再考虑先后顺
序;
.. 完善图像处理,预览和回放的图像质量有所提高;



.. HC卡子通道可以在录像时动态更改分辨率;
.. 增加了设置反隔行变换参数的接口SetDeInterlace(),用户可以设置是否执行反隔行
变换,以及反隔行变换的强度,请参考相应的函数说明;


修正bug:

.. 解决了DS-4008HC卡启动顺序混乱的问题;
.. 同时启动主通道和子通道,如果包含4CIF分辨率,对该路图像的反隔行变换可能
会被忽略;
.. 原始图像流功能在长时间运行后会停止。


3.0 版本升级说明:

新增功能:

.. 增加DS4002MD(矩阵解码卡)支持,基于DS4002MD可以实现视频矩阵和硬件
解码功能(请参考“DS4002MD、数字视频矩阵方案”)。


优化系统调度、增强编码功能。子通道录像可以设置为复合流或视频流,录像的分辨率
可以任意设置,不再仅仅限于QCIF。可以组成更灵活的编码方案,例如:4路4CIF非
实时录像;主通道4CIF+子通道CIF录像等,请参考“双编码功能说明”。

.. 增加OSD字符大小调节功能,用户可自定义OSD字符大小,也可以设置为根据编码
分辨率自动调整 (SetOsdDisplayMode) 。
.. 增加了调节视频输入信号检测灵敏度功能。避免因视频输入信号的偶然变化,使“无
视频信号”提示频繁出现,影响图像 (SetVideoDetectPrecision) 。
.. 增加获取系统信息(板卡、DSP、编码通道、解码通道、矩阵输出通道……)接口,
用户可以获得更全面的板卡配置(参见“系统信息说明”)。


已解决的问题:

.. 完善多任务处理。
.. 在录像的同时修改帧结构等参数时会导致录像文件出现短时间花屏。
.. 当分辨率设为CIF或DCIF时,如果OSD设置为半透明,在OSD字符(特别是中
文字符)的右下部分会特别亮或特别暗(没有执行透明处理)。
.. 在进行4路2CIF或4路DCIF录像时,如果视频信号频繁发生变化(PAL..NTSC),
可能会导致某一路录像停止。


新增API:

.. GetBoardCount
.. GetDspCount
.. GetBoardDetail
.. GetDspDetail
.. GetEncodeChannelCount
.. GetDecodeChannelCount
.. SetSubStreamType
.. GetSubStreamType
.. SetDefaultVideoStandard
.. SetVideoDetectPrecision
.. SetOsdDisplayMode(扩展)


视频输出、矩阵控制相关API:

.. GetDisplayChannelCount
.. SetDisplayStandard
.. SetDisplayRegion
.. ClearDisplayRegion
.. SetDisplayRegionPosition
.. FillDisplayRegion
.. SetEncoderVideoExtOutput
.. SetDecoderAudioOutput
.. SetDecoderVideoOutput
.. SetDecoderVideoExtOutput



解码API:

详见原解码卡的SDK。需要注意的事项,请参考“DS4002MD简要说明”。

双编码功能说明:

对一路视频图像进行两路视频编码,两路视频可以有不同的码流类型、不同分辨率、不
同码率等。3.0版本对双编码功能做了增强,子通道的所有参数都可以任意设置。

双编码中主通道和子通道唯一的区别在于:子通道占用的系统资源比主通道少,优先级

比主通道低。当系统忙时,会尽量保证主通道编码,并先从子通道开始丢帧。由于占用资源
少,因此可以利用子通道来实现多路高分辨率的非实时编码。例如:可以把DS4004HC中
的4个子通道全部设置为4CIF分辨率(SetSubStreamType),而不使用主通道编码,这样就
可以实现4路4CIF编码。在一般场景下,每路图像都可以达到15帧以上。

2.1 版本改进部分:

.. 修正了2.0版本中做4CIF录像时,录像文件中存在色块的bug。
.. 修正2.0版本中无视频信号检测失败的bug。
.. 视频预览时,Overlay颜色的底色可以由用户自己自由设置,调用函数
SetOverlayColorKey()设置的Overlay颜色要与对应的预览窗口设置的颜色一样。


2.0版本改进部分:

.. 改进系统的调度和通讯,提高数据传输的效率,减少预览的丢帧,预览更加流畅。
.. 优化图像处理算法,编码和预览的图像质量有所提高。
.. 改进编码器,编码的效率大幅提高,同时改善了录像的质量。
在现有4004HC卡上可以做到两路4CIF实时编码,或者4路2CIF(PAL:704*288
NTSC:704*240)实时编码。


.. 增加了新的编码分辨率:Double CIF(ENC_DCIF_FORMAT)。
PAL:528*384,NTSC:528*320。

DCIF和CIF相比,在相同的码流下,图像质量和线数会有明显提高。


.. 系统的配置更加灵活,可以在编码的同时修改除码流类型(复合流、视频流)外的所
有参数,包括分辨率、码流、帧结构等。
在编码过程中,也可以检测到视频信号制式的改动,并自动切换对应的编码、预览
图像的大小。


.. 升级码流的格式,可以支持任意改变录像分辨率而不用切换文件(需要配合新的解码
库使用)。
.. 增加捕获原始图象流时可以设置帧率的功能。
.. 修正了旧版本的一些BUG。
.. 注意事项:
1.由于DCIF编码的计算量大,如果4路同时做DCIF编码,可能会有丢帧现
象。在后续版本中,会随着软件的不断优化而得到改善。

2.由于新的版本不再限制各个通道的分辨率,因此,用户所设置的功能可能会
超过了板卡所能达到的上限,此时会导致录像文件丢帧或者操作失败。例:


. 4个通道同时做Double CIF编码,或者做4路2CIF编码同时还启动了4
个子通道的双编码:此时,系统会根据图像的复杂性做出丢帧处理。
. 4个通道同时启动4CIF编码:由于编码4路4CIF图像所需要的资源不够,
导致启动失败,同时返回错误(ERR_NOT_SUPPORT)。
. 4个通道在做CIF编码的同时,动态的把分辨率改为4CIF:同样由于资
源不足,该通道的编码会自动停止,同时返回错误(ERR_KERNEL)。




1.8版本改进部分:


.. 改进了小画面预览算法,使预览图像在小窗口显示时,图像更加清晰;
.. 完善了板卡视频信号输入的判断,在板卡初始化时和长时间运行之后,对相应的视频
信号都给予相应的检测和判断;
.. 完善初始化,初始化失败的情况会减少
.. 改进了H卡的OSD显示,使H卡的OSD显示位置在(0,0,703,575)任意可调,与HC卡
的设置一致;


1.7版本改进部分:

.. 增加了捕获原始图像流的函数RegisterImageStreamCallback( )和SetImageStream( )
.. 增加了设置视频输入位置的函数SetInputVideoPosition( )
.. 增加了停止画图回调函数StopRegisterDrawFun( )
.. 增加了H卡设置屏蔽的功能
.. 当单画面预览窗口达到704*576大小时,则此窗口预览使用Overlay方式
.. 修正了一些BUG


1.6版本改进部分:

.. 改进视频信号丢失的检测机制
.. 改进了在CIF格式下设置OSD和LOGO位置与H卡对齐
.. 修正了SetOsd( )不能校时的BUG
.. 全面兼容即将推出的DS4008HC和DS4001HF卡


1.5版本改进部分:

.. 改进了预览时叠加LOGO位图的清晰度
.. 多窗口时创建与预览窗口同样大小的offscreen 缓冲区,用户可对预览窗口原始大
小的矩形框进行画线或显示图片等,操作更加直接方便(参看DEMO中DrawFun
函数)。
.. 调整了默认的视频图像参数
.. 增加了一个调节OSD时间的函数,可用于网络校时


修正了一些BUG;

1.0版本:

.. 在保持相同图像质量的前提下,与DS-400xM系列板卡相比,压缩码流降低30%
以上,在办公室典型环境中 码率只有 20kbps~120kbps。
.. 提供了非常精确的码率控制方式,无论在何种情况下均能输出指定的码率,并增加
了CBR控制方式。
.. 采用了新的视频采集处理芯片,极大地降低了由于摄像噪声导致的图像失真、背景
游动等现象,预览更清晰,可达450线。
.. 采用了OggVorbis(相当于G.722)的音频压缩算法,声音更加流畅。
.. 支持PCI 2.2接口,传输率更高,可以稳定的支持大路数(32路以上,最高可达
64路)的编码与录像。
.. 提供高分辨率4CIF(704*576)的视频压缩功能。
.. 新增加了一种直接取数据流的方式,读写数据流的效率提高,推荐客户使用。
.. 双码流更灵活,两路完全独立,可分别启动停止录像。
.. 新增了屏幕遮挡MASK函数,最大支持32个区域。
.. 对相对屏幕坐标(OSD、LOG、MASK、移动侦测等参数)的设置,现统一为相对
坐标704*576,而不管编码格式。
.. 改变了预览方式,多窗口时在显卡上创建offscreen表面再BLT到主窗口,只有在



单窗口全屏时自动采用OVERLAY方式。经测试,Nvidia Tnt/Tnt2、Geforce Mx
200/400/420/440 Fx5200/5600系列, ATI Radeon 7000/7200/7500/8500 /9000/9200
/9500/9600系列,MatroxG450/550系列,INTEL845G/865G系列支持新的预览方式。
注意显卡的驱动须支持硬件缩放功能,特别 Nvidia Fx系列显卡驱动最好使用新的
版本(53.00版本以后)。
.. 建议使用ATI系列显卡以提高显示效率,屏幕的大小设置为1024*768,颜色设为
16位。
.. SDK接口完全与DS-400xM/DS-400xH系列板卡一致,并增加了一些其他功能。已
开发的应用软件可以迅速完成移植。









































































3.SDK数据类型及数据结构定义篇

2.1视频预览输出格式:

vdfRGB16 16位RGB视频压缩格式

vdfRGB24 24位RGB视频压缩格式

vdfYUV422Planar YUV422视频压缩格式



2.2帧类型定义
PktError 非法帧数据




PktSysHeader 系统头

PktIFrames I帧包

PktPFrames P帧包

PktBBPFrames BBP帧包

PktAudioFrames 音频帧包

PktMotionDetection 动态监测包

PktSFrames 2.0版新增类型,为I帧捕获时传送的

帧类型

PktSubIFrames 双编码时,子通道I帧

PktSubPFrames 双编码时,子通道P帧

PktSubBBPFrames 双编码时,子通道BBP帧

PktSubSysHeader 双编码时,子通道系统头



2.3视频标准定义

StandardNone 无视频信号

StandardNTSC NTSC制式

StandardPAL PAL制式





1. 数据结构定义
3.1特殊功能能力定义

typedef struct tagChannelCapability{

UCHAR bAudioPreview; 音频预览

UCHAR bAlarmIO; 报警信号

UCHAR bWatchDog; 看家狗

}CHANNEL_CAPABILITY, *PCHANNEL_CAPABILITY;






3.2帧数据统计

typedef struct tagFramsStatistics{

ULONG VideoFrames; 视频帧

ULONG AudioFrames; 音频帧

ULONG FramesLost; 丢失帧

ULONG QueueOverflow; 缓存溢出

ULONG CurBps 当前码流(kb/s)


}FRAMES_STATISTICS, *PFRAMES_STATISTICS;



3. 3版本信息

typedef struct tagVersion{

ULONG DspVersion, DspBuildNum; DSP版本及BUILD号

ULONG DriverVersion, DriverBuildNum; 驱动版本及BUILD号

ULONG SDKVersion, SDKBuildNum; SDK版本及BUILD号

}VERSION_INFO, *PVERSION_INFO;



3.4运动检测数据说明

DS40xxHC现在提供运动强度信息来处理运动检测,设置移动侦测区域时以32*32像素
块为单位,按4CIF(704*576)分辨率计算,每行有22个块(704/32),PAL时18行(576/32),
NTSC时15行(480/32),与编码格式无关。经过测试,这种方法比H卡提高了灵敏度和可
靠性,并简化了返回的数据,返回的值是18个DWORD,对应屏幕高度576/32=18行(PAL),
每个DWORD的0-21位对应屏幕宽度704/32=22, 其中1为运动,0为静止,也可以调用原有
MotionAnalyzer()分析结果

4.0版本的SDK新增了接口函数SetupMotionDetectionEx(),提供了更灵活的功能,并
且简化了用户的工作量。



3.5 与DS400xH/DS400xHD卡兼容性

DS40xxHC卡与DS400xH系列卡SDK保持完全兼容,此版本SDK可以支持
DS40xxHC与DS400xH混插,初试化时HC卡在H卡之前,但不支持H卡单独使用。














































4.SDK使用的错误代号定义及说明篇

错误号

解释

ERR_WAIT_TIMEOUT

SDK操作超时;

ERR_INVALID_HANDLE

非法句柄,在调用SDK函数使用了错
误的句柄;

ERR_INVALID_ARGUMENT

参数错误,输入的参数可能超出有效范


ERR_DDRAW_CREATE_FAILED

DDRAW返回的错误,参见MSDN

ERR_DDRAW_CAPS_FAULT

DDRAW返回的错误,参见MSDN

ERR_SET_COOPERATIVELEVEL_FAILED

DDRAW返回的错误,参见MSDN

ERR_PRIMARY_SURFACE_CREATE_FAILED

DDRAW返回的错误,参见MSDN

ERR_GET_OVERLAY_ADDRESS_FAILED

DDRAW返回的错误,参见MSDN

ERR_OVERLAY_SURFACE_CREATE_FAILED

DDRAW返回的错误,参见MSDN

ERR_OVERLAY_UPDATE_FAILED

DDRAW返回的错误,参见MSDN

ERR_TMMAN_FAILURE

SDK内部错误

ERR_CHANNELMAGIC_MISMATCH

通道数据毁坏

ERR_QUEUE_OVERFLOW

数据流缓存溢出

ERR__STREAM_THREAD_FAILURE

无法启动流处理线程

ERR_THREAD_STOP_ERROR

流处理线程停止错误

ERR_NOT_SUPPORT

该功能尚不支持

ERR_OUTOF_MEMORY

系统内存不足

ERR_DSP_BUSY

DSP正忙

ERR_DATA_ERROR(v2.4)

严重数据错误,必须重新停启压缩!

ERR_KERNEL

系统核心错误

ERR_OFFSCREEN_CREATE_FAILED

创建OFFSCREEN缓冲区错误

ERR_INVALID_DEVICE

无效设备。




















5.SDK函数篇

5.1 API函数调用顺序

A.

设置默认的视频制式 SetDefaultVideoStandard()

B.

初始化板卡 InitDSPs()



C.

获取编码通道总个数 GetTotalChannels()

打开通道 ChannelOpen()

注册画图回调 RegisterDrawFun()

注册获取压缩编码数据流直接读取回调 RegisterStreamDirectReadCallback()

注册读取码流消息函数 RegisterMessageNotifyHandle()

注册获取原始图像数据流的回调函数 RegisterImageStreamCallback()

设置Overlay关键色 SetOverlayColorKey()

D.

设置视频预览模式 SetPreviewOverlayMode ()

启动视频图像预览 StartVideoPreview ()



E.

//设置OSD

设置OSD显示模式(此函数支持2行OSD显示) SetOsdDisplayMode()

设置OSD显示模式(此函数最多支持8行OSD显示) SetOsdDisplayModeEx ()

设置OSD显示 SetOsd()

//设置Logo

将24位bmp 文件转成yuv格式的数据 LoadYUVFromBmpFile()

设置LOGO显示模式 SetLogoDisplayMode()

设置LOGO图像位置及数据 SetLogo()

//设置遮挡

设置屏幕遮挡 SetupMask()



F.

设置主通道的编码分辨率格式: SetEncoderPictureFormat()

设置主通道编码流类型: SetStreamType()

设置编码图像质量: SetDefaultQuant()

设置编码帧结构、帧率: SetIBPMode()

设置码流的最大比特率: SetupBitrateControl()

设置码流控制模式: SetBitrateControlMode()

设置图像亮度、对比度、饱和度: SetVideoPara()




G.移动侦测方式1

设置移动侦测灵敏度: AdjustMotionDetectPrecision()

设置移动侦测区域及个数: SetupMotionDetection()

启动移动侦测: StartMotionDetection()

移动侦测分析: MotionAnalyzer()

G.移动侦测方式2

设置移动侦测: SetupMotionDetectionEx()

启动移动侦测: StartMotionDetection()



H.抓图及图像保存函数

获取原始图像: GetOriginalImage()

图像保存为BMP文件: SaveYUVToBmpFile()

抓取JPEG格式图像: GetJpegImage()



I.音频幅度获取及现场声音监听

获取现场声音音量幅度: GetSoundLevel()

设置现场声音监听: SetAudioPreview()



J.获取视频、SDK及板卡相关信息

获取视频信号输入情况: GetVideoSignal()

获取SDK版本号: GetSDKVersion()

获取视频参数: GetVideoPara()

获取板卡的型号和序列号: GetBoardInfo()

获取帧统计信息: GetFramesStatistics()

获取板卡的详细信息: GetBoardDetail()

获取DSP的详细信息: GetDspDetail()



K.启动录像(编码压缩数据)

启动主通道数据截取: StartVideoCapture()

L.启动原始图像数据流的截取

启动获取原始图像数据流: SetImageStream()



M.子通道的参数设置以及录像

设置子通道编码流类型: SetSubStreamType ()

设置子通道的编码分辨率格式: SetSubEncoderPictureFormat()

切换至子通道: SetupSubChannel(, 1)

//其它参数设置方式与主通道相同,可以设置与主通道不同的编码量化系数,帧率
等等

切换回主通道: SetupSubChannel(, 0)

启动子通道数据截取: StartSubVideoCapture()



N.退出

停止画图回调函数: StopRegisterDrawFun()


停止获取原始图像数据流: SetImageStream()

停止移动侦测: StopMotionDetection()

停止主通道数据截取: StopVideoCapture()

停止子通道数据截取: StopSubVideoCapture()

停止视频图像预览: StopVideoPreview()

关闭通道: ChannelClose()

卸载DSP: DeInitDSPs()



目前,SDK函数之中除了SetStreamType()和SetSubStreamType ()不能在板卡编码录像过
程中动态设置以外,其它视频参数,譬如OSD、Logo、分辨率、帧率、码流、图像量化系
数等参数都可以在编码录像的过程之中动态调整。





5.2板卡初始化及卸载

5001. DSPInitDSPs()


初始化

函数:int InitDSPs()

返回:系统内可使用的通道个数;

初始化每块板卡,应在应用软件启动时完成,如果返回值为0表明初始

可能是没找到相应的DSP软件模块


卸载DSP

5002.

函数:int DeInitDSPs()

说明:关闭每块板卡上功能,应在程序退出时调用;

道打及关闭


5003. 打开通道:ChannelOpen()

函数:HANDLE ChannelOpen(int ChannelNum);



:成功返回有效句柄(值有可能为0),


说明:打开通道,获取相关的操作句柄,与通道相关



5004.

关闭通道:ChannelClo


5.4取得板卡相关信息

5005. GetTotalChannels()


获取总的通道

函数:int GetTotalChannels()
返回:获取系统内可

P初始化败;


5006.

获取系统内正确安装的通道个数:GetTotalDSPs()
函数:int GetTotalD

返回:获取系统内正确安装的通道个数,如果返回小于系统中安装的通道数,表明有一
DSP初始化失败;

返回系统中所有的编码通道个数,若要获取


GetBoardCount().

5007.

获取系统中板卡的个数:GetBoa

:unsid int GetBoardCount()


返回:系统中板卡的个数

说明:得到系统中板卡的个数

5008. 获取系统中DSP个数:GetDspCount()


函数:unsigned int GetDspCount()

返回:系统中板卡DSP个数

说明:得到系统中DSP个数。

5009.

函数:int GetBoardDetail (UINTboardNum,DS_BO

参数: UINT boardNum

DS_BOARD_DETAIL *pBoardDetail

typedef struct

{

BOARD_TYPE_DS type; //板卡类型

BYTE sn[16]; //序列号

UINT dspCount; //板卡包含的DSP个数

UINT firstDspIndex; //板卡上第一个DSP在所有DSP

UINT encodeChannelCount; //板卡包含的编码通道个数
UINT

UINT decodeChannelC

UINT firstDecodeChan

UINT displayChannelC

UINT firstDisplayChan

中的索引

UINT reserved1;


UINT reserved3;

UINT erved4;


}DS_BOARD_DETAIL;

返回: 正确为0, 其他为第4节定义的错误号;

说明:得到某块板卡的详细信息。

5010.

函数:int GetDspDetail (UINT dspNum,DSP_DETAIL *pDspDetail)

参数: UINT dspNum DSP索引

DS_BOARD_DETAIL * pDspDetail 返回

typedef struct

{

UINT encodeChannelCount; //DSP包含的编码通道个数
UINT

UINT decodeChannelCount; //DSP包含

UINT firstDecodeChan

UINT displayChannelC

UINT firstDisplayCha

中的索引

UINT reserved1;

UINT reserved2;

UINT erved3;


UINT reserved4;

}DSP_DETAIL;

返回: 正确为0, 其他为第4节定义的错误号;

:得到个DSP的详细信息。


5011. 获取系统中所有的编码通道个数:

函数:unsigned int GetEncodeChannelCount

返回:系统中所有的编码通道个数
说明:返回系统中所有的编码通道个数。包括H卡和HC卡的所有编码通道。
5012. 获取系统中所有的解码通道个数:GetDecodeChannelCount()
函数:unsigned int GetDecodeChannelCount()
返回:系统中所有的解码通道个数
说明:返回系统中所有的解码通道个数。
注意:在原H卡、D卡SDK中,因为当时DSP和编、解码通道存在着一一对应的关系,
所以可以使用GetTotalDSPs()来取

卡、M统中,DSP个数不再和通道个数相等,使用GetT
在3.0版本的SDK中做了完


DSP个数(GetDspCount)、编码通道个数(G

(GetDecodeChannelCount)、显示通道个数(GetDisp

用新提供的API,不再使用原来的GetTotalDSPs,同时

返回系中所有的编码通道个数,其功能和GetEncodeChan



表DSP个数,需要特别注意。

5013. 获取系统中所有显示通道(视频输出)个数:

etDisplayChannelCount()

signed int GetDisplayChannelCount()
:系统中所有的显示(视频输出)通道个数
:返回系统中所有的显示(视频输出)通道个数

获取板卡的型号和序列号:GetBoardInfo()

函数:int GetBoardInfo(HAN

);

hChannelHandle,

G *BoardType,

R *SerialNo

值,次序为SerialNo[0] 对应最高

0, 其他为第4节定义的错误号

卡硬件信息;

板卡型号如下:

DS400xM 0,

DS400xH 1,

DS4004HC 2,

DS4008HC 3,

DS4016HC 4,

DS4001HF 5,

DS4004HF 6,

DS4002MD 7,

DS4004MD 8,

DS4002HT 10,


DS4004HT 11

DS4004HC+ 13

DS4008HC+ 14,

DS4016HC+ 15,

INVALID_BOARD_

注意:

5015. 获取板卡的特殊功能信息:GetCapab

int elHandle, CHANNEL_CAPity);


参数: HANDLE hChannelHandle,


CHANNEL_CAPABILITY *Capability

返回: 正确为0, 其他为第4节定义的错误号;
说明: 获取板卡的特殊功能信息;

设置视频预览模式及

5016. 设置视频预览模式:SetPreviewOverlayMode()

:int tPreviewOverlayMode(BOOL bTrue)


参数:bTrue 是否设置预览用Overlay 方式(MD卡兼容)
: 0表示支持Overlay方式,其余值不支持Overlay;

说明:3.2版本在部分显卡中实现了HCOverlay方式

以提高预览的画质和降低系统的CPU使用率。

ND应该是主窗口的句柄,rect是子窗口相对主窗口的坐标

统overlay方式默认是关闭的,在初始化之后调用,使用overlay

rawFun()不起作用。

试,ATI 7000/7200/8500/9000/9200/9600,ATI X300/X700 系列,INTEL

845G/865G系列,NVIDIA FX5200/5600, GeForce 66

的overlay 方式,其余不支持。FX5200/5600使用最新版本(6693)的显卡驱动才能支持
overlay。
5017. 启动视频图像预览:StartVideoPreview()
函数:int S

BOOLEAN bOverlay, int VideoFormat, int FrameRate);


参数: HANDLE hChannelHandle 通道句柄

HWND WndHandle, 窗口句柄

RECT *rect, 窗口内

BOOLEAN bOverlay

int FrameRate
返回: 正确为0, 其他为第4节

显示,显示卡的颜色必须为16位色或32


果显卡支持Overlay功能,则自动切换到Overlay方式,底色为RGB(10, 10, 10),否则
用原来的预览方式;

的颜色;

停止视频图像预览:StopVideoPreview()

int StopVideoPreview(HANDLE hChannelHandle)

HANDLE hChannelInfo 通道句柄

返回: 正确为0, 其他为第4节定义的错误号;

说明: 停止视频预览;


5.6设置及获取视频参数

5019. 设置视频参数:SetVideoPara()

nt SetVideoPara(HANDLE hChannelHandle, int Brightness, int Con

, int Hue)

HANDLE hChannelHandle, 通道句柄

int Brightness, 亮度值(0—2

int Contrast, 对比度(0—

int Hue
返回: 正确为0, 其他为第

5020. 获取视频参数:GetVideoPara()

:int GetVideoPara(HANDLEhChannelHanleVideoStandard_t *VideoStandard, int

*Brightness, int *Contrast, int *Saturation, int *Hue);
参数: HANDLE hChannelHandle, 窗口句柄

VideoStandard_t *VideoStandar

inBrightness, 亮度指针值(0—255)


int *Contrast, 对比度指针值(0—127)
int *Saturat

int *Hue 色调指针值(0

正确为0, 其他为第4节定义的错误号;

得到视频参数;视频类型为2.3节定义的标准;

SDK信息

5021. 获取SDK版本号:Ge

: PRSION_INFO VersionInfo 指向VERSI


返回: 由16位(BCD码)组成,高8位为主版本,低8位次版本号,

UILD号,用于软件升级时标明该版本的最后修改时间;

获取当前使用的SDK版本号;

. 获取SDK及DSP错误报告:etLastErrorNum()

t GetLastErrorNum(HANDLE hChannelHandle, ULONG *

Error);

参数: HANDLE hChannelHandle 通

ULONG *DspErro

ULONG *SdkError SDK错误(





说明: 获取SDK及DSP错误报告;



设置及获取编码流类型

5023. 设置主通道编码流类型:SetStreamType()

t SetStreamType(HANDLE hChannelHandle, USHORT

参数: HANDLE hChannelHandle,

USHORT Type

宏定义:


#define STREAM_TYPE_VIDEO 1 //视频流

#define STREAM_TYPE_AUDIO 2 //音频流

#define STREAM_TYPE_AVSYNC 3 //音视频同步流

返回: 正确为0, 其他为第4节定义的错误号;

说明: 设置编码流类型;



: HADLE hChannelHandle 通道句柄


USHORT *StreamType 指向

返回: 正确为0, 其他为第4节定义错号

说明: 获得流类型;

5025. 设置子通道编码流类型:SetSubStreamType ()
函数:int SetSubStreamType (HANDLE hChannelHandle, USHORT Type)

: HANDLE hChannelHandle, 通道句柄


USHORT Type 流类型

返回: 正确为0, 其他为第4节定义的错号

说明: 设置子通道流类型

5026.获取子通道编码流类型:GetSubStrea


函数: int GetSubStreamType(HANDLE hChannelHandle, US

参数: HANDLE hChannelHandle 通

USHORT *StreamType

返回: 确为0, 其他为第4节定义的

: 获得子通道流类型


启动及停止录像


函数: int StartVideoCapture(HA
参数: HANDLE hChannelHand

: 启动数据截取, 用户程序可以使用StreamDirectReadCallback回


流进行处理,也可以与H卡一样,等SDK向用户程序发送在
RegisterMessageNotifyHandle中注册的消息

oCapture()

函数:int StopVideoCapture(HANDLE hChannelHandle);

参数: HANDLE hChannelHandle 通道句柄
返回: 正确为0, 其他为第4节定义的错误号;

说明: 停止数据截取;

5029. 启动子通道数据截取:StartSubVideo

函数:int StartSubVideoCapture (HANDLE hChannelH

参数: HANDLE hChannelHandle 通道

返回: 正确为0, 其他为第4节定义的错误号;

说明: 启动某个通道的子通道的录像

:int StopSubVideoCapture (HANDLE hChannelHan


参数: HANDLE hChannelHandle 通道句柄

返回: 正确为0, 其他为第4节定义的错误号;

说明: 停止某个通道的子通道的录像

0编码数据流的读取

5031. 注册数据流直接读取回调:RegisterStreamDirectReadCallba

int RegisterStreamDirectReadCallback(STREAM_DIRECT

mDirectReadCallback, void* Context)

参数:STREAM_ DIRECT _READ_CALLBACK StreamDirectReadCallback
数据流准备好时会调用该函数
id * Context 调用回调函数时提供的上下文
说明:STREAM_DIRECT_READ_CALLBACK (ULONG channelNumber, void*

, DWORD Length, int FrameType, void* context)


ULONG channelNumber 通道号
* DataBuf

DWORD Length 缓冲区长度

FrameType 缓冲区帧类型

* context

DS40xxHC卡新增一种数据流读取方式,




5032. 设定读消息阀值:SetupNotifyThreshold()
函数:int SetupNotifyThreshold(HANDLE hChannelHandle, int iFramesThreshold)
参数:HANDLE hChannelHandle 通道句柄
int

返回:正确为0, 其他为第4节定义的错误号;
说明:用户设定读消息阀值,可以将缓冲区的数据在OnDataReady( )中一次性取走,
iFramesThreshold取值

5033. 注册读取码流消息函数:RegisterMessageNotifyHandle()


函数:int RegisterMessageNotifyHandle(HWND hWnd, UINT MessageIdHWND hWnd,

UINT MessageId 自定义的消息

说明: 当数据准备好时,SDK会向hWnd窗口发送MessageId 消息,目标窗口收到

Message后调用ReadStreamData读取一帧数

以先调用RegisterStreamDirectReadCallback( )函数来注册HC卡取码流

5034. 读取音视频数据流函数:ReadStreamData()

int *FrameType);


参数: HANDLE hChannelHandle, 通道句柄
void *DataB

DWORD *Length 输入:缓冲的大

输出:一帧数据的

Int *FrameType 帧类型

正确为0,返回1表示当前帧是I帧,其他为第4节定义的错

说明: 读指定长度的数据流,当调用StartVideoCapt

线程会向已注册的用户窗口消息处理函数发送指定的消息,并提供消息来源的通道号。
到该消息时,可调用本函数来读取数据,Length 在作为输入时必须提供缓冲
StreamData会判断缓冲是否足够,如果缓冲足够大,则

在HC卡中,如果已经先调用了RegisterStreamDirectReadCallback()函数,则不需调要
ReadStreamData来读取数据,因为音视频数据会在RegisterStreamDirectReadCallback所注册
的回调函




035. 另一个注册数据

函数:int RegisterStreamReadCallback(STREAM_READ_CALL

StreamReadCallback, void *Context)
:STRE




id * Context 调用回调函数时提

返回: 正确为0, 其他为第4节定义的错误号;

说明:另一种数据流读取方式,调用此函数时会提供通道号及Context指针;

. 设置图像质量:SetDefaultQuant()

参数: HANDLE hChannelHandle,

int PQuantVal, P帧量化系数


int BQuantVal B帧量化系数
返回: 正确为

说明: 设置图像量化系数,用于调整图像质量,系数越低质量越好

一般取值法为:取I帧和P帧一样大,B帧比它们大3到5,例如:15,15,20和18,18,



注:量化系数解释:量化系数是强烈影响MPEG标准中编码图像质量和码率的参数,

5037. 设置编码帧结构、帧率:SetIBPMode()

函数:int SetIBPMode(HANDLE hChandle, int Key

PFrames, int FrameRate);
参数:

int KeyFrameIntervals, 关

400
int BFrames, B帧数(默认值为2)
int PFrames,

返回: 正确为0, 其他为第4节定义的错
说明:设置帧结构、关键帧间隔、帧数目、

可在运行时设定;


注: 关键帧间隔解释:关键帧为编码码流中采用帧内压缩的图像帧,其特

清晰度好,但数据量大,通常作为帧间编码的原始参

的帧间编码的帧个数,因H264(MPEG4)编码是有损压缩,关键帧的个

响图像质量,因此关键帧的间隔需要合理设


设置编码的分辨率格式



5038. 设置主通道的

函数:int SetEncoderPictureFormat(HANDLE hChannelHandle, PictureForamt_t
PictureFormat)
参数:HANDLE hChannelHandle 通道句柄
PictureForamt_t PictureFormat 编码图象大小(4CIF、2CIF、
DCIF、CIF 、QCIF)

说明:设置主通道的编码格式,编码分辨率可以在录像的时候动态更改
像;

5039. 设置子通道的编码分辨率格式:SetSubE


函数:int SetSubEncoderPictureFormat(HANDLE hCha

PictureFormat)

参数: HANDLE hChannelHandle 通道

PictureFormat_t PictureFormat 编码图象大小(4CIF、2CIF、DCIF、CIF 、
QCI

: 正确为0, 其他为第4节定义的错误


说明: 此函数是设置双编

动态更改,而不必停止录像;此函数配合StartSubV

使用,可实现子通道的任意启动/停止录像,

5.13

:HANDLE hChannelHandle


ULONG Maxbps 最大比特率(10000以上)

返回: 正确为0, 其他为第4节定义的错误号;

说明:可用来设置最大比特率,Maxbps设为0时码率控制无效,

时,当编码码流将超过该值时,DSP会自动调整编码

流低于最大比特率时,DSP不进行干涉,调整误差为<10%。
5041. 设置码流控制模式:SetBitrateControlMode()

函数:int SetBitrateControlMode(HANDLE hChannelHandle, BitrateControl

:HANDLE hChannelHandle 通道


BitrateControlType_t brc 码率控制模

定码率,brVBR 变码率。

返回: 正确为0, 其他为第4节定义的错误号;

说明:配合SetupBitrateControl 函数使用,但设定


那么编码系统会按照设置的码率作为上限来控制码率,就是说码率只会在该上限

作,一般情况下码率会自动回落到最低的状态(由设定的图像质量和关键

能最大地降低带宽和存储空间。设定为brCBR时,则按照指定的码

设置Overlay关键色及恢复Overlay表面

5042. 设置Overlay关键色:SetOverlayCol

函数:int SetOverlayColorKey(COLORREF DestColorKey)
参数:COLORREF DestColorKey 设置的OVERLAY 关键色
返回:正确为0, 其他

:请在所有StartVideoPreview之前调用该函数,




5043. 恢复Overlay表面:RestoreOverlay()

数:int RestoreOverlay()

:正确为0, 其他为第4节定义的错误号;


明:当系统按下CTRL+ALT+DEL时系统的OVERLAY表面会被强制关闭

函数时可以恢复OVERLAY表面;

5设置及获取视频信号制式、状况、视频信号

5044. 设置视频标准:SetVideoStandard()
函数:int SetVideoStandard(HANDLE hChannelHandle, VideoStandard_t VideoStandard)

返回: 正确为0, 其他为第4节定义的错误号;

该函数,或者中途调换不同制式的摄像头也必须调用该函数;
如果需要获取某个通道的视频制式,请调用

5045. 设置默认的视频制式:SetDefaultVideoStandard()

数:int SetDefaultVideoStandard(VideoStandard_t VideoStandard)

参数:VideoStandard_t VideoStandard

:正确为0, 其他为第4节定义的错误号

所有的视频输出通道的制式,在系统启动时也会按照默认的制式处理。


注:该函数只能在系统初始化(InitDSPs)之前运行,否则无效。
5046.

设置视频信号的灵敏度:SetVideoDetectPrecision()
函数:int SetVideoDetectPrecision (HANDLE hChannel,unsigned int value)
参数:HANDLE h

int value 灵敏度
返回:正确为0, 其他为第4节定义的错误号;
说明:设置视频信号检测的灵敏度。Value范围:0-100。默认值为20。
如果视频信号的强度比较弱,或者信号通、断的切换比较频繁,为了避免“无视频信号”
的提示影响图像,可以更改视频信号检测的灵敏

出现的频率越



50

etVide

Sig

Chann

通道



5048. 调整视频信号输入位置:SetInputVideoPosition()
函数:int SetInputVideoPosition(HANDLE hChannelHandle,UINT x,UINT y)

数: HANDLE hChannelHandle 通道句柄

轴,缺省值为8

UINT y 坐标的Y轴,缺省值为2

返回: 正确为0, 其他为第4节定义的错误号;
说明: 设置视频输入位置,某些摄像头预览可能在左边出现黑边
(x,y)为系统所处理图像的左上角在摄像机输入的原始图像中的坐标。


(x,y)坐标的参数范围和摄像机的型

配,可能会导致图像静止或水平、垂直方向滚



5.16设置OSD、LOGO及视频遮挡

5049. 设置OSD显示模式:SetOsdDisp

函数:int SetOsdDilayMode(HANDL

int param, USHORT *Format1, USHO

参数:HANDLE hChannelHandle 通道句柄

int Brightness OSD显示亮度,255最亮,0最暗;
BOOL



Bit 0: 是否自动进行颜色翻转。


Bit 24-31: 水平放大倍数

在OSD字符中,ASCII字符的标准分辨率为

由于在编码之前需要对原始图像进行缩小才能产生编码所需的分辨率,此时就需要先把
OSD字符放大以后再叠加在4CIF的原始图像上,这样才能保证在缩

看清OSD字符。

如果不指定放大倍数(默认设置),则系统

何分辨率下都可以保证回放时能够看清OSD内容,但

中不固定。


为了避免上面的现象,用户可以指定OSD的大小。例如,如果应用程序想以

这时候可以将放大系数设为2、2,此时OSD的位置始终固定

不同的编码分辨率下,OSD字符的分辨率也不同,所以需要

IF录像,则OSD字符会变得模糊不清(因为QCIF要对图像进行1/4缩小,而对OSD

进行了2倍的放大)。具体配置详见下表:

平放大倍数 垂直放大倍数 适合的录像分辨率 说明

其它分辨率下会模

1 2 2CIF 小于2CIF时无法分辩

CIF、DCIF QCIF时无法分辩
4 4 QCIF 在其它分辨率下字符会很大
任意系数为0 自动设置(默认值)
其它无效值 按水平2、垂直2处理
:因为字符的位置会随着不同的

位置可能会超出图像的范围,此时这些字符将无

USHORT *Forma1, *Format2

USHORT X, USHORT Y, CHAR0, CHAR1, C

其中X,Y 该串在标准4CIF图象的起始位置,X

象高度内取值即(0-575)PAL 、(0-479)NTSC;

是ASCII码也可以是字,当想要显示当前时间时

如下:

_OSD_YEAR4 四位的年显示,如2004

_OSD_YEAR2 两位的年显示,如

_OSD_MONTH3 英文的月显示,

_OSD_MONTH2 两位阿拉伯数字的月显示,如07

_

D_WEEK3 英文的星期显示,如Tue

_D_CWEEK1 中文的星期显示,如星期二
_OSD_HOUR24 24

SD_

_

ECOND 两位秒的显示


式字符串的最后必须以NULL(0)结尾,否则会显示错误的

字符串和时间显示可以在FORMAT1 也可以在FORAMT2,也可

图象的宽度。




要显示位置在16,19的字符串“办公室”的格式字符串如下:
USHORT Forma



HORT rmat[]={8, 3, _OSD_YEAR4, ‘年’,_OSD_MON


‘日

只想显示其中一行,则将起始的字符串定义如下:

USHORT FormatNoDisplay[]={0, 0, ‘/0’};

返回: 正确为0, 其他为第4节定义的错误号;

5050. 设置OSD显示模式(扩展):SetOsdDisplayModeEx ()

数:int SetOsdDisplayModeEx (HANDLE hChannelHandle, int Brightness,

数:HANDLE hChannelHandle 通道

int Brightness OSD显示亮度,255最亮


BOOL Translucent OSD图象是否做半透明处理;
int

Bit 16-23

Bit 24-31: 水平放大倍数

int nLineCount OSD显示的行

USHORT **Format 多行OSD字符串显示

加的位置和次序的格式串, 其中每一行的第一元素X和第二元素Y 是

IF图象的起始位置,X必须是16的倍数,Y可以在图象高度内取值即(0-575)PAL 、
(0-479)NTSC;可以是AS

固定的时间定义值,其值如下:

_

EAR2 两位的年显示,如02


D_MONTH3 英文的月显示,如 Jan

_D_MONTH2 两位阿拉伯数字的月显示,如07

两位的阿拉伯数字的日显示,如31

K3 英文的星期显示,如Tue

EK1 中文的星期显示,如星期二

TE 两位分钟的显示

ND 两位秒的显示

式字符串的每一行最后一个元素必须以NULL(0)


返回: 正确为0, 其他为第4节定义的错误号;

明:



5051. 设置OSD


函数:int SetOsd(HANDLE hChannelHandle, BOOL Enable);

参 HANDLE hChannelHandle, 通道句柄

BOOL Enable 使能

返: 正确为0, 其他为第4节定义的错误号;

说: 设置OSD显示,在当前的系统时间年月日星期时分秒叠加在预览视频之上,

并可作透明处理;



5052.

设置OSD时间(用于网络校时):

:int SetupDateTime(HANDLE hCha


参数: HANDLE hChannelHandle 通

SYSTEMTIME * now 需要设置的时间

本地校时。

返回:正确为0, 其他为第

:设置OSD中的时间,可用于网络


校时的功能被屏蔽。

此接口函数自v4.0版本SDK开始,不再有效.

2件

将4位bmp 文转y格的数据:Loa

函数:int LoadYUVFromBmpFile(char *FileNam

*Width, int *Height);
参数:char *FileName 文件名


int BufLen


int *Width

int *Height 返回y

说明:把24位bmp 文件转成yuv格式的数据,

最大支持128*128像素;



:int SetLogo(HANDLE hChannelHandle, int x


参数:HANDLE hChannelHandle, 通道句柄

int x, 左上角位置x(0-70

int y, 左上角位置y(0-575

int w, 宽度(0-128) (注

Logo图像的宽

int h, 高度(0-128)

unsigned char *yuv

返回: 正确为0, 其他为第4节定义的错误号;

说明: 设置OSD屏幕图像位置及数据;用户程序可调用LoadYUVFromBmpFile从取


bmp文件中获取YUV数据(见4.32),透明处理由



5055. 设置LOGO显示模式:SetLogoDisplay

函数:int SetLogoDisplayMode(HANDLE hChannelH

slucent, int Twinkle)
参数:HANDLE hChannelHandle 通道


BOOL

表示为


示的秒数,YY为停止显示的秒


回:正确为0, 其他为第4节定义的错误号;

LO显模式。

5056. 停止LOGO显示:StopLogo()

t StopLogo(HANDLE hChanendle);

数: HANDLE hChannelHandle 通道句柄

回: 正确为0, 其他为第4节定义的错误号;

明: 停止OSD显示;

5057. 设置屏幕遮挡:SetupMask()
函数:int SetupMask(HANDLE hChannelHandle, RECT *r

数: HANDLE hChannelHandle 通道句柄
RECT

int iAreas, 矩形框个数


返回: 正确为0, 其他为第4节定义的错误号;
DS40xxHC提供的启动屏幕遮

视频信号:(0,0,703,575),NTSC视频信号(0,0,703,479),矩形框的

5058. 停止屏幕遮挡:StopMask()

函数:int StopMask(HANDLE hChannelHandle)

参数: HANDLE hChannelHandle 通道句柄
返回: 正确为0, 其他为第4节定义的错误号;
说明: DS40xxHC提供的停止屏幕遮挡函数。

7 Offscreen方式预览时的画图回调函

5059. 注册画图回调函数:RegisterDrawFun()


函数:int RegisterDrawFun(DWORD nport,DRAWFUN(DrawFun),LONG nUser)
参数: DWORD nport 通道号索引
DRAWFUN(DrawFun) 回调函数句柄


函数说明: void CALLBACK DrawFun


nPort 通道号
OffScreen

nUser 用户数据

回: 正确为0 其他为第4节定义的错误号;

明:DS40xxHC提供的一个回调函数,获得当前Offscreen表面的device c

C采用了创建Offscreen的方式,所以在窗口客户区中的DC无法画图或写字,

DC
Overlay表面画图即可,不需要调用此函数。
terD

数:int StopRegisterDrawFun(DWORD nport)

数:DWORD nport 通道索引
返回: 正确为0, 其他为第4节定义的错误号;
说明:停止画图回调函数,因为在某些显卡上进行画图回调,会使得CPU的利用率变
高,所以可以在适当的时候(画图回调结束)停止调用。
5.18移动

5061. 设置移动侦测灵敏度:AdjustMotionDetectPrecis

函数:int AdjustMotio

iF

数:HANDLE hChannelHandle 通道句柄


int iGrade 运动分析灵敏度等级

int iFastMonDetectFps

0表示

int iSlowMotonDetectFps 低速运

, 其他为第4

与MotionAnalyzer

运动统计结果,等级0最灵敏,6最迟钝;荐值为2;

将运动分析灵敏度等参iGdex80000000做“或”操作,会对移动侦

分析;
ionDetection()

int SetupMotionDetection(HANDLE hChannelHandle, RECT *rectList, int


通道句柄
矩形框数组

int numberOfAreas, 矩形框个数(最大个数为100)

正确为0, 其他为第4节定义的错误号;

设置运动检测区域,当收到运动信息的数据帧(PktMotionDetection)时

nalyzer, MotionAnalyzer会根据在SetupMotionDetection中的设置来分析每个需

,当某域的阀值(MotionAnalyzer的iThreshold)到达

otionAnalyzer的

ion()

:StartMotionDetect

函数:int S

参数: HANDLE hChannelHandle

返回: 正确为0, 其他为第4节定义的错误号;
说明: 启动运动检测,运动检测信息会通过数据流传送,用户程序发现是
PktMotionDetection帧类型时,可调用MotionAnalyzer来处理运动信息,结果由

MonAnalyzer在iResul返回。也可以按照

格式参见3.4。注意:

测。
5064. 移动侦测分析:MotionAnalyzer()

函数:int MotionAnalyzer(HANDLE hChannelHandle, char *MotionData, int iThreshold,
int *iResult);
参数:HANDLE hChannelHandle 通道句柄
char *MotionData 运动矢量指针
int iThreshold 判断运动的一个区域阀值(0-100)
|int *iResult 按照区域阀值指定的强度分析后的结果,是一
个数组,大小在SetupMotionD

numberOfAreas指定

大于零则表明

返回: 正确为0, 其他为第4节定义的错误号;

说明:动态监测分析,运

DSP提供的运动强度,不再使用运动矢量,其灵敏度及可靠性有大幅提高,
用由码流

5065. 停止移动侦测:StopMotionDetection()

函数:int StopMotionDetection(HANDLE hChannelHandle);

HANDLE hChannelHandle 通道句柄

返回: 正确为0, 其他为第4节定义的错误号;

说明: 停止运动检测;


5066. 设置移动侦测(扩展):SetupMotionDetectionEx()

函数:int SetupMotionDetectionEx(H

int iGrade,
int

UINT delay,
RECT *RectList

int reserved);


参数: HANDLE hChannelHandle 通道句柄

int iGrade 运动分

int iFastMotionDetectFps, 高速运动检测的帧间隔,取值范围

通常

int iSlowMotionDetectFps 低速运动检测,适合于慢速运动情

况,通常取值范围13以上

UINT delay 上一次产生


RECT *RectList 需要进行移动侦测的矩形框数组,
int iAreas

MOTION_DETECTION_CALLAC otionDetect

int reserved 保留参数

回调函数说明

MotionDetectionCallback (ULONG channelNumber,

Void *context)
参数:

ULONG channelNumber 通道号;

BOOL bMotionDetected 移动侦测标志,若当前

侦测,则bMotionDetected 被标志为True,若当前通道检测到当前设置区域自上一次产

void *context 设备上下文

iGrade 运动分析灵敏度等级(0-6),


SP全局运动分析的灵敏度,等级0最灵敏,6最迟钝;推荐值为2; 将运动分析灵敏
iGrade

NT delay 画面静止之后的延时时间,单位为秒,

,则将回调函数MotionDetectionCallback之中的参数bMot

延时时间之内,在当前所设置的区域内产生移动侦测,则bMotionDetected被标志为
SP不会对在此时间段之内的视频帧进行


至超过了此delay秒延时时间,DSP才会对此时刻的

回调函数中的bMotionDetected被再次标志为True,否则标志为False。
RECT *RectList, 需要进行移动侦测的矩形区域,
int iAreas

回: 正确为0, 其他为第4节定义的错误号;
设置运动

9设置现场音频监听及获取现场声音音量幅

5067. 设置现场声音监听与否:SetAudioPreview()
函数:int SetAudioPreview(HANDLE hChannelHandle, BOO

BOOL bEnable


回: 正确为0, 其他为第4节定义的错误号;
设置音频预览,打开或

5068. 获取现场声音音量幅度:GetSoundLevel()

函数:int GetSoundLevel(HANDLE hC

参数:HANDLE hChannelHandle 通道句柄

返回:当前通道的现场声音幅度;

明:获取当前通道的现场声音幅

5.20启动及停止获取原始图像数据流

5069. 注册获取原始图像数据流的回调函数:RegisterImageStrea

int RegisterImageStreamCallbk(IMAGE_STREAM_CALLBACK,void *context)

参数:IMAGE_STREAM_CALLBACK 回调函

回调函数说明 (*IMAGE_STREAM_CALLBACK)(UINT channelNumber ,void *context)
UINT channelNumber 通道号
void *context 调用回调函数时提供的上下文
返回: 正确为0, 其他为第4节定义的错误号;

说明:注册用户

格式的预览数据。
5070. 启动及停止获取原始图像数据流:SetImageStream()

函数:int SetImageStream(HANDLE hChannelHandle,BOOL bStart,UINT fps,UINT


width,UINT height,unsigned char *imageBuffer)
参数:HANDLE hChannelHandle 通道句柄
BOOL bStart TRUE/启动捕获,FALSE/停止

UINT width 图象的宽度(必须


1/4,1/2或原始大小704)

UINT height 图象的高

1/1/2或原始大小PAL:57NC480)

Char *im

返回: 正确为0, 其他为第4节定

说明:用户通过这个函数启动或停止

1抓图及图像保存函数

5071. 获取原始图像:GetOriginalImage()

*Size);
参数:HANDLE hChannelH

ULONG *Size 原始


的大小,调后是实际图像所使用的字

返回:正确为0, 其他为第4节定义的错误号;

得原始图像,DS40xxHC原始图像是标准的CIF图像格式(包括QCIF编

用SaveYUVToBmpFile来生成24

C图象格式。

Height);
参数:char *FileName

int Width


int Height YUV

返回: 正确为0, 其他为第4节定义的错误号;

说明:把yuv 图像转成bmp文件,如果是DS40xxHC

为576(PAL)或480(NTSC),如果是DS400xH卡抓图则Width可能为352或176,Heig



函数:int GetJpegImage(HANDLE hChannelHandle,UCHAR *Image


参数:HANDLE hChannelHandle 通道句柄

UCHAR * ImageBuf 图像指针

*Size 图像的大小(注

实际图像所使用的字节数)
UINT nQuality JPEG

返回: 正确为0, 其他为第4节定义的错误号;

说明:抓取JPEG格式图像;



5.22 双编码
5074. 主通道及子通道的切换:SetupSubChannel()

函数int SetupSubC
参数:HANDLE

: 正0, 其他为第4节定义


说明:配合双编码模式使用。当设置

通道编码QCIF,这时可对主/

参数对主/子通道是一样的;在设置帧率、量化系数

参数时应调用此函数分别对主/子通道进行设置,缺省是对主通道进行设置
码功能说明:



双编码中主通道和子通
比主通道会尽量保证主通道编码,

通道全部设置为4CIF分辨率(Set


实现全部通道的4CIF编码。在一般场景下,每路图像都可

5075. 获取双编码时的数据流类型:GetSubCh

函数:int GetSubChannelStreamType(void *DataBuf, int FrameType)
参数:void *DataBuf 输入数据缓存区
int FrameType 输入帧类型

1 主通道数据流的文件头

3 主通道数据流的视频帧类型


4 子通道数据流的视频帧类型

5 数据流的音频帧

说明:配合双编码模式使用,当设置双编码模式时,启动录像后,

数据流,调用此函数得到主通道和子通道的数据流类


获取帧统计信息

:int GetFramesStatistics(HANDLE hChannelHandle, PFR


framesStatistics);
参数: HANDLE hChannelHandle,

PFRAMES_STATISTICS framesStatistics 帧统计信息(见

PFRAMES_STATISTICS 结构:

正确为0, 其他为第4节定义的错误号;

说明: 获取帧统计信息;

4强制设定I帧

5077. 强制设定I帧:CaptureIFram

函数:int CaptureIFrame(HANDLE hChannelHan

参数:HANDLE hCh

返回:正确为0, 其他为第4节定的错误号;

说明:将目前编码帧强制设定为I帧模式,可从码流

5设置

5078. 设置反隔行变换与否及反隔行强度:SetDeInterlace()
函数:int SetDeInterlace(HANDLE hChannelHandle,UINT mode,UINT level)
参数: HANDLE hChannelHandle 通道句柄

mode: 0: 该通道不进行反隔行变换,此时
:使用

1 默认算法(系统默认值)
Level:0-10

,反隔行变换的强度逐渐加强,

返回:

正确为


说明:是否执行反隔行变换,以及反隔行变换的强度
关于反隔行变换:如果该通道的图像需要进行

4CIF的预览或编码,此时的图像中会

偶两场的数据,由于奇场图像和偶场图像不同步,导致图像中运动的部分发生
如果用户能够确定使用

此时需要对图像进行反隔行变换来去掉这种现象。
此时可以关掉反隔行变换功能,

或者主要应用在静止场景,


复位

DSP

5079. 复位DSP:ResetDSP ()

函数:int ResetDSP(int DspNumber)

int DspNumber DSP的索引号

正确为0, 其他为第4节定义的错误号;

说明:复位某DSP系统,注意请谨慎调用该函数时

再关闭相关的资源后复位DSP;

7 设置

080. 设置看门狗:SetWatchDog

int SetWatchDog(UINT boardNumber,BOOIN


UT boardNumber 板卡索引

BOOL bEnable 是否启用
正确为,其他为第节定义的错误号;

返回: 0 4
说明:设置看门狗。DS-4016HCS提供4pin复位接口,用户需要把主机机箱的

2pin复位接口,板卡上的另外相邻的
,这样就可以实现对上层软件和系统中所有压缩板卡的运行状态监控。

8 MD卡:设置视频输出通道的

函数:int SetDisplayStandard (UINT nDisplayChannel,VideoStandard_t VideoStandard)
参数:U

VideoStandard_t VideoStandard 视频制式


正确为0, 其他为第4节定义的错误号;
说明:设置视频输出通道的视频制式

9 MD卡:设置、改变、填充、清空显示区域

5082. 设置显示通道的区域个数及参数:SetDisplayRegion()

函数:int SetDisplayRegion ( UINT nDisplayChannel, U

REGION_PARAM *pParam,UINT nReserved)

UINT nDisplayChannel 显示通道索引
UINT nRegionCount 区域个数


REGION_PARAM *pParam 区域参数
UINT nReserved 保留
typedef struct
{

UINT top; 区域上边界
UINT

COLORREF color; 区域背景色


UINT param; 区域扩展参数
}REGION_PARA

#define MAX_DISPLAY_REGION 16 //每个显示窗口最多可以划分

返回: 正确为0, 其他为第4节定义的错误号;

说明:将显示通道划分为多个区域。Left、width需要按16对齐,top、height需

对齐。



ERR_NOT_SUPPORT:DSP资

每块DS-4002MD卡最大支持2个4CIF+2个QCIF窗口,如果该卡的2个显示通道的
总面积超过该限制,就会返回ERR_NOT_SUPPORT。每块DS-4004MD卡最大支持4
个4CIF+4个QCIF窗口,如果该卡的4个显示通道的总面积超过该限制,就会返回
ERR_NOT_SUPPORT。
ERR_INVALID_DEVICE:nDisplayChannel溢出

E

其它情况下返回ERR_KERNEL。




5083. 改变某个显示区域的位置:SetDisplayRegionPosition()

函数:unsigned int SetDisplayRegionPosition (UINT nDisplayChannel,UINT nRegion,UINT

nLeft,UINT nTop)

参数:UINT nDisplayChannel 显示通道索引

UINT nRegion 要调整位置的区域

UINT nLeft,UINT nTop 调整后的位

返回: 正确为0, 其他为第4节定义的错误号;

说明:改变某个显示区域的位置。
返回:

ERR_INVALID_DEVICE:nDispl

的区域个数。
其它情况下返回ERR_KERNEL。
5084. 用自定义的图像填充显示区域:FillDisplayRegion()
函数:unsigned int FillDisplayRegion (UINT nDisplayChannel,UINT nRegion,unsigned char
*pImage)
参数:UINT nDisplayChannel


unsigned char * pImage YUV420格式的图像指针
返回: 正确为0, 其他为第4节定义的错误号;

置的图像大小相同,否则图像无法正常显示。


注:如果该区域当前有图像正在显示,则该命令无效。
返回:

ERR_INVALID_DEVICE:nDisplayChannel溢出,nRegion超过该显示

的区域个数。

其它情况下返回ERR_KERNEL。

5085. 清空显示区域:ClearDisplayRegion()

函数:unsigned int ClearDisplayRegion (UINT nDispl

参数:UINT nDisplayChannel 显示通道索引
UINT nRegionFlag 要清除的区域

返回:正确为0, 其他为第4节定义的错误号;
ERR_INVALID_DEVICE:nDisplayChannel溢出
其它情况下返回ERR_KERNEL。
说明:把显示区域清空,显示SetDisplayRegion中所设置的背景色。Bit0-Bit15:对应
区域1-16,对应位为1,则将该区域清空。
注:如果该区域当前有图
 
邮箱为sunzh@star-net.cn
 
type
UINT=LongWord;

DS_BOARD_DETAIL = Record
type: BOARD_TYPE_DS; //板卡类型 (BOARD_TYPE_DS这里从文档中无法找到类型)
sn: array[0..15] of BYTE; //序列号
dspCount: UINT; //板卡包含的DSP个数
firstDspIndex: UINT; //板卡上第一个DSP在所有DSP
encodeChannelCount: UINT; //板卡包含的编码通道个数
decodeChannelC: UINT;
firstDecodeChan:UINT;
displayChannelC: UINT;
firstDisplayChan: UINT;
reserved1: UINT;
reserved3: UINT;
erved4: UINT;
end;



var
function GetBorardDetail(boardNum: UINT;var pBoardDetail:DS_BOARD_DETAIL): integer;external 'aa.dll'; //5009. 采取静态调用,你也可以用动态调用
function GetDspDetail (dspNum: UINT;var pDspDetail: DSP_DETAIL): Integer;external 'aa.dll'; //5010.
function GetEncodeChannelCount:LongWord; external 'aa.dll'; //5011. 获取系统中所有的编码通道个数:
function GetDecodeChannelCount():LongWord;external 'aa.dll'; //5012. 获取系统中所有的解码通道个数:GetDecodeChannelCount()


function tPreviewOverlayMode(bTrue: BOOL):Integer; external 'aa.dll'; //5016. 设置视频预览模式:SetPreviewOverlayMode()

function SetVideoPara( hChannelHandle:THandle;Brightness: integer;Con: Integer; Hue: Integer):Integer; external 'aa.dll'; //5019. 设置视频参数:SetVideoPara()

function LoadYUVFromBmpFile(FileNam:Pchar;var Width: Integer; Height: Integer):Integer;external 'aa.dll';


现在没空随便写了几个,晚上迟点有空
你先看一下
 
sun_8113:
我因白天上班,不能上网,现已发给您SDK,请帮助一下.
 
unit ds40xxsdk;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;
const
ERR_WAIT_TIMEOUT =$c0000001;
ERR_INVALID_HANDLE =$c0000002;
ERR_INVALID_ARGUMENT =$c0000003;
ERR_DDRAW_CREATE_FAILED =$c0000004;
ERR_DDRAW_CAPS_FAULT =$c0000005;
ERR_SET_COOPERATIVELEVEL_FAILED =$c0000006;
ERR_PRIMARY_SURFACE_CREATE_FAILED =$c0000007;
ERR_GET_OVERLAY_ADDRESS_FAILED =$c0000008;
ERR_OVERLAY_SURFACE_CREATE_FAILED=$c0000009;
ERR_OVERLAY_UPDATE_FAILED =$c000000a;
ERR_TMMAN_FAILURE =$c000000b;
ERR_CHANNELMAGIC_MISMATCH=$c000000c;
ERR_CALLBACK_REGISTERED=$c000000d;
ERR_QUEUE_OVERFLOW =$c000000e;
ERR__STREAM_THREAD_FAILURE =$c000000f;
ERR_THREAD_STOP_ERROR =$c0000010;
ERR_NOT_SUPPORT =$c0000011;
ERR_OUTOF_MEMORY =$c0000012;
ERR_DSP_BUSY =$c0000013;
ERR_DATA_ERROR =$c0000014;
STREAM_TYPE_VIDEO=1;
STREAM_TYPE_AUDIO=2 ;
STREAM_TYPE_AVSYNC=3 ;

END_CODE=$00000002;

StandarNone=$80000000;
StandardNTSC=$1;
StandardPAL=$2;
StandardSECAM=$4;

vdfRGB8A_233 = $00000001;
vdfRGB8R_332 = $00000002;
vdfRGB15Alpha = $00000004;
vdfRGB16 = $00000008;
vdfRGB24 = $00000010;
vdfRGB24Alpha = $00000020;
vdfYUV420Planar = $00000040;
vdfYUV422Planar = $00000080;
vdfYUV411Planar = $00000100;
vdfYUV420Interspersed = $00000200;
vdfYUV422Interspersed = $00000400;
vdfYUV411Interspersed = $00000800;
vdfYUV422Sequence = $00001000;
vdfYUV422SequenceAlpha = $00002000;
vdfMono = $00004000;
vdfYUV444Planar = $00008000;

FRAME_HEAD_MAGIC=$03211546;
SYSTM_SYNC_ID=2;
FRAME_BUF_SIZE=512*1024;
FRAME_STACK_SIZE=400;
FRAME_INFO_HEADER_MAGIC=$20020620;
type
Framtype_t=( PktError=0,
PktIFrams=$0001,
PktPFrames=$0002,
PktBBPFrames=$0004,
PktAudioFrames=$0008,
PktMotionDetection=$00010,
PktDspStatus=$00020,
PktOrigImage=$00040,
PktSysHeader=$00080,
PktBPFrames=$00100,
PktSFrames=$00200
);
type
TPictureFormat_t=(ENC_CIF=0,ENC_QCIF=1,ENC_2CIF=2,ENC_4CIF=3,ENC_QQCIF=4,
ENC_CIFQCIF=5,ENC_CIFQQCIF=6);
type
TVideoStandard_t=packed record
StandarNone:integer;
StandarNTSC:integer;
StandarPAL:integer;
end;
VideoStandard_t=TVideoStandard_t;
pVideoStandard_t=^TVideoStandard_t;
type
Tbitratecontroltype_t=(brCBR=0,brvbr=1);
type
BOARD_TYPE_DS = (
DS400XM =0,
DS400XH =1,
DS4004HC =2,
DS4008HC =3,
DS4016HC =4,
DS4001HF =5,
DS4004HF =6,
DS4002MD =7,
DS4004MD =8,
DS4016HCS =9,
DS4002HT =10,
DS4004HT =11,
DS4008HT =12,
DS4004HC_PLUS =13,
DS4008HC_PLUS =14,
DS4016HC_PLUS =15,
INVALID_BOard_type=16);

type
Ttagframeinfo=packed record
syncid:cardinal;
frametype:integer;
leng:cardinal;
framenumber:cardinal;
breakable:byte;
PTS:cardinal;
end;
tagframeinfo=Ttagframeinfo;
pPFREAME_HEADER=^Ttagframeinfo;
type
TtagChannelCapability = packed record
bAudioPreview: pCHAR;
bAlarmIO: pCHAR;
bWatchDog: pCHAR;
end;
tagChannelCapability=TtagChannelCapability ;
pChannelCapability=^TtagChannelCapability;

type
DS_BOARD_DETAIL = packed record
ptype: BOARD_TYPE_DS;
sn: Array[0..16-1] of BYTE;
dspCount: Word;
firstDspIndex: Word;
encodeChannelCount: Word;
firstEncodeChannelIndex: Word;
decodeChannelCount: Word;
firstDecodeChannelIndex: Word;
displayChannelCount: Word;
firstDisplayChannelIndex: Word;
reserved1: Word;
reserved2: Word;
reserved3: Word;
reserved4: Word;
end ;

type
DSP_DETAIL = packed record
encodeChannelCount: Word;
firstEncodeChannelIndex: Word;
decodeChannelCount: Word;
firstDecodeChannelIndex: Word;
displayChannelCount: Word;
firstDisplayChannelIndex: Word;
reserved1: Word;
reserved2: Word;
reserved3: Word;
reserved4: Word;
end ;

type
TtagMotionData=packed record
PicFormat:integer;
HorizeBlocks:cardinal;
VerticalBlocks:cardinal;
BlockSize:cardinal;
end;
tagmotiondata=TTagmotiondata;
pTagmotiondata=^Ttagmotiondata;
type
TVersion_INFO=packed record
DspVersion:longword;
DspBuildNum:longword;
DriverVersion:longword;
DriverBuildNum:longword;
SDKVersion:longword;
SDKBuildNum:longword;
end;
Version_INFO=TVersion_INFO;
pVersion_INFO=^TVersion_INFO;
type
TtagFramsStatistics=packed record
VideoFrames:longword;
AudioFrames:longword;
FramesLost:longword;
CurBps:longword;
end;
tagFramsStatistics=TTagFramsStatistics;
pTagFramsStatistics=^TtagFramsStatistics;
type
rtt=TRECT;
prtt=^rtt;

type
TDrawFun = procedure(nport:integer;hDc:HDC;nUser:integer);stdcall;

function InitDSPs():integer;stdcall;
function DeInitDSPs():integer;stdcall;
function ChannelOpen(ChannelNum:integer):integer;stdcall;
function ChannelClose(hChannelHandle:integer ):integer;stdcall;
function GetTotalChannels():integer;stdcall;
function GetTotalDSPs():integer;stdcall;
function GetBoardCount():integer;stdcall;
function GetDspCount():integer;stdcall;
function GetBoardInfo(hChannelHandle:integer;BoardType:PLongWord;SerialNo:pchar):integer;stdcall;
function GetBoardDetail(boardNum:integer;pBoardDetail:DS_Board_Detail):integer;stdcall;
function GetDspDetail(dspNum:integer;pDspDetail:DSP_DETAIL):integer;stdcall;
function GetEncodeChannelCount():integer;stdcall;
function GetDecodeChannelCount():integer;stdcall;
function GetDisplayChannelCount():integer;stdcall;
function GetVideoSignal(hChannelHandle:integer):integer;stdcall;
function GetCapability(hChannelHandle:integer;Capability: pChannelCapability):integer;stdcall;
function SetPreviewOverlayMode(bTrue:bool):integer;stdcall;
function GetVideoPara(hChannelHandle:integer;VideoStandard:pVideoStandard_t;Brightness:integer;
Contrast:integer;Saturation:integer;Hue:integer):integer;stdcall;
function GetSDKVersion(VersionInfo:PVERSION_INFO):longword;stdcall;
function GetFramesStatistics(hChannelHandle:integer;framesStatistics:pTagFramsStatistics):integer;stdcall;
function SetEncoderPictureFormat(channelhandle:integer;PictureFormat:TPictureFormat_t):integer;stdcall;
function SetupNotifyThreshold(channelhandle:integer;iframesthreshold:integer):integer;stdcall;
function RegisterMessageNotifyHandle(hwnd:HWND;MessageId:integer):integer;stdcall;
function SetOverlayColorKey(destcolorkey:colorref):integer;stdcall;
function SetOsd(hChannelHandle:integer;Enable:bool):integer;stdcall;
//gy
function SetOsdDisplayMode(hChannelHandle:integer;Brightness:integer;Translucent:bool;param:integer;Format1,format2:pointer):integer;stdcall;
//function SetOsdDisplayMode(hChannelHandle:integer;Brightness:integer;Translucent:bool;param:integer;Format1:pchar):integer;stdcall;
function LoadYUVFromBMPFile(FileName:pchar;YUV:pchar;BufLen:integer;Width:pinteger;Height:pinteger):integer;stdcall;
function SetLogo(hChannelhandle:integer;x,y,w,h:integer;yuv:pchar):integer;stdcall;
function SetVideoDetectPrecision(hchannelhandle:integer;value:integer):integer;stdcall;
function SetInputVideoPosition(hChannelHandle:integer;X,Y:integer):integer;stdcall;
function SetBitrateControlMode(hChannelHandle:integer;brc:Tbitratecontroltype_t):integer;stdcall;
function SetupBitrateControl(hChannelHandle:integer;maxbps:cardinal):integer;stdcall;
function SetIBPMode(hChannelHandle:integer;keyframeintervals:integer;bframes:integer;
PFrames:integer;FrameRate:integer):integer;stdcall;
function SetStreamType(hChannel:integer;tpe:byte):integer;stdcall;
function StartVideoPreview(hchannelhandle:integer;wndhandle:HWND;rt:prtt;
boverlay:BOOLEAN;videoformat:integer;framerate:integer):integer;stdcall;
function StopVideoPreview(hChannelHandle:integer):integer;stdcall;
function StartVideoCapture(hChannelHandle:integer):integer;stdcall;
function StopVideoCapture(hChannelHandle:integer):integer;stdcall;
function StartSubVideoCapture(hChannelHandle:integer):integer;stdcall;
function StopSubVideoCapture(hChannelHandle:integer):integer;stdcall;
function SetImageStream(hChannelHandle:integer;bStart:bool;fps:integer;width:integer;height:integer;imageBuffer:pchar):integer;stdcall;
function ReadStreamData(hChannelHandle:integer;const DataBuf;Len:pdword;FrameType:pinteger):integer;stdcall;
function GetSubChannelStreamType(const databuf;frametype:integer):integer;stdcall;
//function MotionAnalyzer(hChannelHandle:integer;MotionData:pbyte;iThreshold:integer;iResult:pinteger):integer;stdcall;
function RegisterDrawFun(nport:integer;drawfun:TDrawFun;nUser:integer):integer;stdcall;far;
function SetupSubChannel(hchannel:integer;ihchannel:integer):integer;stdcall;
function GetOriginalImage(hChannelHandle:integer;ImageBuf:PChar;Size:PLongWord):Integer;stdcall;
function SaveYUVToBmpFile(FileName:PChar;yuv:PChar;Width,Height:Integer):Integer;stdcall;
function SetAudioPreview(hChannelHandle:integer;bEnable:bool):Integer;stdcall;
function GetSoundLevel(hChannelHandle:integer):Integer;stdcall;


var
msgdataready,MsgUpdateCounters:integer;
savfile:string; //录像保存的文件名
implementation
// {$R *.dfm}
function InitDSPs;external 'ds40xxsdk.dll' name 'InitDSPs';
function DeInitDSPs;external 'ds40xxsdk.dll' name 'DeInitDSPs';
function ChannelOpen;external 'ds40xxsdk.dll' name 'ChannelOpen';
function ChannelClose;external 'ds40xxsdk.dll' name 'ChannelClose';
function GetTotalChannels;external 'ds40xxsdk.dll' name 'GetTotalChannels';
function GetTotalDSPs;external 'ds40xxsdk.dll' name 'GetTotalDSPs';
function GetBoardCount;external 'ds40xxsdk.dll' name 'GetBoardCount';
function GetDspCount;external 'ds40xxsdk.dll' name 'GetDspCount';
function GetBoardDetail;external 'ds40xxsdk.dll' name 'GetBoardDetail';
function GetDspDetail;external 'ds40xxsdk.dll' name 'GetDspDetail';
function GetBoardInfo;external 'ds40xxsdk.dll' name 'GetBoardInfo';
function GetEncodeChannelCount;external 'ds40xxsdk.dll' name 'GetEncodeChannelCount';
function GetDecodeChannelCount;external 'ds40xxsdk.dll' name 'GetDecodeChannelCount';
function GetDisplayChannelCount;external 'ds40xxsdk.dll' name 'GetDisplayChannelCount';
function GetVideoSignal;external 'ds40xxsdk.dll' name 'GetVideoSignal';
function GetCapability;external 'ds40xxsdk.dll' name 'GetCapability';
function GetVideoPara;external 'ds40xxsdk.dll' name 'GetVideoPara';
function GetSDKVersion;external 'ds40xxsdk.dll' name 'GetSDKVersion';
function GetFramesStatistics;external 'ds40xxsdk.dll' name 'GetFramesStatistics';
function SetPreviewOverlayMode;external 'ds40xxsdk.dll' name 'SetPreviewOverlayMode';
function SetEncoderPictureFormat;external 'ds40xxsdk.dll' name 'SetEncoderPictureFormat';
function SetupNotifyThreshold;external 'ds40xxsdk.dll' name 'SetupNotifyThreshold';
function RegisterMessageNotifyHandle;external 'ds40xxsdk.dll' name 'RegisterMessageNotifyHandle';
function SetOverlayColorKey;external 'ds40xxsdk.dll' name 'SetOverlayColorKey';
function SetOsd;external 'ds40xxsdk.dll' name 'SetOsd';
function SetOsdDisplayMode;external 'ds40xxsdk.dll' name 'SetOsdDisplayMode';
function LoadYUVFromBmpFile;external 'ds40xxsdk.dll' name 'LoadYUVFromBmpFile';
function SetLogo;external 'ds40xxsdk.dll' name 'SetLogo';
function SetVideoDetectPrecision;external 'ds40xxsdk.dll' name 'SetVideoDetectPrecision';
function SetInputVideoPosition;external 'ds40xxsdk.dll' name 'SetInputVideoPosition';
function SetBitrateControlMode;external 'ds40xxsdk.dll' name 'SetBitrateControlMode';
function SetupBitrateControl;external 'ds40xxsdk.dll' name 'SetupBitrateControl';
function SetIBPMode;external 'ds40xxsdk.dll' name 'SetIBPMode';
function SetStreamType;external 'ds40xxsdk.dll' name 'SetStreamType';
function StartVideoPreview;external 'ds40xxsdk.dll' name 'StartVideoPreview';
function StopVideoPreview;external 'ds40xxsdk.dll' name 'StopVideoPreview';
function StartVideoCapture;external 'ds40xxsdk.dll' name 'StartVideoCapture';
function StopVideoCapture;external 'ds40xxsdk.dll' name 'StopVideoCapture';
function StartSubVideoCapture;external 'ds40xxsdk.dll' name 'StartVideoCapture';
function StopSubVideoCapture;external 'ds40xxsdk.dll' name 'StopVideoCapture';
function SetImageStream;external 'ds40xxsdk.dll' name 'SetImageStream';
function ReadStreamData;external 'ds40xxsdk.dll' name 'ReadStreamData';
function GetSubChannelStreamType;external 'ds40xxsdk.dll' name 'GetSubChannelStreamType';
function RegisterDrawFun;external 'ds40xxsdk.dll' name 'RegisterDrawFun';
function SetupSubChannel;external 'ds40xxsdk.dll' name 'SetupSubChannel';
function GetOriginalImage;external 'ds40xxsdk.dll' name 'GetOriginalImage';
function SaveYUVToBmpFile;external 'ds40xxsdk.dll' name 'SaveYUVToBmpFile';
function SetAudioPreview;external 'ds40xxsdk.dll' name 'SetAudioPreview';
function GetSoundLevel;external 'ds40xxsdk.dll' name 'GetSoundLevel';
// function StartVideoCapture;external 'ds40xxsdk.dll' name 'StartVideoCapture';
end.
 
那位高手有用delphi开发过海康监控卡的应用程序,包括服务端和客户端,录象回放,我给高分或现金 请联系:444094419
 
想:
因我对C不是很精通,请您帮助我一下,能否提供改好的头文件.
 
帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
帮顶!

╭=========================================╮

80G海量源代码,控件,书籍全免费狂下不停!

http://www.source520.com

╰=========================================╯
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部