USB Video Class驱动是WINDOWS系统包含的一个针对于USB VIDEO 类的驱动程序.

好多project师都做过USB VIDEO设备端的开发, 基本的工作内容为: 使用FIRMWARE,或者LIINUX GADGET驱动程序, 构建USB VIDEO设备的描写叙述符, 通过这些描写叙述符的TOPOLOGY关系, 让系统了解,设备所支持的某些控制, 支持的视频格式, 系统驱动通过对这些描写叙述符的解释, 构建自己的KS, FILTER, NODE, PIN网络, 属性, 方法, 终于, 又由这些FILTER, NODE, PIN的属性,方法提供的接口,供DShow展现给上层应用.

设备端须要LENS的视频数据(VSYNC,HSYNC, DATA)打成USB VIDEO类型的包, 加上12字节的头, 通过BULK或者ISO EP往上层传输, 对应的PROBE/COMMIT, 视频属性的控制,终于都是将上层的CLASS REQUEST转化为底层硬件的设置.

设备端的开发, 能够说,仅仅是一部分, 对整个系统的了解,也仅仅是较小的一块.

WINDOWS帮助USB VIDEO CLASS的系统实现了很多其它的部分.

USBVIDEO.SYS作为PIN-CENTRIC 的AVSTREAM minidriver, 依据设备的描写叙述符, 创建了filter factory(同一时候对对设备的INPUT,OUTPUT terminal).

利用设备描写叙述符内容, USB VIDEO CLASS驱动, 在系统内部构建了FILTER, NODE, 与CONNECTIONS建立的一张GRAPH.

同一时候,通过描写叙述符中对应的控制CONTROL, USB VIDEO CLASS也在FILTER, PIN, NODE的描写叙述符及其属性中增加对应的AUTOMATION TABLES.

依据描写叙述符中的视频数据格式, 驱动相同向KS提交数据范围的列表以及数据交集的处理名柄.

该驱动相同为音视频同步做了考虑, 主旨是通过KS的MASTER CLOCK给视频数据打上时间戳, 作为同步需求的參考时间.

为了和驱动交互, 应用程序通过DShow COM 接口来达到应用的目的.

做过AVStream/BDA驱动的project师都了解,AVStream/BDA的架构的复杂程度, 与设备端的程序的直观性, 易理解性,易调试性,都不是一个数量级的.

要真正从底层到顶层, 一个USB VIDEO CLASS设备的理解, 包含USB DEVICE CONTROLLER, CMOS, FIRMWARE/LINUX GADGET, 还包含, AVSTREAM/BDA架构与细节, DShow, 等一系列的内容.

第十八篇:融汇贯通--谈USB Video Class驱动的更多相关文章

  1. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  2. Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)

    第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...

  3. Android UI开发第二十八篇——Fragment中使用左右滑动菜单

    Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...

  4. Python开发【第十八篇】Web框架之Django【基础篇】

    一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...

  5. 第五十八篇、iOS 微信聊天发送小视频的秘密

    对于播放视频,大家应该一开始就想到比较方便快捷使用简单的MPMoviePlayerController类,确实用这个苹果官方为我们包装好了的 API 确实有很多事情都不用我们烦心,我们可以很快的做出一 ...

  6. 第十八篇 ANDROID的声音管理系统及服务

     声音管理系统用来实现声音的输入和输出.声音的控制和路由等功能,包括主和各种音源的音量调节.声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理.音效的播放.音轨设置和播放.录音设置 ...

  7. Python学习第十八篇——低耦合函数设计思想

    import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...

  8. SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot18-scheduling/ 本文出自方志朋的博客 ...

  9. 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境

    1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...

随机推荐

  1. 《Mysql 入门很简单》(读后感①)

    下载完整版<Mysql 入门很简单>,点击这里~: http://files.cnblogs.com/files/zhengyeye/MySQL%E5%85%A5%E9%97%A8%E5% ...

  2. vc 使用ShellExecut来启动控制面板中功能模块的操作

    文件夹,文件,网址可以创建快捷方式,控制面板 中的设置也可以创建快捷方式,下面是快捷方式的命令,使用方法:在桌面或文件夹的空白处点右键,选择新建,快捷方式,在“请键入项目的位置”输入下面的命 令,然后 ...

  3. 【Java并发编程一】线程安全和共享对象

    一.什么是线程安全 当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用代码代码不必作其他的协调,这个类的行为仍然是正确的,那么称这个类是线程安全的 ...

  4. Qt——添加动作及对话框

    1. 添加动作 教程:https://www.devbean.net/2012/08/qt-study-road-2-action/ 运行教程中的第一个程序,报错如下: 原因:没有将main.cpp改 ...

  5. IOS设计模式第三篇之外观设计模式

    外观设计模式: 这个外观设计模式提供了一个单独的接口给复杂的子系统.而不是暴露用户的一组类和API,你仅仅暴露一个简单的同一的API. 下面的图片解释这个概念: API的用户根本不知道后面系统的复杂性 ...

  6. Microsoft 设计原则

    在本文中 关于现代设计 技术为本 实现以较少投入取得极大成绩 迅速和流畅 真正实现数字化 合作共赢 相关主题 驱动出色设计的基础 我们相信遵循 Microsoft 设计原则可帮助你构建使用户感到愉悦并 ...

  7. 文件系统的挂载(2)---挂载rootfs文件系统

    一.目的 本文主要讲述linux内核rootfs文件系统的挂载过程,内核版本为3.10. rootfs是基于内存的文件系统,没有实际的存储设备,所有操作都在内存中完成.为了保证linux内核的精简性, ...

  8. 浅谈CSS盒子模型

    [摘要]盒子模型是CSS中的一个重要概念,虽然CSS中没有盒子这个单独的属性对象,但它却是CSS中无处不在的一个重要组成部分.掌握盒子模型的原理和使用方法可以极大地丰富HTML元素的表现效果,同时对于 ...

  9. How to Use Postman to Manage and Execute Your APIs

    How to Use Postman to Manage and Execute Your APIs Postman is convenient for executing APIs because ...

  10. 完全卸载Oracle数据库软件

    软件环境: 1.Windows xp+ORACLE 8.1.7 2.ORACLE安装路径为:C:\ORACLE 实现方法: 1. 开始->设置->控制面板->管理工具->服务 ...