嵌入式DVR系统设计毕业设计论文.doc

上传人:仙人指路1688 文档编号:3942425 上传时间:2023-03-28 格式:DOC 页数:31 大小:337.50KB
返回 下载 相关 举报
嵌入式DVR系统设计毕业设计论文.doc_第1页
第1页 / 共31页
嵌入式DVR系统设计毕业设计论文.doc_第2页
第2页 / 共31页
嵌入式DVR系统设计毕业设计论文.doc_第3页
第3页 / 共31页
嵌入式DVR系统设计毕业设计论文.doc_第4页
第4页 / 共31页
嵌入式DVR系统设计毕业设计论文.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《嵌入式DVR系统设计毕业设计论文.doc》由会员分享,可在线阅读,更多相关《嵌入式DVR系统设计毕业设计论文.doc(31页珍藏版)》请在三一办公上搜索。

1、摘 要本文提出了一种基于ARM处理器的嵌入式图像视频监控系统的设计方案。本系统采用华为海思Hi3515(ARM926EJ)为处理器,以嵌入式linux做为操作系统,通过基于Video4Linux 的USB 摄像头进行图像采集,最后显示在LCD显示屏。本文首先介绍了视频监控系统的时代背景、实践意义和研究现状,并对嵌入式系统开发的基础理论知识做了简单的介绍,在此基础上分析了视频监控系统的总体结构设计;然后分析linux操作系统的开发技术,包括开发环境的建立、bootloader的移植、linux内核移植和根文件系统的制作,完成了利用USB摄像头采集图像的功能;然后介绍图像在LCD上的显示,并给出了

2、最终的实验结果。关键字:海思Hi3515;视频监控;Video4Linux ;图像采集AbstractThis paper puts forward a designation of embedded images video monitoring system that based on the ARM processor .This system use the huawei haisi (ARM926EJ) as the processor, with embedded Linux as operating system, Through the USB camera that base

3、d on Video4Linux collect images, finally display on LCD screen. This thesis firstly introduces the research background, practical significance,research status and the basic theoretical knowledges of embedded system development on this basis gives the the overall structure desgin of this system;Then

4、it analyses carefully the technology of embedded Linux system involve the development environment,bootloader,Linux kernel and the root file system,and completes the image acquisition by USB camera;After that,it describes how to display the images on LCD and gives the final experimental resultsKeywor

5、ds: haisiHi3515;video monitor;Video4Linux;image collection目 录目 录III1 绪 论11.1 前 言11.2课题研究背景与意义11.2.1课题研究背景11.2.2课题研究意义21.2.3国内外研究现状22 嵌入式系统的选择42.1.1嵌入式系统的分类42.1.2嵌入式系统的选择63.1 Bootloader移植83.1.1 Bootloader介绍83.1.2 U-Boot移植93.2 内核移植113.2.1 移植环境113.2.2 内核移植过程113.3 文件系统移植12移植步骤:124.1 Video4Linux简介134.2 V

6、ideo4linux 编程指南144.2.1.视频编程的流程144.2.2 定义的数据结构及使用函数144.2.3.Video4linux支持的数据结构及其用途154.2.4 Ioctl函数介绍194.3 截取图象的方法204.3.1用mmap(内存映射)方式截取视频204.3.2 直接读设备225 图像在LCD屏上的显示235.1 Framebuffer的介绍235.2 图像由24位图向16位图转换235.3 实物图246 结束语25参考文献26致 谢27 1 绪 论1.1 前 言嵌入式系统(embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,

7、根据英国电机工程师协会的定义,嵌入式系统为控制、监视或辅助设备、机器或用于运作的设备1。随着网络技术和集成电路技术的高速发展,嵌入式系统已经成为IT的一个焦点。嵌入式图像采集系统大量的应用于自动控制、工业生产、军事技术和家用消费电子等各个领域。传统的图像采集方法是采用CCD摄像机获得视频信息,这种方法易于实现,但成本较高。随着ARM系列处理器应用的越来越广泛和基于linux的嵌入式技术的迅速发展,利用linux自身带有的TCP/IP协议来实现远程监控和图像传输已经成为可能。开发具有自主知识产权的嵌入式处理器,嵌入式操作系统和嵌入式高端产品,对我国的民族工业来讲,将有十分重要的战略意义。1.2

8、课题研究背景与意义1.2.1课题研究背景随着计算机技术的不断发展,人类步入网络时代以来,以“信息采集、处理、监控”为核心的视频监控系统越来越广泛地应用于电视会议、可视电话、远程监控、智能交通、智能小区等远程图像传输系统中。传统的视频监控系统一般基于PC机和视频采集卡的形式,传统系统采集的图像品质不高、抗干扰能力差、系统体积大、成本高、携带不便,在远距离通讯、多系统控制中很难实现。而采用基于DSP结合FPGA方式又需投入大量的人力和资金,成本高2。在这种背景下,设计一种轻便小巧的系统来采集传输图像成为市场所需。嵌入式linux操作系统具有可移植性好、网络功能强、有优秀的GUN编译工具支持等优点,

9、linux的开放源代码和免费的优点也使成本大大降低,嵌入式系统把微处理器与其专用软件平台相结合,大大提高了操作系统的效率,采用USB接口的摄像头在一定程度上突出了采样速率高、图像质量高、通用性好的特点。基于上述原因,本文设计了一种新的视频采集处理系统基于ARM和linux的嵌入式视频监控系统。1.2.2课题研究意义本课题研究的是基于嵌入式linux的视频图像采集,利用市场上很常见的中星微系列的USB摄像头来得到现场的图像数据,利用linux内核中的video4linux编程接口函数采集,在PC机上和LCD屏上实现了图像的实时显示。此类视频采集系统对于各个领域都有重要的意义。例如,在日常生活中,

10、视频监控,智能交通和智能小区的发展,生物医学中的X射线成像、染色体分类技术等,卫星遥感图像识别,办公自动化中的门禁系统、手写识别、票据以及人民币的识别,以及工业视觉,虚拟现实等等领域,图像采集都有着极其重要的应用3。在军用方面。图像采集收集的情报通过无线传输到监控指挥中心,为战场行动提供了重要的情报依据,在强大空中侦察下,我军能够及时掌握敌方的大规模行动,其部署和移动很容易暴露,灵活、机动、可靠的情报搜集,战时能起到很好的侦察保障功能,为决策人缘提供有力的决策依据。在不就的将来,也许我们能体验到,当我们在各种需要身份验证和识别时,需要的不再是钥匙、密码,而仅仅是一个摄像头而已。试想,这项技术的

11、发展将会给我们的生活带来多么深远的影响。因此,研究图像采集及其处理有着重大的意义。1.2.3国内外研究现状视频监控系统是安全防范系统的重要组成部分. 目前在国内外市场上,主要有模拟视频监控和数字视频监控类产品. 传统的模拟监控系统技术已非常成熟,性能稳定、应用广泛,但已不能满足人们日益增长的需要. 模拟视频信号的传输工具主要是同轴电缆,通常只适合于小范围的区域监控;系统的扩展能力差,新的设备也很难添加到原有的系统之中;由于各部分独立运作,相互之间的控制协议很难互通,无法形成有效的报警联动,联动只能在有限的范围内进行4。近年来,随着计算机、网络、图像处理以及传输技术的飞速发展,视频监控制技术也有

12、长足的进步,前端一体化、视频数字化、监控网络化、系统集成化是视频监控系统公认的发展方向。本文基于这种发展趋势,提出了1 种性能高效、价格低廉解决方案. 本方案采用PC机、高性能嵌入式设备以及先进的图像处理技术,通过Internet传输图像. 本系统的优点在于:数字监控系统可以在Internet上传输图像数据,基本上不受距离限制,信号不易受干扰,可大幅度提高图像品质和稳定性;使数字化存储成为可能,经过压缩的视频数据可存储在磁盘阵列中或保存在光盘中,查询十分简便快捷;基于嵌入式技术,系统硬件和操作系统捆绑较为紧密,功能专一,因此性能上更稳定,且便于安装、维护,易于实现系统的模块化设计,便于管理3。

13、2 嵌入式系统的选择2.1.1嵌入式系统的分类目前嵌入式操作系统种类繁多,有深嵌入系统,也有浅嵌入式系统;有多任务,也有单任务系统;有实时系统,也有分时系统。其实,嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统如WindowsCE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm0S、sysbian,SmartPhone等。从实时性的角度看,又可以分为两类。一类是面向控制、通信等领域的实时操作系统,如Microsoft公司得windows CE、WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX

14、、ATI的Nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(PDA)、移动电话、机顶盒、电子书、WebPhone等,如现在非常流行的Mierosoft公司的SmartPhone操作系统等等。20世纪80年代,商业化的嵌入式操作系统开始得到蓬勃发展6。目前国内外已有几十种商业操作系统可供选择。目前比较流行的嵌入式操作系统比较多,对其中几类进行介绍如下7:(1)Palm0SPalm0S是一种32位的嵌入式操作系统。PalmOS提供了串行通信接口和红外线传输接口,利用它可以方便地与其它外部设备通信;拥有开放的0S应用程序接口,开发商可根据需要自行开发所需的应用程序

15、。在个人数字助理(PDA)市场上,PalmOS是全球知名、使用人数最多的PDA操作系统。PalmOS是一套具有极强开放性的系统,现在有大约数千种专门为PalmOS编写的应用程序。PalmOS操作系统的一个最大的特点就是省电以及系统资源开销较少,而且第三方应用程序非常丰富。由于PalmOS采用开放式架构,有很多PalmOS的使用者都投入到软件开发工作中,这也是PalmOS操作系统成功的一个重要原因。(2)VxWorksVxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统。它的良好的持续发展能力、高性能的内核以及友好的用户开发环境,使其在嵌入式实时操作系统

16、领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精度技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。VxWorks具有可靠性,良好的实时性,高度灵活的可裁减性等突出特点。(3)uC/OS uC/OS 是美国人Jean Labrosse在1992年开发的一个嵌入式操作系统,并于1998年推出它的升级版本uC/OS 。uC/OS 是一种免费、开放源代码、结构小巧、基于可抢占优先级调度的实时操作系统,其内核提供任务调度与管理、时间管理、任务同步和通信、内存管理和中断服务等功能。uC/OS 主要面向中小型嵌入式系统,具有执行效率高、占

17、用空间小、结构简洁、实时性能优良和可扩展性强等特点,最小内核可编译至2KB,一般情况下占用10KB数量级。它的内核本身并不支持文件系统,但它具有良好的扩展性能,如果需要的话可以自行加入。由于免费、源码开放、规模较小,uC/OS 不仅在众多的商业领域中获得了广泛的应用,而且被很多大学所接纳,作为教学用的嵌入式实时操作系统。(4)嵌入式LinuxLinux现在已经是最为流行的一款开放源代码的操作系统。Linux是1991年由芬兰人Linus Torvalds发明的,从诞生到现在的短短十几年的时间,Linux已经发展成为一个功能强大、设计完善的操作系统,不仅在通用操作系统领域与Windows等商业系

18、统分庭抗争,而且在新兴的嵌入式操作系统领域也获得了飞速的发展。由于Linux系统本身是开放源码的,又是一种多任务、稳定性高、内核可裁减的操作系统,它在嵌入式系统方面大放光芒。在各种嵌入式LinuxOS迅速发展的状况下,Linux在嵌入式系统方面的发展速度和影响是任何一种操作系统不能比的。嵌入式Linux是在标准Linux的基础上针对嵌入式系统进行内核裁减和优化后形成的,使其体积更小、性能更高,同时,由于它是免费的,没有其它商业性嵌入式操作系统需要的许可证费用,所以具有很强的市场竞争力。当前国家对研制自主操作系统大力支持,为源码开放的Linux的推广提供了广阔的发展前景。(5)Windows C

19、EWindows CE是微软公司在嵌入式操作系统市场上的一个重要产品。它最早于1996年开始发行,但是最初并没有取得成功,直到Windows CE 3.0以后他才真正被人们所接受。目前的最新版本为Windows CE.NET。Windows CE是一个32位的多线程、多任务的嵌入式操作系统,它经过压缩,可以移植,能够开发多种企业和客户设备,其操作界面来源于Windows,但Windows CE是基于Win32API重新开发的、新型的信息设备平台。Windows CE具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点,适用于各种嵌入系统和产品。它的模块化设计方式使得系统开发人员

20、和应用开发人员能够为多种多样的产品来定制它。若开发者熟悉Windows开发环境,可以基于Windows CE开发出更好的应用程序。随着嵌入式系统逐渐深入生活,越来越多的嵌入式设备都应用WinCE系统8。2.1.2嵌入式系统的选择多种嵌入式系统各有千秋,但是本课题研究选择了嵌入式Linux系统,因为它在嵌入式领域具有独特的优点。嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式linux既继承了Interlnet上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式Linux的特点是版权费免费;购买费用媒介成本技术支持全世界的

21、自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_Linux Hardhat Linux 等嵌入式Linux支持,实时性能稳定性好安全性好9。Linux做嵌入式的优势,首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持;其次,Linux的内核小、效率高,内核的更新 嵌入式linux速度很快,linux是可以定制的,其系统内核最小只有约134KB。第三,Linux是免费的OS,在价格上极具竞争力。 Linu

22、x还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU。而且性能稳定,裁剪性很好,开发和使用都很容易。很多CPU包括家电业芯片,都开始做Linux的平台移植工作。移植的速度远远超过Java的开发环境。也就是说,如果今天用Linux环境开发产品,那么将来换CPU就不会遇到困扰。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,Toker ring(令牌环网)、光纤甚至卫星的支持。所以Linux很

23、适于做信息家电的开发10。 3 软件平台的设计与实现3.1 Bootloader移植3.1.1 Bootloader介绍系统引导程序通常称为Boot Loader,是在系统复位后执行的第一段软件代码,相当于PC机上的BIOS。通常固化在硬件的某个固态存储结构中,上电后自启动。通过bootloader这段代码,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的bootloader.不过bootloader的发展也趋于支持多种体系结构,

24、现在比较成熟的有一下几种:(1)vivivivi是由韩国Mizi公司专门针对基于ARM处理器的嵌入式系统开发的一种Boot Loader,因为VIVI 目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。VIVI一般有如下作用。 1)把内核(kernel)从Flash复制到RAM,然后启动它; 2)初始化硬件; 3)下载程序并写入Flash; 4)检测目标板。(2)RedBootRedBoot也称红帽子嵌入式调试引导程序。RedBoot 是一个专门为嵌入式系统定制的引导启动工具,最初由Redhat开发,它是基于eCos(Embedded Configurable Oper

25、ating System)的硬件抽象层,同时它继承了eCos的高可靠性、简洁性、可配置性和可移植性等特点。RedBoot集Bootloader、调试、 Flash烧写于一体,支持串口、网络下载,执行嵌入式应用程序。既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(Flash更新、网络启动)。RedBoot支持下载和调试应用程序,开发板可以通过BOOTP/DHCP协议动态配置IP地址,支持跨网段访问。用户可以通过tftp协议下载应用程序和image,或者通过串口用x-modem/y-modem下载。RedBoot支持用GDB(the GNU debugger)通过串口或者网卡调试嵌入

26、式程序,可对gcc编译的程序进行源代码级的调试。相比于简易jtag调试器,它可靠、高速(CPU的 cache打开后,通过网卡tftp下载能达到1Mbps,GDB下载的速度能达到2Mbps)、稳定,用户可通过串口或网卡,以命令行的形式管理 Flash上的image,下载image到Flash。动态配置RedBoot启动的各种参数、启动脚本,上电后RedBoot可自动从Flash或 tftp服务器上下载应用程序执行。(3)U-BootU- Boot是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,它可以运行在基于PowerPC、ARM、MIPS等多种嵌入式开发板上。本linu

27、x系统的启动代码用的是U-Boot。3.1.2 U-Boot移植要移植U-Boot到嵌入式产品中,首先要在宿主机上编译配置U-Boot,将U-Boot源代码编译成为可以在ARM上执行的二进制文件,并烧写到实验箱上才能执行。本实验系统采用将U-Boot烧写到Nand Flash(SMC卡)中进行启动。移植过程如下:(1)在工作目录下解压UBoot输入命令:tar -xjvf u-boot-1.3.1.tar.bz2 (2)进入U-Boot目录,修改Makefile输入以下命令:cd u-boot-1.3.1Vim Makefile为tekkaman2440建立编译项:sbc2410x_confi

28、g: unconfig $(MKCONFIG) $(:_config=) arm arm920t sbc2410x NULL s3c24x0tekkaman2440_config:unconfig $(MKCONFIG) $(:_config=) arm arm920t tekkaman2440 tekkaman s3c24x0各项的意思如下:arm: CPU的架构(ARCH)arm926EJ: CPU的类型(CPU),其对应于cpu/arm926EJ子目录。tekkaman2440: 开发板的型号,对应于board/tekkaman/tekkaman2440目录。tekkaman: 开发者/

29、或经销商(vender)。s3c24x0: 片上系统(SOC)。同时在“ifndef CROSS_COMPILE ”之前加上自己交叉编译器的路径,比如我使用crosstool-0.43制作的基于2.6.24内核和gcc-4.1.1-glibc-2.3.2的ARM9TDMI交叉编译器,则:CROSS_COMPILE=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1.1-glibc-2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu-(3)在/board子目录中建立自己的开发板tekkaman2440目录由于我

30、在上一步板子的开发者/或经销商(vender)中填了 tekkaman ,所以开发板tekkaman2440目录一定要建在/board子目录中的tekkaman目录下 ,否则编译会出错。tekkamanninjaARM9-Host u-boot-1.3.1$ cd boardtekkamanninjaARM9-Host board$ mkdir tekkaman tekkaman/tekkaman2440tekkamanninjaARM9-Host board$ cp -arf sbc2410x/* tekkaman/tekkaman2440/tekkamanninjaARM9-Host bo

31、ard$ cd tekkaman/tekkaman2440/tekkamanninjaARM9-Host tekkaman2440$ mv sbc2410x.c tekkaman2440.c还要修改自己的开发板tekkaman2440目录下的Makefile文件,不然编译时会出错:tekkamanninjaARM9-Host tekkaman2440$ kwrite MakefileCOBJS := tekkaman2440.o flash.o在include/configs/中建立配置头文件tekkamanninjaARM9-Host tekkaman2440$ cd ././.tekkam

32、anninjaARM9-Host u-boot-1.3.1$ cp include/configs/sbc2410x.h include/configs/tekkaman2440.h(4)测试编译能否成功1)配置tekkamanninjaARM9-Host u-boot-1.3.1$ make tekkaman2440_configConfiguring for tekkaman2440 board.2)测试编译tekkamanninjaARM9-Host u-boot-1.3.1$make测试通过后进行下一步3.2 内核移植3.2.1 移植环境交叉编译器:arm-linux-gcc 3.4.

33、1安装交叉编译器3.2.2 内核移植过程(1)下载压缩包:utu-linux_for_s3c2440_V1.5.3-2007-11-5.tar.bz2(2)解压:tar xjvf utu-linux_for_s3c2440_V1.5.3-2007-11-5.tar.bz2(3)配置及编译内核make menuconfig:提供基于Ncurses图形界面的用户配置界面是字符的图形界面, 出现如图所示的界面.(4)修改屏幕偏移由于视频监控系统还设计到LCD屏的显示,所以要修改一下屏幕的偏移:打开:/home/utu-linux_for_s3c2440_V1.5.3/arch/arm/mach-s3

34、c2410/mach-utu2440.c将寄存器3做如下修改即可:.lcdcon3 = S3C2410_LCDCON3_HBPD(55) | S3C2410_LCDCON3_HOZVAL(319) | S3C2410_LCDCON3_HFPD(5),完成内核配置后,执行如下命令:#make ulmage:创建内核镜像文件ulmage,再下载到TFTP中。 在超级终端中执行以下命令即可:run install-kernel图3.1 内核配置界面3.3 文件系统移植移植步骤:(1)拷贝制作yaffs文件下载镜像文件的工具mkyaffsimage到虚拟机/utuLinux/s3c2440下; (2)

35、拷贝文件系统源代码压缩包s3c2440_recover.tar.bz2到虚拟机/utuLinux/s3c2440目录下; (3)解压缩s3c2440_recover.tar.bz2到目录/utuLinux/s3c2440下; (4)输入命令:./mkyaffsimage s3c2440_recover test.yaffs生成test.yaffs,将test.yaffs改名为filesystem.yaffs下载到TFTP中。在超级终端中执行以下命令即可:run install-filesystem4 图像采集程序设计4.1 Video4Linux简介Video4Linux是linux中关于视频

36、设备的内核驱动,他针对视频设备的应用程序编程提供一系列接口函数,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集、AM/FM广播、频道切换等功能,在远程会议、可视电话、视频监控系统中有着广泛的应用。在linux下,所有外设都被看成是一种特殊的文件,称之设备文件,这里只要针对的设备文件是/dev/video0,进行视频图像采集方面的程序设计。基于Vide04Linux的图像采集的程序流程如图4.1所示。开始开启设备获取设备信息和图像信息对采集缓冲区进行内存映射捕捉视频数据图像数据处理采集中止?关闭设备结束NY 图4.1 图像采集流程图4.2 Video4linux 编程指南4.2.1.视

37、频编程的流程(1)打开视频设备:(2)读取设备信息(3)更改设备当前设置(可以不做)(4)进行视频采集,两种方法:1)内存映射2)直接从设备读取(5)对采集的视频进行处理(6)关闭视频设备。4.2.2 定义的数据结构及使用函数struct _v4l_structint fd;struct video_capability capability;struct video_buffer buffer;struct video_window window;struct video_channel channel8;struct video_picture picture;struct video_m

38、map mmap;struct video_mbuf mbuf;unsigned char *map;typedef struct _v4l_struct v4l_device;extern int v4l_open(char *, v4l_device *);extern int v4l_close(v4l_device *);extern int v4l_get_capability(v4l_device *);extern int v4l_set_norm(v4l_device *, int);extern int v4l_get_picture(v4l_device *);extern

39、 int v4l_grab_init(v4l_device *, int, int);extern int v4l_grab_frame(v4l_device *, int);extern int v4l_grab_sync(v4l_device *);extern int v4l_mmap_init(v4l_device *);extern int v4l_get_mbuf(v4l_device *);extern int v4l_get_picture(v4l_device *);extern int v4l_grab_picture(v4l_device *, unsigned int)

40、;extern int v4l_set_buffer(v4l_device *);extern int v4l_get_buffer(v4l_device *);extern int v4l_switch_channel(v4l_device *, int);4.2.3.Video4linux支持的数据结构及其用途(1)video_capability 包含设备的基本信息(设备名称、支持的最大最小分辨率、信号源信息等)name32 设备名称maxwidthmaxheightminwidthminheightChannels 信号源个数type 是否能capture , 彩色还是黑白, 是否能裁

41、剪等等。值如VID_TYPE_CAPTURE等(2)video_picture 设备采集的图象的各种属性Brightness 065535huecolourcontrastwhitenessdepth 8 16 24 32palette VIDEO_PALETTE_RGB24 | VIDEO_PALETTE_RGB565|VIDEO_PALETTE_JPEG| VIDEO_PALETTE_RGB32(3)video_channel 关于各个信号源的属性Channel 信号源的编号nametunersType VIDEO_TYPE_TV | IDEO_TYPE_CAMERANorm 制式 PAL

42、|NSTC|SECAM|AUTO(4)video_window 包含关于capture area的信息x x windows 中的坐标.y y windows 中的坐标.width The width of the image capture.height The height of the image capture.chromakey A host order RGB32 value for the chroma key.flags Additional capture flags.clips A list of clipping rectangles. (Set only)clipcou

43、nt The number of clipping rectangles. (Set only)(5)video_mbuf 利用mmap进行映射的帧的信息size 每帧大小Frames 最多支持的帧数Offsets 每帧相对基址的偏移(6)video_mmap 用于mmap关键步骤1)打开视频:int v4l_open(char *dev, v4l_device *vd)if (!dev)dev = ”/dev/video0”;if (vd -fd = open(dev, O_RDWR) capability各分量int v4l_get_capability(v4l_device *vd)if

44、 (ioctl(vd -fd, VIDIOCGCAP, &(vd-capability) fd, VIDIOCGPICT, &(vd-picture) picture.colour = 65535;if(ioctl(vd-fd, VIDIOCSPICT, &(vd-picture) capability中的信息int v4l_get_channels(v4l_device *vd)int i;for (i = 0; i capability.channels; i+) vd -channeli.channel = i;if (ioctl(vd -fd, VIDIOCGCHAN, &(vd-channeli) fd);return 0;54.2.4 Ioctl函数介绍从上面代码段中可以看到ioctl函数频繁的出现,下面我们来介绍一下ioctl函数。ioctl用于向设备发控制和配置命令 ,有些命令也需要读写一些数据,但这些数据是不能用read/write读写的,称为Out-of-band数据。也就是说,read/write

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号