usb video class
- 格式:pdf
- 大小:523.03 KB
- 文档页数:9
USB VIDEO CLASS标准研究CJ-7.3-31V1.0 普天信息技术研究院200X年X月X日修订历史记录编制审查审核批准文档评审负责人:参加评审人员:目录1文档介绍 (4)1.1 目的 (4)1.2 范围 (4)1.3 参考文档 (4)1.4 术语与缩写解释 (4)2功能特性 (6)2.1 视频接口分类 (6)2.2 视频接口子类和协议 (6)2.3 视频功能技术 (6)2.4 操作模式(OPERATIONAL MODEL) (8)2.4.1视频接口集合 (8)2.4.2视频控制接口 (8)2.4.3视频流接口(videostreaming interface) (9)2.4.4控制传输和请求处理 (10)3描述符 (11)3.1 描述符L AYOUT O VERVIEW (11)3.2 设备描述符 (12)3.3 D EVI CE_Q UALIFIER 描述符 (13)3.4 配置描述符 (13)3.5 其它速度配置描述符(O THER_S PEED_C ONFIGURATION D ESCRIPTOR) (13)3.6 接口联合描述符 (13)3.7 视频控制接口描述符 (13)3.8 视频控制端点描述符 (14)3.9 视频流接口描述符 (14)3.10 视频流端点描述符 (15)3.11 字符串描述符 (15)4特殊类请求 ................................................................................. 错误!未定义书签。
4.1 请求L AYOUT (16)4.1.1Set请求 (16)4.1.2Get请求 (17)4.2 视频控制请求 (19)4.3 视频流请求 (19)1文档介绍1.1目的这篇文档主要描述了一个视频流设备(video streaming device)要满足USB视频分类规范(USB video class specification)必须具有的最低性能和特性。
uvc 协议UVC(USB Video Class)协议是指一种基于USB接口的视频传输标准。
UVC协议使视频设备能够通过USB接口连接到计算机,并通过该接口传输视频数据。
下面我们将分为三个部分介绍UVC协议的基本原理、优势以及应用领域。
首先,UVC协议的基本原理是将视频设备的视频采集功能和计算机的视频处理功能进行分离,通过USB接口进行数据传输。
这样一来,视频设备只需要负责采集视频数据并进行压缩,而计算机可以通过UVC驱动程序来识别并配置视频设备,接收视频数据并进行解压,最终将视频在显示器上显示出来。
其次,UVC协议的优势主要体现在以下几个方面。
首先,UVC协议的标准化使得厂商可以按照统一的规范设计和生产视频设备,提高了产品的兼容性和互操作性。
其次,UVC协议基于USB接口,无需额外的电源线,插拔方便,适用于笔记本电脑、智能手机等便携式设备。
再次,UVC协议的实时传输能力较强,能够满足高清视频的传输要求。
最后,UVC协议相对简单,易于开发和维护。
这使得许多第三方开发者可以针对UVC协议开发相关的应用软件和硬件设备。
最后,UVC协议在各个领域都有广泛的应用。
首先,在视频会议领域,UVC协议使得摄像头可以通过USB接口直接连接到计算机,减少了传统视频会议设备的复杂性和成本。
其次,在监控领域,UVC协议可以用于实时视频监控系统,便携式监控设备等。
再次,在医疗领域,UVC协议可以使用在内窥镜、手术助手等医疗设备上,用于图像采集和传输。
此外,UVC协议还可以用于虚拟现实、视频教育、智能相机等领域。
综上所述,UVC协议是一种基于USB接口的视频传输标准,通过该协议视频设备可以方便地连接到计算机,并进行数据传输。
UVC协议不仅提高了视频设备的兼容性和互操作性,同时也在各个领域得到广泛应用。
随着技术的不断发展,UVC协议将进一步推动视频设备的普及和应用的创新。
UVCUSBVIDEOCLASS协议规范篇一:嵌入式Linux下Camera编程--V4L2最近有个需求,要在ARM Linux上实现USB Camera 拍照功能。
0. 背景知识:首先要确认的是,Kernel是否支持USB Camera。
因为Linux 下,USB协议除了电气协议和标准,还有很多Class。
这些Class就是为了支持和定义某一类设备接口和交互数据格式。
只要符合这类标准,则不同厂商的USB设备,不需要特定的driver就能在Linux下使用。
例如:USB Input class,则使所有输入设备都可以直接使用。
还有类似Audio Class,Pring Class,Mass Storage Class, video class等。
其中Video Class 就是我们常说的UVC(USB Video Class). 只要USB Camera符合UVC标准。
理论上在2.6 Kernel Linux 就可以正常使用。
网络上有人谈到怎样判断是否UVC Camera设备:#lsusbBus 001 Device 010: ID 046d:0825 Logitech, Inc.#lsusb -d 046d:0825 -v | grep "14 Video"如果出现:bInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 VideobInterfaceClass 14 Video则说明是支持UVC.1. Kernel配置:Device Drivers ---> <*> Multimedia support ---><M>Video For LinuxDevice Drivers ---> <*> Multimedia support ---> [*]Video captureadapters ---> [*]V4L USBdevices ---> <M>USB Video Class (UVC)--- V4L USB devices : 这里还有很多特定厂商的driver.可供选择。
USB Video Class及其实现1 Video Class 基础概念Usb协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。
这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC class。
此外还包括Audio Class, Print Class等等。
理论上说,即使没有这些Class,通过专用驱动也能够实现各种各样的应用功能。
但是,正如Mass Storage Class的使用,使得各个厂商生产的U盘都能通过操作系统自带的统一的驱动程序来使用,对U盘的普及使用起了极大的推动作用,制定其它这些Class也是为了同样的目的。
Video Class 协议的目的是给USB接口的视频设备提供一个统一的数据交换规范。
最初版本是在2003年9月才添加到USB Class规范中的,1.1的版本更是在2005年才发布。
相比之下,Mass Storage Class 早在1998年就发布了。
支持Video Class协议的多媒体芯片也是在2005年才陆续发布。
所以USB 视频设备目前的现状是,在设备一端,多数依旧还采用原先的各种包含通用USB功能的多媒体处理芯片,主机端需要安装专用的驱动程序,基本上各个产品之间不具备兼容性。
甚至对于操作系统而言,也只有在XP的SP2以后,才包含了对通用的Video class协议的支持。
所以即使是某些多媒体设备(比如Logitech 最新的几款摄像头)包含了对Video Class的支持,在Win2000等操作系统上依然需要安装驱动程序。
不过,应该说使用Video Class无疑会是一个趋势,在相应的多媒体芯片陆续投入市场后,支持Video Class 的多媒体设备应该会在一两年内会迅速普及开来。
除了在硬件上通过相应的多媒体芯片支持Video Class的设备以外,对于包含了操作系统的智能手机,当然也可以在手机端通过驱动程序来实现对Video Class的支持,就好像原先支持任何一种专用的USB 驱动一样。
_____________________________________________________________________________________ HuddleCamHDGO_____________________________________________________________________________________All in one webcamInstallation and Operation ManualPrecautions___________________________________________________Safety Tips______________________________________________________•Please be aware any deviation from these tips may void your warranty•Please read this manual carefully before using the camera.•Avoid damage from stress, violent vibration or liquid intrusion during transportation, storage, or installation.•Take care of the camera during installation to prevent damage to the camera case, ports, lens, or tilt mechanism.•Keep the camera away from strong electromagnetic sources.•Do not aim the camera at bright light sources (e.g. bright lights, the sun, etc.) for extended periods of time.•Do not clean the camera with any active chemicals or corrosive detergents.•Do not disassemble the camera or any of the camera’s components. If problems arise, please contact your authorized HuddleCamHD dealer.•After long term operation, moving components may wear down. Please contact your authorized HuddleCamHD dealer for repair.What’s in the Box___________________________________________ Supplied Hardware______________________________________________•HuddleCamHD GOo Camerao Microphoneo Speaker•USB 2.0 Mini USB cable•This User ManualPhysical Description ________________________________________ Front View of the Camera_______________________________________1234567891.360° Omni-Directional Microphone2.HD Wide-Angle Lens3.Camera Status Light (Active / Inactive)4.Audio Status Light (Muted / Unmuted)5.Volume Up Button6.Volume Down Button7.Microphone Mute Button (Toggle On / Off)8.SpeakerB 2.0 Mini PortConnection Diagram________________________________________Status Light Indicators _____________________________________•Camera Status Light (3)o Green Light: Camera is liveo No Light: Camera is not being used currently•Audio Status Light (4)o Green Light: Microphone and Speaker are live and not mutedo Red Light: Microphone is muted and Speaker is liveo Green Light Slow Flash: Speaker has been muted and is Microphone is liveo Red & Green Light Slow Flash: Speaker is muted and Microphone is mutedo Green Light Flash:Volume “+” or “-“ is being changedOperating Instructions_____________________________________ USB Connection_________________________________________________1.Connect Mini USB2.0 cable to bottom of device and your computer2.Wait for automatic UVC driver installation for use (This may take several minutes to complete)3.Open your favorite software of choice to begin interacting with your HuddleCamHD GOUSB Connectivity Notes_______________________________ All HuddleCamHD cameras utilize the UVC (USB Video Class) drivers that are built into Windows, Mac OS and Linux to bring HD video to your PC via your device’s USB port.When your device successfully recognizes the camera, your device will register the HuddleCam as an “imaging device”. You can see this in Windows Device Manager program (type “device manager” into the Windows search tool)If your PC has not connected to or has not recognized the HuddleCam as an imaging device (in which case, you may see a new “unknown device”, “Westbridge” or “CYTFX3” labeled device show up in Device Manager’s “Universal Serial Bus Controllers” section rather than in the “Imaging Devices” section), the HuddleCam will not b e available to programs that utilize a camera. In this case, try restarting the device and reconnecting the camera via USB – and to a different available USB port, if possible.•USB 3.0 ports are backwards compatible with USB 2.0 devices.•External USB hubs should be avoided (i.e. give the camera its own USB port on the device) as they are not well suited to transmitting HD video reliably.•USB extension systems must be fully compatible with the version of USB that you are using and must utilize an external power supply, when required.•Always connect the HuddleCam directly to the device to associate the UVC drivers before attempting to use any extension system.•USB power saving settings in the device’s operating system should be turned off completely for reliable USB camera connectivity.If you experience any issues that you cannot solve or have general operations questions please contact HuddleCamHD support via or*********************** for further assistance,。
uvc协议UVC(USB Video Class)协议是一种用于USB设备传输视频数据的标准协议。
它定义了视频数据的传输格式、数据帧的封装方式以及设备和主机之间的通信规则,使得各种视频设备能够通过USB接口与电脑等主机设备进行连接和通信。
UVC协议的首要作用是定义了视频数据的传输格式。
通过UVC协议,视频设备可以将采集到的图像数据以一种标准化的格式进行封装,从而保证了视频数据的兼容性和可靠性。
无论是摄像头、监控设备还是其他视频设备,只要遵循UVC协议,就能够保证其视频数据是以统一的格式进行传输的,从而方便其它设备的接收和处理。
其次,UVC协议也定义了视频数据的封装方式。
视频数据在传输过程中通常是以数据帧(frame)的形式进行的,而UVC协议详细规定了视频数据帧的结构和解析方式,包括数据帧的大小、帧率、帧头信息等。
这样一来,设备和主机之间就可以通过解析这些帧头信息来正确地解析和处理视频数据,实现稳定和高效的视频传输。
此外,UVC协议还规定了设备和主机之间的通信规则。
它通过定义一组命令和控制接口,使主机能够与设备进行双向通信。
主机可以向设备发送命令,控制设备的配置、参数设置以及采集起始、停止等操作;同时,设备也可以向主机发送各种状态和事件通知,例如设备的插拔、视频格式变化等。
通过这种通信机制,主机和设备之间可以进行灵活的控制和交互,以满足各种应用场景的需求。
最后,UVC协议还支持各种常见的视频编解码器和传输方式,包括MJPEG、H.264等。
这样一来,UVC设备可以直接将采集到的原始视频数据进行压缩编码,并将其封装成标准的视频流进行传输,从而大大减小了数据的传输量和带宽占用。
总的来说,UVC协议是一种非常重要的视频传输协议,它在保证设备的兼容性和灵活性的同时,也保证了视频数据的稳定和高效传输。
借助UVC协议,用户可以方便地将各种视频设备与主机连接起来,实现高质量的视频采集和传输,满足不同应用场景中视频传输的需求。
uvc 编码格式全文共四篇示例,供读者参考第一篇示例:UVC(USB Video Class)是一种用于设备(例如摄像头)与计算机之间进行视频通信的协议。
为了确保设备能够在多个操作系统和软件应用程序中进行兼容性,UVC定义了一种统一的视频编码格式。
在UVC标准中,视频编码格式有一定的要求,以保证设备之间能够进行有效的通信。
UVC编码格式通常包括以下几种常见的视频编码标准:MJPG (Motion JPEG)、YUY2和H.264。
这些编码格式在不同情况下有各自的优势和适用场景。
MJPG是最常见的视频编码格式之一,它使用每个帧单独进行JPEG压缩的方式来编码视频。
虽然MJPG的压缩比不高,但它在处理速度和画质上有很好的平衡,适用于实时视频传输和录制。
YUY2是一种较为简单的颜色编码格式,它使用16位位图来表示每个像素的颜色。
与MJPG相比,YUY2在画质和压缩比方面略有优势,但一般不适用于实时视频传输。
H.264是一种高级视频编码标准,它采用了一系列先进的压缩技术来降低视频数据量,从而实现更高的压缩比和更好的画质。
H.264编码格式适用于高清视频传输和存储,但在处理速度上有一定的要求。
除了以上介绍的几种编码格式外,UVC还可以支持其他一些视频编码格式,如MPEG-4、VC-1等。
这些编码格式在不同场景下有各自的优势和适用性,用户可以根据需要来选择合适的编码格式。
UVC编码格式在设备间视频通信中发挥着非常重要的作用。
通过统一的编码格式,不同设备之间可以实现更好的兼容性和互操作性,使视频通信变得更加简便和高效。
未来,随着技术的不断发展和进步,UVC编码格式将会进一步完善和优化,为视频通信领域带来更多的创新和可能性。
第二篇示例:UVC编码格式是指USB视频类(UVC)设备使用的视频编码格式。
UVC是一种USB视频设备的标准,它允许视频设备以一种标准化的方式与计算机或其他设备进行通信。
视频的编码格式是非常关键的部分,它决定了视频传输的质量和兼容性。
Linux摄像头驱动学习之:(四)UVC-摄像头驱动框架分析UVC: USB Video ClassUVC驱动:drivers\media\video\uvc\uvc_driver.c分析:1. usb_register(&uvc_driver.driver);2. uvc_probeuvc_register_videovdev = video_device_alloc();vdev->fops = &uvc_fops;video_register_device在下载 uvc specification,UVC 1.5 Class specification.pdf : 有详细描述USB_Video_Example 1.5.pdf : 有⽰例通过VideoControl Interface来控制,通过VideoStreaming Interface来读视频数据,VC⾥含有多个Unit/Terminal等功能模块,可以通过访问这些模块进⾏控制,⽐如调亮度分析UVC驱动调⽤过程:const struct v4l2_file_operations uvc_fops = {.owner = THIS_MODULE,.open = uvc_v4l2_open,.release = uvc_v4l2_release,.ioctl = uvc_v4l2_ioctl,.read = uvc_v4l2_read,.mmap = uvc_v4l2_mmap,.poll = uvc_v4l2_poll,};1. open:uvc_v4l2_open2. VIDIOC_QUERYCAP // video->streaming->type 应该是在设备被枚举时分析描述符时设置的if (video->streaming->type == V4L2_BUF_TYPE_VIDEO_CAPTURE)cap->capabilities = V4L2_CAP_VIDEO_CAPTURE| V4L2_CAP_STREAMING;elsecap->capabilities = V4L2_CAP_VIDEO_OUTPUT| V4L2_CAP_STREAMING;3. VIDIOC_ENUM_FMT // format数组应是在设备被枚举时设置的format = &video->streaming->format[fmt->index];4. VIDIOC_G_FMTuvc_v4l2_get_format // USB摄像头⽀持多种格式fromat, 每种格式下有多种frame(⽐如分辨率)struct uvc_format *format = video->streaming->cur_format;struct uvc_frame *frame = video->streaming->cur_frame;5. VIDIOC_TRY_FMTuvc_v4l2_try_format/* Check if the hardware supports the requested format. *//* Find the closest image size. The distance between image sizes is* the size in pixels of the non-overlapping regions between the* requested size and the frame-specified size.*/6. VIDIOC_S_FMT // 只是把参数保存起来,还没有发给USB摄像头uvc_v4l2_set_formatuvc_v4l2_try_formatvideo->streaming->cur_format = format;video->streaming->cur_frame = frame;7. VIDIOC_REQBUFSuvc_alloc_buffersfor (; nbuffers > 0; --nbuffers) {mem = vmalloc_32(nbuffers * bufsize);if (mem != NULL)break;}8. VIDIOC_QUERYBUFuvc_query_buffer__uvc_query_buffermemcpy(v4l2_buf, &buf->buf, sizeof *v4l2_buf); // 复制参数9. mmapuvc_v4l2_mmap10. VIDIOC_QBUFuvc_queue_bufferlist_add_tail(&buf->stream, &queue->mainqueue);list_add_tail(&buf->queue, &queue->irqqueue);11. VIDIOC_STREAMONuvc_video_enable(video, 1) // 把所设置的参数发给硬件,然后启动摄像头/* Commit the streaming parameters. */uvc_commit_videouvc_set_video_ctrl /* 设置格式fromat, frame */ret = __uvc_query_ctrl(video->dev /* 哪⼀个USB设备 */, SET_CUR, 0,video->streaming->intfnum /* 哪⼀个接⼝: VS */,probe ? VS_PROBE_CONTROL : VS_COMMIT_CONTROL, data, size,uvc_timeout_param);/* 启动:Initialize isochronous/bulk URBs and allocate transfer buffers. */uvc_init_video(video, GFP_KERNEL);uvc_init_video_isoc / uvc_init_video_bulkurb->complete = uvc_video_complete; (收到数据后此函数被调⽤,它⼜调⽤video->decode(urb, video, buf); ==>uvc_video_decode_isoc/uvc_video_encode_bulk => uvc_queue_next_buffer => wake_up(&buf->wait);)usb_submit_urb12. polluvc_v4l2_polluvc_queue_pollpoll_wait(file, &buf->wait, wait); // 休眠等待有数据13. VIDIOC_DQBUFuvc_dequeue_bufferlist_del(&buf->stream);14. VIDIOC_STREAMOFFuvc_video_enable(video, 0);usb_kill_urb(urb);usb_free_urb(urb);分析设置亮度过程:ioctl: VIDIOC_S_CTRLuvc_ctrl_setuvc_ctrl_commit__uvc_ctrl_commit(video, 0);uvc_ctrl_commit_entity(video->dev, entity, rollback);ret = uvc_query_ctrl(dev /* 哪⼀个USB设备 */, SET_CUR, ctrl->entity->id /* 哪⼀个unit/terminal */,dev->intfnum /* 哪⼀个接⼝: VC interface */, ctrl->info->selector,uvc_ctrl_data(ctrl, UVC_CTRL_DATA_CURRENT),ctrl->info->size);总结:1. UVC设备有2个interface: VideoControl Interface, VideoStreaming Interface2. VideoControl Interface⽤于控制,⽐如设置亮度。
uvc 编码格式-概述说明以及解释1.引言1.1 概述UVC编码格式是一种常用于视频传输和图像处理的标准格式。
UVC 代表USB视频类设备,是一种广泛应用于摄像头、视频采集卡等设备的标准。
它定义了视频流的编码和传输方式,使得不同设备之间可以实现视频数据的兼容性。
UVC编码格式的主要目的是提供一种统一的视频数据格式,以便不同设备之间能够实现互通。
通过使用统一的编码格式,可以避免不同设备之间的格式不兼容问题,使得视频数据能够在各种设备上流畅传输和播放。
相比其他编码格式,UVC编码格式具有很多优点。
首先,它具有较高的压缩比,可以大大减小视频文件的大小,节省存储空间。
其次,UVC编码格式具有较低的延迟,可以实现实时的视频传输,适用于对传输速度要求较高的应用场景。
此外,UVC编码格式还具有良好的兼容性,可以在各种设备和操作系统上进行使用。
未来,UVC编码格式有望进一步发展。
随着视频技术的不断创新和发展,对于高清、超高清视频的需求也越来越大。
因此,未来的UVC编码格式可能会更加高效和先进,能够更好地满足大规模视频数据传输和处理的需求。
同时,随着人工智能和深度学习技术的发展,UVC编码格式可能还会引入更多的智能特性,例如实时目标识别和图像分析,进一步扩展其应用领域。
综上所述,UVC编码格式是一种重要的视频编码标准,具有广泛的应用前景和潜力。
通过统一和先进的编码方式,UVC编码格式为视频传输和图像处理提供了更加便捷和高效的解决方案。
随着技术的不断进步,相信UVC编码格式将在未来有更加广泛的应用和发展。
1.2 文章结构文章结构:本文共分为引言、正文和结论三个部分。
引言部分主要是对文章的背景和目的进行介绍。
首先概述了UVC编码格式的重要性和应用领域。
其次介绍了文章的结构和内容安排。
最后说明了本文旨在对UVC编码格式进行深入探讨,分析其定义和特点,并展望其未来的发展。
正文部分则详细阐述了UVC编码格式的定义和特点。
首先明确了UVC 编码格式的具体含义以及其在视频压缩领域的作用,包括压缩比、图像质量等方面。
USB Video Class及其实现1 Video Class基础概念Usb协议中,除了通用的软硬件电气接口规范等,还包含了各种各样的Class协议,用来为不同的功能定义各自的标准接口和具体的总线上的数据交互格式和内容。
这些Class协议的数量非常多,最常见的比如支持U盘功能的Mass Storage Class,以及通用的数据交换协议:CDC class。
此外还包括Audio Class, Print Class等等。
理论上说,即使没有这些Class,通过专用驱动也能够实现各种各样的应用功能。
但是,正如Mass Storage Class的使用,使得各个厂商生产的U盘都能通过操作系统自带的统一的驱动程序来使用,对U盘的普及使用起了极大的推动作用,制定其它这些Class也是为了同样的目的。
Video Class 协议的目的是给USB接口的视频设备提供一个统一的数据交换规范。
最初版本是在2003年9月才添加到USB Class规范中的,1.1的版本更是在2005年才发布。
相比之下,Mass Storage Class 早在1998年就发布了。
支持Video Class协议的多媒体芯片也是在2005年才陆续发布。
所以USB 视频设备目前的现状是,在设备一端,多数依旧还采用原先的各种包含通用USB功能的多媒体处理芯片,主机端需要安装专用的驱动程序,基本上各个产品之间不具备兼容性。
甚至对于操作系统而言,也只有在XP的SP2以后,才包含了对通用的Video class协议的支持。
所以即使是某些多媒体设备(比如Logitech最新的几款摄像头)包含了对Video Class的支持,在Win2000等操作系统上依然需要安装驱动程序。
不过,应该说使用Video Class无疑会是一个趋势,在相应的多媒体芯片陆续投入市场后,支持Video Class的多媒体设备应该会在一两年内会迅速普及开来。
除了在硬件上通过相应的多媒体芯片支持Video Class的设备以外,对于包含了操作系统的智能手机,当然也可以在手机端通过驱动程序来实现对Video Class的支持,就好像原先支持任何一种专用的USB驱动一样。
只不过数据交换的格式不是自己随意制订的,而是按照Video Class的规范来实现的。
由于目前支持Video Class的设备还很少,所以在Linux上还没有开源的Video Class的主机端驱动,设备端的Video Cl ass驱动就更没有见到开源的代码了。
本文在介绍USB Video Class架构的基础上,主要是探讨Linux操作系统下设备端Video Class驱动的实现。
不过在其它平台下的实现思路应该也是类似的。
2 USB Video Class 协议结构2.1 设备拓扑结构在拓扑结构上Video Class 将视频设备抽象为几个主要的硬件功能模块:Ø 输入端点 Input TerminalØ 输出端点 Output TerminalØ camera端点 Camera TerminalØ 选择单元 Selector UnitØ 处理单元 Processing UnitØ 拓展单元 Extension Unit下图是一幅摘自USB_Video_Example 1.1.pdf ()的拓扑结构示例图:图1 USB Video Camera Topology Example从sensor和另一个复合视频设备得到的数据流由IT 和 CT输入,经SU选择送PU处理,再由OT绑定到指定的USB端点。
最后由USB端点与主机交互将数据发送到host端。
在实际设备中,可能没有其中的某些功能模块,也可能其中的几个模块都是由同一硬件来完成的。
2.2 协议层次结构上图中,左半部的框架组成了Video Class中的控制接口界面,右半部的框架组成了视频流传输接口界面。
这两部分购成了Video Class的主要协议框架。
2.2.1 Descriptor Layout与Class相关的信息,当然是主机端通过向设备端获取描述符(Descriptor)来得到的, 下图摘自USB_Video_Class_1.1.pdf , 给出了一个Video Class协议描述符应用示例的Layout。
图2 Video Camera Descriptor Layout Example可以看到,在Descriptor Layout中,在标准描述符里,除了Device Descriptor, Configuration Descriptor, Interface Descriptor, Endpoint Descriptor,String Descriptor以外,还有一个USB2.0 协议中后期才新加的IAD 即Interface Association Descriptor,用来描述多个相关Interface之间的关系,在Video Class中,IAD用来描述VideoControl Interface和VideoStreaming Interface之间的关系。
图中深色的部分就是Video Class 协议相关的专用描述符(Class Specific Descriptor)了。
主要就是对硬件图像采集和处理模块的物理拓扑结构和功能的描述,以及对视频传输格式(包括编码格式,码率等等视频图像相关参数)的描述。
通过从设备处获得这些描述符,主机可以得知视频设备端的结构及其所支持的功能。
而控制这些功能模块,对数据源和数据流进行配置,则需要通过Request来完成。
2.3 RequestRequest是由主机向设备端发起的功能请求,包括所有USB设备都需要支持的Standard Device Requests 和与Class相关的Class Specific Requests :2.3.1 Standard Device Requests下图列出了USB Spec中规定的标准Request图3 Standard Device Requests这其中,有一部分Request是由USB控制芯片在硬件一级就直接完成的应答工作,比如SET_ADDRESS,有些则需要由软件来做进一步的处理,比如Set_Configuration。
软硬件的这种任务的划分还与具体的硬件芯片相关。
因为这部分是标准协议相关,本文就不详述。
2.3.2 Class Specific RequestsClass Specific Requests的数据结构Layout与标准Request是一样的,只是内容不同而已。
VideoClass的Class Specific Requests主要根据Interface分为两类,其下又根据具体功能模块做进一步的划分:Ø V i deoControl Requestsl Camera Terminal Control Requestsl Selector Unit Control Requestsl Processing Unit Control Requestsl Extension Unit Control RequestsØ VideoStreaming Requestsl Interface Control Requests这其中,Interface Control Requests因为是用来在主机和设备之间协商数据交互格式和分辨率,流量等信息的,所以一般来说是必须实现的。
而Camera Terminal Control Requests 和 Processing Unit Control Requests中的内容,则是目前常用的即时通讯软件如MSN / QQ 等在其视频控制界面上集成的控制参数。
其中,Camera Terminal Control Requests包含了对曝光时间,曝光模式,对焦,变焦,平移等sensor获取数据阶段时的参数控制。
而Processing Unit Control Requests中则包含了亮度,增益,色调,对比度,白平衡等等sensor在获取到图像数据后,图像处理阶段的相关参数。
图4 Win2000上MSN的视频控制界面之一不过实际上,以上两者的划分在硬件层次并不是绝对的。
很多参数的控制在sensor硬件级别上是同一层次的。
不过,将这些功能抽象成这两类,正如在硬件的拓扑结构上将功能模块抽象出来一样,有利于通用化的程序设计。
3 USB Video Class Linux设备端的实现3.1 驱动架构3.1.1 平台及软件基础本文讨论的是USB Video Class在Linux操作系统上的设备端实现。
具体是在Omap平台上,基于USB Gadget的驱动架构来实现的。
USB Gadget驱动分为两层,底层是处理与USB控制芯片硬件相关的内容,对上层屏蔽了大部分硬件相关的设置,并处理了一部分标准Request和EP0相关的标准操作流程。
上层则是Class相关的部分,官方的Gadget 驱动中,已经包含了File Storage(U盘功能),RNDIS(USB网卡功能)等的支持。
考虑到Video Class的数据交换过程与File Storage有很多相似的地方,所以本文在Video Class的实现中,在大的框架上仿照了File Storage驱动的架构。
3.1.2 基本框架和数据流程在本文实现的Video Class驱动中,整体的框架基本上分为两大部分。
一部分是负责处理模块的初始化过程,并负责处理Usb总线上的Descriptor和Requests的交互过程。
包括USB总线上的控制和查询包的接收,解释,分配和应答。
另一部分,是在初始化过程中启动的一个独立的内核线程。
负责具体的控制指令的执行和图像数据的获取及传输工作。
这其中的许多操作都有可能引起睡眠,或者需要对文件进行操作,因此必须有一个线程做为依托。
模块的流程基本上是这样的:在init函数中向Gadget底层驱动注册VideoClass数据结构。
所有的描述符都定义为全局结构变量,在模块初始化过程中,进一步完成对描述符的填充过程,启动独立的内核线程,并注册EP0的complete回调函数。
在启动的内核线程中打开并初始化camera设备。
将camera设置为默认的参数配置。
读取图像数据并将数据填充到BUF里而后提交Request到VideoStream Interface里的BULK IN端点中。
而后睡眠等待由于数据传送完毕被唤醒或有(异常)Exception发生被唤醒。
如果是数据传送完毕,则继续读取,填充并发送图像数据,如果有异常发生,则转而处理异常。