第十八篇:融汇贯通--谈USB Video Class驱动
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驱动的更多相关文章
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- Egret入门学习日记 --- 第十八篇(书中 8.5~8.7 节 内容)
第十八篇(书中 8.5~8.7 节 内容) 其实语法篇,我感觉没必要写录入到日记里. 我也犹豫了好久,到底要不要录入. 这样,我先读一遍语法篇的所有内容,我觉得值得留下的,我就录入日记里. 不然像昨天 ...
- Android UI开发第二十八篇——Fragment中使用左右滑动菜单
Fragment实现了Android UI的分片管理,尤其在平板开发中,好处多多.这一篇将借助Android UI开发第二十六篇——Fragment间的通信. Android UI开发第二十七篇——实 ...
- Python开发【第十八篇】Web框架之Django【基础篇】
一.简介 Python下有许多款不同的 Web 框架,Django 是重量级选手中最有代表性的一位,许多成功的网站和APP都基于 Django. Django 是一个开放源代码的Web应用框架,由 P ...
- 第五十八篇、iOS 微信聊天发送小视频的秘密
对于播放视频,大家应该一开始就想到比较方便快捷使用简单的MPMoviePlayerController类,确实用这个苹果官方为我们包装好了的 API 确实有很多事情都不用我们烦心,我们可以很快的做出一 ...
- 第十八篇 ANDROID的声音管理系统及服务
声音管理系统用来实现声音的输入和输出.声音的控制和路由等功能,包括主和各种音源的音量调节.声音焦点控制,声音外设的检测和状态管理,声音源输入和输出的策略管理.音效的播放.音轨设置和播放.录音设置 ...
- Python学习第十八篇——低耦合函数设计思想
import json 2 def greet_user(filename): 3 try: 4 with open(filename) as f_obj: 5 username = json.loa ...
- SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot18-scheduling/ 本文出自方志朋的博客 ...
- 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境
1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...
随机推荐
- java接口定义的静态方法和默认如何在类实现的时候使用
在 JDK1.8,允许我们给接口添加两种非抽象的方法实现: 1.默认方法,添加 default 修饰即可: 2.静态方法,使用 static 修饰:示例如下: 这样可以实现接口的增强,那我们在类实现接 ...
- 《计算机图形学》2.1.4 彩色CRT监视器
CRT监视器利用能发射不同颜色光的荧光层的组合来显示彩色图形.不同荧光层的发射光组合起来,可以生成一种按其比例而定的可见颜色. 显示彩色图形的一种方法是在屏幕上涂上多层不同的荧光粉.发射颜色由电子束在 ...
- php文件的处理和操作
好长时间没有看php手册了,有些关于文件操作方面的知识点发现从没有学过,现补习一下,顺便整理一下: 1.文件的打开:fopen() 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪 ...
- 【软件分析与挖掘】An Empirical Study of Bugs in Build Process
摘要 对软件构建过程中所产生的错误(build process bugs)进行实证研究. 5个开源项目:CXF, Camel, Felix,Struts, and Tuscany. 把build pr ...
- C++中三种创建对象的方法【转】
我们都知道C++中有三种创建对象的方法,如下: #include <iostream> using namespace std; class A { private: int n; pub ...
- css笔记 - 张鑫旭css课程笔记之 vertical-align 篇
支持负值的属性: margin letter-spacing word-spacing vertical-align 元素vertical-align垂直对齐的位置与前后元素都没有关系元素vertic ...
- JS - 常用效果代码库 (四)
1.首字母大写示例: var value = “一段文本或一个参数”; value = value.toString() return value.charAt(0).toUpperCase() + ...
- 【VI】如何再执行上一个(历史)命令(已解决)
输入命令提示符( : )+ 上下箭头(<Up/Down>键) 输入 :his 或者 :history 查看历史
- sencha touch datepicker/datepickerfield(时间选择控件)扩展(废弃 仅参考)
参考资料:https://market.sencha.com/extensions/datetimepicker 上面的扩展在2.2有些问题,参考源码重新写了一个 TimePicker: Ext.de ...
- SQLite 3的中文读写
调用sqlite3_open函数默认创建的数据库encoding=UTF-8,执行sqlite3_exec时需要将对应的字符串转换为UTF-8格式多字节字符串.比如: sqlite3* db; aut ...