Windows摄像头驱动研究(一)

Windows 驱动基础系列,转载请标明出处:http://blog.csdn.net/ikerpeng/article/details/38865317

摄像头驱动的主要目的是通过通过硬件捕捉视频信号。

WDM摄像头驱动框架。

主要包括两种的驱动ClassDriver(由Windows提供,为了统一标准), MiniDriver(由程序员实现)

Class Driver:

与操作系统交互,包括处理同步,提够标准接口。

Mini Driver:

主要由类驱动调用,负责具体的硬件相关的操作。

通过一个图看看他们的关系:

其中SRB是 Stream Request Block。

初始化:

1. 即插即用的设备,插入后调用Mini Driver的 DriverEntry例程;

2 Mini Driver 在自己的DriverEntry中填充HW_INITIALIZATION_DATA,然后返回StreamClassRegisterMinidriver;

3. Class Driver 中初始化一个SRB_INITIALIZE_DEVICE类型的SRB,这个SRB中的CommandData.ConfigInfo记录着摄像头硬件的相关信息;

这个SRB会传递给小驱动,小驱动会由此得到一些硬件的信息并返回;同时告知类驱动,小驱动已经初始化完毕。

4. 然后类驱动再向小驱动发送一个SRB:SRB_GET_STREAM_INFO, 由此获得:HW_STREAM_HEADER 数据信息和 HW_STREAM_INFORMATION等信息这些信息中包括了摄像头驱动中提供的视频图像的大小,图像的格式等信息;

5. 然后类驱动再发送一个 HW_STREAM_INFORMATION的SRB,这次请求以后,小驱动应该做完所有的初始化操作,并返回给驱动程序。

·每个Minidriver都必须提供的例程:

StrMiniCancelPacket
对 HW_SRB数据包进行取消的回调函数;

StrMiniReceiveDevicePacket
获取 HW_SRB数据包的回调函数;

StrMiniRequestTimeout :
对HW_SRB数据包进行超时处理的回调函数;

StrMiniEvent
使小驱动支持某一事件;

StrMiniInterrupt
当驱动遇到中断时调用的回调函数;

·Minidriver为每个单独的流提供的例程:

StrMiniReceiveStreamDataPacket:对于获取数据流的回调函数

StrMiniReceiveStreamControlPacket
对于控制数据流的回调函数

StrMiniEvent: 使数据流支持一种事件

StrMiniClock
对于数字流时钟控制的回调函数。

我们再来看一下驱动程序的工作流:

1. 设备插入,被即插即用设备管理器检测到;

2. 于是创建PDO,产生相应的IRP;

3. 于是I/O子系统加载MiniDriver,并进入到DriverEntry;

4. 在DriverEntry里面初始化:HW_INITIALIZATION_DATA 数据结构(其中包括控制SRB的HwReceivePacket);

5.类驱动程序构造SRB,并将其Command设置为SRB_INITIALIZATION_DEVICE;

6,. 将此SRB作为参数,调用HwReceivePacket;

7,如此类似构造:open close等等的SRB,调用HwReceivePacket。

本节完。

参考书目:

《 Windows 驱动开发技术详解 》

时间: 2024-11-09 18:40:42

Windows摄像头驱动研究(一)的相关文章

Linux USB摄像头驱动【转】

本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 USB 接口的摄像头.这一章主要是介绍 USB 摄像头的设备驱动程序.在我们印象中,驱动程序都是一个萝卜一个坑,拿到一个硬件就需要去安装它相对应的驱动程序.有时候稍有不对还会导致电脑崩溃,是不是让人很郁闷?这一章我们讲 USB 摄像头设备驱动,那么是不是支持所有的 USB 摄像头驱动呢?带着这个疑问

windows 10驱动签名_win 10驱动数字签名_驱动签名注意事项

目前对于驱动开发者而言往往面对着一个问题--windows 10驱动数字签名问题,根据Symantec VeriSign代码签名中国区代理商深圳易维信的客服所介绍,目前颁发的Symantec CodeSign还不支持Windows 10,针对国外的数字签名证书已经有EV版CodeSign,暂时还没有支持中文版的EV CodeSign.所以对于急需解决win 10驱动签名的用户,可以选择申请 GlobalSign EV代码签名证书.不过EV代码签名证书的申请审核要求更为严格,具体可以联系一下深圳易

Windows显示驱动(WDDM)编程初步(1)

欢迎转载[作者:张佩][原文:http://www.yiiyee.cn/Blog/wddm1/] Windows显示驱动从Vista开始,使用新的WDDM编程框架,称为Windows Display Driver  Model.也有一种最初的名称是LDDM,L代表Longhorn,但后来微软在所有产品线上都不再使用Longhorn代号,故而改成现在的名称.虽然在有些地方还能看到LDDM的说法,但应理解成旧文档的遗存,不应该做概念上的区分. WDDM框架是一种典型的小端口(miniport)驱动框

基于Linux 3.0.8 Samsung FIMC(S5PV210) 的摄像头驱动框架解读

作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 FIMC这个名字应该是从S5P100开始出现的,在s5pv210里面的定义是摄像头接口,但是它同样具有图像数据颜色空间转换的作用.而exynos4412对它的定义看起来更清晰些,摄像头接口被定义为FIMC-LITE .颜色空间转换的硬件结构被定义为FIMC-IS.不多说了,我们先来看看Linux3.0.8 三星的BSP包中与fimc驱动相关的文件. 上面的源码文件组成了整个fimc的驱动框架.通

win10迁移时出现“安装 windows 的驱动已被锁定。请解锁该驱动器,然后再试一次”解决方法

故障原因:因为想换一台新机器而又不愿新装系统,所以直接拿两块硬盘复制数据然后对旧PC的系统盘做了一个ghost,然后在新PC上进PE进行还原后,开机报错,提示修复计算机(因为硬件变更了),所以在插入安装盘进行修复时,提示"安装 windows 的驱动已被锁定.请解锁该驱动器,然后再试一次". 解决方法: 1.在进入安装盘的"开始安装"界面时,点击"修复计算机": 2.进入后选择"疑难解答": 3.选择"高级选项&qu

andorid之摄像头驱动流程--MTK平台

原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过DSP加工出来,然后在通过IO接口传输到CPU处理.  由于摄像头满足总线.驱动.设备模型,那么看看andorid是怎么去实现摄像头的流程. 1.  注册Camera的platform平台设备 点击(此处)折叠或打开 CAMERA_HW_i2C_init platform_driver_registe

STM32F103USB摄像头驱动

现在想想自己也很无语.一个月前一时冲动在淘宝买了块原子开发板(非广告),然后就开始奇妙的嵌入式生涯... 代码是从原子的触控鼠标实验改过来的,煎蛋实现了一个USB摄像头,可以将一帧320*240的JPG图片发送到HOST,所以并不包含摄像头驱动代码. 代码很简单,作为学习UVC或者参考也是不错的. PC上看到的图像 MDK项目文件: http://download.csdn.net/detail/funte/8560745 自己收集的USB学习资料:http://download.csdn.ne

windows内核驱动中的链表结构

windows内核驱动中的链表结构与数据结构中的链表结构在构造上有很大不同,以循环双链表为例 数据结构中的链表结构: 数据就像集装箱,可以直接放置在火车上,而节点就像每节之间的挂接装置. 内核驱动中的链表结构: 数据就像车厢,自带挂接装置(节点) 1.链表结构体不同 数据结构中的链表结构,包含有节点和数据, struct DataList{ DataType data; struct DataList* next; struct DataList* prev; }; 驱动中的链表结构,仅包含有节

V4L2学习5--VIVI虚拟摄像头驱动

概述 前面简单分析了内核中虚拟摄像头驱动 vivi 的框架与实现,本文参考 vivi 来写一个虚拟摄像头驱动,查询.设置视频格式相对简单,难点在于 vb2_buf 的处理过程. 数据采集流程分析 在我的程序中,大概的数据采集流程如上图所示,启动视频采集之后,创建了一个内核线程,内核线程每30ms 唤醒一次,每一次唤醒都会尝试用 queue_list 中取出一个 buffer 填充数据之后挂入 done_list ,挂入 done_list 之后就会唤醒应用程序(poll 中休眠),应用程序唤醒之