第十八篇:融汇贯通--谈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 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...
随机推荐
- odbc数据源for mysql
1. 下载mysql适配器并安装 mysql-connector-odbc-3.51.20-win32.exe 2. 配置数据源 “开始” ->”管理工具“ -> “数据源(ODBC)”- ...
- Android学习之BitMap用法实例
下面简单说明了BitMap的用法: 从服务器下载一张图片,显示在ImageView控件上,并将该图片保存在移动设备的SD上. // 根据网络URL获取输入流 public InputStream ge ...
- thinkphp3.2 导航高亮显示
Controller $action = CONTROLLER_NAME."/".ACTION_NAME; //获取当前页面的‘控制器/操作方法’: $this->assig ...
- 计算完成率 SQL
计算完成率 SQL ,), ,) ) AS XX_完成率
- java高级---->Thread之ExecutorService的使用
今天我们通过实例来学习一下ExecutorService的用法.我徒然学会了抗拒热闹,却还来不及透悟真正的冷清. ExecutorService的简单实例 一.ExecutorService的简单使用 ...
- 解决Devexpress ChartControl的CalcHitInfo当中SeriesPoint为Null的问题
Winform程序 ChartControl的RuntimeHitTesting属性一定要设为True. Line Series markers的Visible一定要弄成True.CalcHitInf ...
- linux下文件描述符的介绍
当某个程序打开文件时,操作系统返回相应的文件描述符,程序为了处理该文件必须引用此描述符.所谓的文件描述符是一个低级的正整数.最前面的三个文件描述符(0,1,2)分别与标准输入(stdin),标准输出( ...
- LeetCode 27 Remove Element (移除数组中指定元素)
题目链接: https://leetcode.com/problems/remove-element/?tab=Description Problem : 移除数组中给定target的元素,返回剩 ...
- Sencha Touch 实战开发培训 视频教程 第二期 第八节 (完结)
2014.4.23 晚上8:00左右开课. 本节课耗时超长,因为演示过程中出现了一些小错误,所以耗时接近2小时. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 开发cord ...
- 应用程序创建自己的奔溃转储(crash dump)文件
1.注册自定义的UnhandledExceptionFilter,C/C++ Runtime Library下需要注意自定义handler被移除(hook kernel32.dll的SetUnhand ...