UVC摄像头技术笔记
+ -

UVC摄像头驱动装调试总结

2021-08-16 1487 0

前几天发表了一篇文章 UVC PTZ和扩展单元的过滤与分发调试笔记,原文见: http://www.usbzh.com/article/detail-517.html ,本来想着应该没啥问题了,可没想到上周五在实际测试过程中,还是出现了问题:
经过长时间的UVC摄像头工作,突然驱动显示了大量数据包错误的问题,然后后续数据的大量丢弃导致上层摄像头的图像卡帧或静止不动的情况。
我当时的第一反应可能是数据接收不即时引起的.因为这种情况我熟,在做UAC麦克风的时候,就是由于接收数据的不即时导致音质有问题。后来将数据的链表插入当放到了完成例程中解决。所以本来想着也是什么大事,也因为是周五下班了,再周再改代码试试…

今天来上班,本着祖传代码能不动就不动的原则,我进行了代码结构的调整。和UAC音频一样,将UVC摄像头数据移到了完成合例程中,再进行测试。
想着应该是美好的一天,哼着我心爱的小摩托,完美地解决这个小BUG…
现实啪啪地打了我的脸,连续运行了大概不到20分钟,系统竟然黑屏,在Windbg中也打印了大量的错误帧信息…
大量的错误帧信息

喵的,看来是找错了方向了…

其实软件工程在调试的过程中,就是一个经验问题…
我又进行了一次怀疑:这玩意不会是内存溢出问题吧。不然系统咱这么卡
暴力地重新启动了测试机,现次测试,看到设备管理器,发现了系统的已使用内存在缓慢地增大,我将上层的应用停掉,发现内存并没有,看来这是我缓存数据这块的问题…
因为应用层是读取我缓存的数据的,我详细认真地把这一块写的代码看了一下,确定没有任何问题…
那么看来应该是应用层写数据的问题了,翻开代码一看,好像真的有问题

  frame = Trans_GetVideoTempFrame(deviceExtension);
 if (frame == NULL)
 {
    ...
 }

 PCHAR packet_data = frame->data;
 ULONG read_size = frame->size;

 RtlCopyMemory(pData, packet_data, read_size);
 *pLen = read_size;

 return STATUS_SUCCESS;

竟然忘了释放frame的内存,我赶快的加上ExFreePool,再次编译,重新加载驱动,再次运行…
看着平稳的内存曲线,我又默默地哼起了我心爱的小摩托
内存曲线

这里我不得不再次说一下,技术交流群里的:UVC摄像头扩展单元调试工具(http://www.usbzh.com/article/detail-516.html ) 是真的好用,虽然第二次使用出现了GUID 00情况导致自己不能继续调试,但还是很感激临江仙大佬给我那么多的调试版本。
调试版本

后面没办法还是用了自己写的扩展单元代码进行调试,不过我们最终还是到了GUID为00的问题,后续大佬也说会出新的版本
GUID为00的问题

新的扩展单元代码工具界面如下:
113718371193

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

UVC 扩展单元描述符
扩展单元描述符允许硬件设计者定义任意一组控制接口,使类驱动程序可以在设备与供应商提供的主机软件之间进行通讯控制。扩展单元描述符ID由bUnitID字段中的值唯一标识描述符。同一视频功能内的任何其他单元或终端不得具有相同的功能ID。guidExtensionCode字段包含特定于供应商的代码,该代......
Linux V4L2 UVC摄像头框架浅析
V4L2 :video for linux version 2 ,是 Linux 里一套标准的视频驱动,它支持 UVC 标准的摄像头。本文来分析一下它的核心框架。整个v4l2的框架分为三层:在应用层,我们可以在 /dev 目录发现 video0 类似的设备节点,上层的摄像头程序打开设备节点进行......
打开UVC摄像头(特定类请求)数据分析
通过上节可以知道,设备支持4种的视频格式,且每种格式如下:MPJPG数据格式bFormatIndexbFrameIndex分辩率及及帧率11640x480x(30,15,10)121280x720x(30,15,10)131920x1080x(30,15......
UVC摄像头扩展单元功能的开发步骤是什么?
写在扩展单元的题外话本人在开发支持UVC扩展单元的directShow应用时,必现并不需要注册接口,只需要在其源过滤器参照后续的代码枚举相关的接口如IKsControl,IKsTopologyInfo定位到指定的扩展单元接口后,直接使用其对应的IKsControl::KsProperty即可实现扩展......
UVC摄像头的延迟reduce latency
一般的ISP,200W30帧来说,sensor进来缓存一帧就是33ms+vpu处理时间大概10ms+jpeg编码时间16ms+USB传输时间200KB大概7、8ms,最后就是windows上的显示延迟时间,如果JPEG编码出来缓存不止一帧,时间就更长了,所以一般会超过100多ms另外,网络传输如使......
UVC Windows下UVC摄像头数据分析
这里我们分析一款UVC摄像头来进行数据分析。环境:win10 x64工具:bushound,usbviewer将摄像头插入PC后,打开usbviewer工具,可以看到关于此摄像头的相关信息。可以看到,这个摄像头其实是一个USB复合设备,所以其对应的系统驱动为USBCCGP,然后再由USB复合设......
简易摄像头playcap工程代码及应用程序
playcap是一个小巧的UVC摄像头测试工具,使用的是DirectShow,本人之前装饰部分代码发布到此网址:http://www.usbzh.com/article/detail-553.html但经常有人说编译不过,其实这都是工程配置问题引起的。现将工程代码及编译好的应用程序提供详细的下载地......
Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
UVC摄像头的关闭流程及抓包分析
通过UVC协议规范可以知道,UVC的数据传输支持USB四种传输中的批量传输和同步传输,所以对于UVC摄像头,当我们在摄像头正在工作时,需要停止摄像头工作,执行的操作是不同的。在Linux的源代码中,摄像头的流关闭是由函数uvc_video_stop_streaming完成的。代码比较简单,我们直接给......
如何设置安卓手机各版本USB调试模式
本节向大家讲解安卓手机USB调试模式的开启及关闭方法,以及其用途。由于Android 机型众多,如华为,小米,一加,OPP等众终品牌,这里我们无办法列举一一列举。但开启USB 调试的操作方法基本上是一样的,只是不同品牌的机型,操作过程中有小小不同而已。对于安卓4.2或更高的版本第一步:在设备上找......
UVC摄像头批量传输的StreamOn和StreamOff
在UVC规范中,UVC摄像头视频数据的传输方式支持两种,分别为批量传输和同步传输。UVC摄像头数据传输的格式按负载数据头的方式按帧进行打包传输。根据USB规范可知,同步传输方式是只要带中带有同步端点的接口,系统会定时从设备中读取数据,无论设备中是否有数据。而如要要停止数据的传输,只需要选中不带有同步......
Linux源码分析UVC摄像头的初始化流程分析
UVC摄像头的初始化发生在硬件被接入USB集线器中,设备初USB驱动识别为摄像头的后续初始化流程。和Windows的AddDevice驱动函数一样,Linux设备的创建和侦测是通过int uvc_probe函数实现的。其函数的调用关系如下://linux/v5.11.11/source/drive......
Windows对红外相机摄像头的支持
从Windows10的1607版本开始,USB视频类(UVC)驱动程序支持产生红外(IR)流的摄像头。红外摄像头相机捕捉场景的亮度值,并通过USB以未压缩格式或压缩格式传输帧。这些相机及其流通过媒体捕获管道(pipeline)导出给应用程序。红外UVC摄像头相机帧类型红外UVC摄像头相机支持的格......
UVC 输入终端描述符
输入终端描述符用于向主机报告视频数据输入终端的相关信息。输入终端描述符使用bTerminalID描述输入终端的ID,且这个ID是惟一的。输入终端描述符位于视频控制接口中。输入终端描述符结构体定义如下:// Input Terminal Descriptortypedef struct _USB......
USB兼容驱动Composite层级引起的摄像头灯问题
跌跌撞撞,搞了快一个星期。一个定制厂商用的UVC摄像头指示搞了几天,今天算是可以蒙混过关了。关于调试过程中的一部分细节,可见本人的另一篇文章:关于UVC摄像头指示灯的调试过程总结 http://www.usbzh.com/article/detail-430.html在这里,可能只能算是总结二吧,没......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!