C# 视频监控系列(7):服务器端——封装API(下) (6)

简介:

 #region 3.7.1.2 LOGO

        
/// <summary>
        
/// 3.7.1.2.1数据格式转换
        
///     说 明:  将24位bmp格式图像转换为yuv422格式图像。
        
///     注意:bmp位图的长宽必须为16的倍数,图像尺寸最大支持128*128,4.3版本SDK图像尺寸扩大为256*128
        
/// 
        
/// 函 数:  int __stdcall LoadYUVFromBmpFile(char *FileName, unsigned char *yuv,  int BufLen, int *Width, int *Height) 
        
/// </summary>
        
/// <param name="FileName">文件名</param>
        
/// <param name="yuv">YUV422图像指针 </param>
        
/// <param name="BufLen">YUV422图像缓存大小</param>
        
/// <param name="Width">返回的YUV422图像的宽度</param>
        
/// <param name="Height">返回的YUV422图像的高度</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int LoadYUVFromBmpFile(string FileName, string yuv, int BufLen, ref int Width, ref int Height);

        
/// <summary>
        
/// 3.7.1.2.2设置LOGO显示模式
        
///     说 明:  设置LOGO显示模式
        
/// 
        
/// 函 数:  int __stdcall SetLogoDisplayMode(HANDLE hChannelHandle,  COLORREF ColorKey, BOOL Translucent, int TwinkleInterval) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="ColorKey">LOGO图像中该颜色在显示时将会全透明</param>
        
/// <param name="Translucent">LOGO图像是否作半透明处理</param>
        
/// <param name="TwinkleInterval">闪烁的时间设置,由16进制数表示为0xXXYY,其中XX为显示的秒数,YY为停止的秒数,XXYY均为0时正常显示。</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetLogoDisplayMode(IntPtr hChannelHandle, Color ColorKey, bool Translucent, int TwinkleInterval);

        
/// <summary>
        
/// 3.7.1.2.3设置LOGO显示位置及数据
        
///     说 明:  设置LOGO图像位置及数据,用户程序可先调用LoadYUVFromBmpFile将24
        
///     位bmp文件中转化为YUV422格式数据,,透明处理由DSP完成。
        
///     注意:HS卡的x,w需要按照32对齐,y,h仍为8对齐。
        
/// 
        
/// 函 数:  int __stdcall SetLogo(HANDLE hChannelHandle, int x, int y, int w, int h,  unsigned char *yuv) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="x">LOGO左上角x坐标位置,取值范围0-703,需按16对齐</param>
        
/// <param name="y">LOGO左上角y坐标位置,取值范围0-575,需按8对齐</param>
        
/// <param name="w">LOGO宽度,最大值为256,需按16对齐,此宽度必须和LOGO图片的宽度相一致</param>
        
/// <param name="h">LOGO高度,最大值为128,需按8对齐</param>
        
/// <param name="yuv">LOGO图片指针(yuv422格式)</param>
        
/// <returns>成功返回0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetLogo(IntPtr hChannelHandle, int x, int y, int w, int h, string yuv);

        
/// <summary>
        
/// 3.7.1.2.4停止LOGO显示
        
///     说 明:  停止LOGO显示
        
/// 
        
/// int __stdcall StopLogo(HANDLE hChannelHandle)
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int StopLogo(IntPtr hChannelHandle);

        
#endregion

        
#region 3.7.1.3视频遮挡MASK

        
/// <summary>
        
/// 3.7.1.3.1设置屏幕遮挡
        
///     说 明:  设置屏幕遮挡,最多可以设置32个
        
/// 
        
/// int __stdcall SetupMask(HANDLE hChannelHandle, RECT *RectList, int iAreas) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="RectList">矩形框数组,宽度范围0-704,按16对齐;高度范围0-576,按</param>
        
/// <param name="iAreas">矩形框个数</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetupMask(IntPtr hChannelHandle, ref Rectangle RectList, int iAreas);

        
/// <summary>
        
/// 3.7.1.3.1停止屏幕遮挡
        
///     说 明:  停止屏幕遮挡
        
/// 
        
/// int __stdcall StopMask(HANDLE hChannelHandle) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int StopMask(IntPtr hChannelHandle);

        
#endregion

        
#endregion

        
#region 3.7.2仅在预览画面上叠加信息

        
//        注意:当采用overlay预览模式时,可在overlay表面上直接叠加字符或画图,当采用offscreen
        
//预览模式时,需要调用画图回调函数进行信息叠加,所叠加信息仅在预览屏幕上显示,不进
        
//入编码。 

        
//Offscreen预览模式下画图回调函数

        
/// <summary>
        
/// 3.7.2.1注册画图回调函数
        
///     说 明:  获取当前offscreen表面的device context,HC系列板卡采用创建offscreen的方 
        
///     式,所以在窗口客户区中的DC中无法画图或者鞋子,必须使用DirectDraw里的offscreen表面的DC。
        
///     注意:如果采用overlay预览模式,则直接在overlay表面画图即可,无需调用此函数
        
/// 
        
/// int __stdcall RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun),LONG nUser)
        
/// </summary>
        
/// <param name="nport">通道号索引</param>
        
/// <param name="df">画图回调函数</param>
        
/// <param name="nUser">用户数据</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int RegisterDrawFun(ulong nport, DrawFun df, long nUser);
        
//public static extern int RegisterDrawFun(ulong nport, DrawFun df, IntPtr nUser);

        
/// <summary>
        
/// 3.7.2.2停止画图回调
        
///     说 明:  停止画图回调。在某些显卡上进行画图回调,会使得CPU的利用率变高,所以可以在适当的时候(画图回调结束)停止调用。
        
/// 
        
/// int __stdcall StopRegisterDrawFun(DWORD nport) 
        
/// </summary>
        
/// <param name="nport">通道索引</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int StopRegisterDrawFun(ulong nport);



        
#endregion

        
#endregion

        
#region 3.8音频

        
/// <summary>
        
/// 3.8.1设置音频预览
        
///     说 明:  设置音频预览与否,同一时间,系统只支持一路音频预览。需要将4针线和声卡音频输入口联接。
        
/// 
        
/// int __stdcall SetAudioPreview(HANDLE hChannelHandle, BOOL bEnable) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <param name="bEnable">使能</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetAudioPreview(IntPtr hChannelHandle, bool bEnable);

        
/// <summary>
        
/// 3.8.2获取音频输入音量幅度
        
///     说 明:  获取当前通道的现场声音幅度。
        
///     注意:当无声音输入时因背景噪声的原因返回值并不为0。 
        
/// 
        
/// int __stdcall GetSoundLevel(HANDLE hChannelHandle) 
        
/// </summary>
        
/// <param name="hChannelHandle">通道句柄</param>
        
/// <returns>当前通道的音频输入幅度</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int GetSoundLevel(IntPtr hChannelHandle);


        
#endregion

        
#region 3.9其他

        
/// <summary>
        
/// 3.9.1复位DSP
        
///     此函数目前无效
        
///     说 明:  复位某个DSP,注意请谨慎调用该函数,请确定DSP故障无法软件恢复时再关闭相关的资源后复位DSP。
        
/// 
        
/// int __stdcall ResetDSP(int DspNumber);
        
/// </summary>
        
/// <param name="DspNumber">DSP索引号</param>
        
/// <returns>  成功返回0;失败返回错误号 </returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int ResetDSP(int DspNumber);

        
/// <summary>
        
/// 3.9.2设置看门狗
        
///     说 明:  设置看门狗。DS-4016HCS提供4pin复位接口,用户需要把主机机箱的Reset
        
///     接线连接到板卡上相邻的2pin复位接口,板卡上的另外相邻的2pin接口连接到主板的Reset,
        
///     这样就可以实现对上层软件和系统中所有压缩板卡的运行状态监控。
        
/// 
        
/// int __stdcall SetWatchDog(UINT boardNumber,BOOL bEnable) 
        
/// </summary>
        
/// <param name="boardNumber">板卡索引</param>
        
/// <param name="bEnable">使能</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetWatchDog(uint boardNumber, bool bEnable);

        
#region 3.9.3码流数字水印校验

        
/// <summary>
        
/// 3.9.3.1设置主通道数字水印校验
        
///     说 明:  此函数不支持动态设置,设置后会在下一次启动录像后生效。
        
/// 
        
/// int __stdcall SetChannelStreamCRC(HANDLE hChannel,BOOL bEnable) 
        
/// </summary>
        
/// <param name="hChannel">通道句柄</param>
        
/// <param name="bEnable">使能</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetChannelStreamCRC(IntPtr hChannel, bool bEnable);

        
/// <summary>
        
/// 3.9.3.2设置子通道数字水印校验
        
///     说 明:  此函数不支持动态设置,设置后会在下一次启动录像后生效。
        
/// 
        
/// int __stdcall SetSubChannelStreamCRC(HANDLE hChannel,BOOL bEnable)
        
/// </summary>
        
/// <param name="hChannel">通道句柄</param>
        
/// <param name="bEnable">使能</param>
        
/// <returns>成功返回0;失败返回错误号</returns>
        [DllImport("DS40xxSDK.dll")]
        
public static extern int SetSubChannelStreamCRC(IntPtr hChannel, bool bEnable);


        
#endregion

        
#endregion

        
#endregion

    }
}

 

 

修改记录

     1.     2009-3-16,修改前本文备份:/Files/over140/2009/3/2009-3-16.rar

          1.1     去掉了《4.解码卡API 》,暂时用不上也占文章太多行数,暂时去掉了。

          1.2     GetSDKVersion 结构体一般需要加ref

               VC++:int __stdcall GetSDKVersion(PVERSION_INFO VersionInfo)

               C#[改前]:public static extern int GetSDKVersion(PVERSION_INFO VersionInfo);

               C#[改后]:public static extern int GetSDKVersion(ref PVERSION_INFO VersionInfo);

          1.3     抓图函数GetJpegImage ,没注意参数Size前面的*

               VC++:int __stdcall GetJpegImage(HANDLE hChannelHandle,UCHAR *ImageBuf, ULONG *Size,UINT nQuality)

               C#[改前]:public static extern int GetJpegImage(IntPtr hChannelHandle, byte[] ImageBuf, ulong Size, uint nQuality);

               C#[改后]:public static extern int GetJpegImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size, uint nQuality); 

          1.4     抓图函数GetOriginalImage,没注意参数Size前面的*

               VC++:int __stdcall GetOriginalImage(HANDLE hChannelHandle, UCHAR *ImageBuf,  ULONG *Size) 

               C#[改前]:public static extern int GetOriginalImage(IntPtr hChannelHandle, byte[] ImageBuf, ulong Size);

               C#[改后]:public static extern int GetOriginalImage(IntPtr hChannelHandle, byte[] ImageBuf, out int Size);

          小节:一般结构体对应翻译的话都要加ref;一般数值类型的加*对应都要加out。 

     2.     2009-3-19

          2.1     GetBoardDetail

                    VC++原型:int __stdcall GetBoardDetail(UINT boardNum,DS_BOARD_DETAIL *pBoardDetail)

                    C# 改前:public static extern int GetBoardDetail(uint boardNum, DS_BOARD_DETAIL pBoardDetail);

                    C# 改后:public static extern int GetBoardDetail(uint boardNum, ref DS_BOARD_DETAIL pBoardDetail);

          2.2     GetDspDetail

                    VC++原型:int __stdcall GetDspDetail(UINT dspNum,DSP_DETAIL *pDspDetail)

                    C# 改前:public static extern int GetDspDetail(uint dspNum, DSP_DETAIL pDspDetail);

                    C# 改后:public static extern int GetDspDetail(uint dspNum, ref DSP_DETAIL pDspDetail);

 

结束

     在后续的文章中本文中API仍然可能会变动,毕竟我们用的只是其中的一部分,我会随时更新,感谢继续关注。本来是作为一篇文章发布的,发现代码过长,插入都费老半天,所有拆开成上下了!!



本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/586689,如需转载请自行联系原作者

相关文章
|
7月前
|
JSON 监控 API
在线网络PING接口检测服务器连通状态免费API教程
接口盒子提供免费PING检测API,可测试域名或IP的连通性与响应速度,支持指定地域节点,适用于服务器运维和网络监控。
916 0
|
8月前
|
数据采集 Java API
深度解析:爬虫技术获取淘宝商品详情并封装为API的全流程应用
本文探讨了如何利用爬虫技术获取淘宝商品详情并封装为API。首先介绍了爬虫的核心原理与工具,包括Python的Requests、BeautifulSoup和Scrapy等库。接着通过实战案例展示了如何分析淘宝商品页面结构、编写爬虫代码以及突破反爬虫策略。随后讲解了如何使用Flask框架将数据封装为API,并部署到服务器供外部访问。最后强调了在开发过程中需遵守法律与道德规范,确保数据使用的合法性和正当性。
|
6月前
|
人工智能 API 定位技术
MCP 开发实战:手把手教你封装高德地图与 arXiv API
本教程为 MCP(Model Context Protocol)开发实战第二阶段,带你从零封装第三方 API 为 AI 模型可用工具。通过高德地图地理编码与 arXiv 论文检索两个实例,涵盖项目搭建、工具声明、资源定义、错误处理等核心内容,助你快速上手 MCP 开发并集成至 Claude 使用。
|
设计模式 开发框架 安全
C# 一分钟浅谈:GraphQL API 与 C#
本文介绍了 GraphQL API 的基本概念及其优势,并通过 C# 实现了一个简单的 GraphQL 服务。GraphQL 是一种高效的 API 查询语言,允许客户端精确请求所需数据,减少不必要的数据传输。文章详细讲解了如何使用 `GraphQL.NET` 库在 C# 中创建和配置 GraphQL 服务,并提供了常见问题的解决方案和代码示例。
369 4
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
691 7
|
11月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
11月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
909 17
|
设计模式 API C#
C# 一分钟浅谈:GraphQL 服务器端实现
本文通过C#语言从零开始构建一个简单的GraphQL服务器端实现,介绍了环境准备、项目创建、定义Schema、配置GraphQL等步骤。同时,探讨了常见问题如数据源问题、类型定义不一致、性能问题和权限控制,提供了相应的解决方法。希望帮助读者更好地理解和应用GraphQL。
206 3
|
负载均衡 数据可视化 API
像素流送api ue多人访问需要什么显卡服务器
本文总结了关于像素流送技术的五大常见问题,包括是否支持Unity模型推流、UE多人访问的最大并发数、所需服务器配置、稳定性问题及API支持情况,旨在帮助开发者更好地理解和应用这一技术。
557 1
|
JSON JavaScript API
(API接口系列)商品详情数据封装接口json数据格式分析
在成长的路上,我们都是同行者。这篇关于商品详情API接口的文章,希望能帮助到您。期待与您继续分享更多API接口的知识,请记得关注Anzexi58哦!