嵌入式dvr系统设计论文--本科学位论文.doc
《嵌入式dvr系统设计论文--本科学位论文.doc》由会员分享,可在线阅读,更多相关《嵌入式dvr系统设计论文--本科学位论文.doc(31页珍藏版)》请在咨信网上搜索。
毕业设计论文 摘 要 本文提出了一种基于ARM处理器的嵌入式图像视频监控系统的设计方案。本系统采用华为海思Hi3515(ARM926EJ)为处理器,以嵌入式linux做为操作系统,通过基于Video4Linux 的USB 摄像头进行图像采集,最后显示在LCD显示屏。本文首先介绍了视频监控系统的时代背景、实践意义和研究现状,并对嵌入式系统开发的基础理论知识做了简单的介绍,在此基础上分析了视频监控系统的总体结构设计;然后分析linux操作系统的开发技术,包括开发环境的建立、bootloader的移植、linux内核移植和根文件系统的制作,完成了利用USB摄像头采集图像的功能;然后介绍图像在LCD上的显示,并给出了最终的实验结果。 关键字:海思Hi3515;视频监控;Video4Linux ;图像采集 Abstract This 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 based 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 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 results. Keywords: haisiHi3515;video monitor;Video4Linux;image collection 目 录 目 录 III 1 绪 论 1 1.1 前 言 1 1.2 课题研究背景与意义 1 1.2.1课题研究背景 1 1.2.2课题研究意义 2 1.2.3国内外研究现状 2 2 嵌入式系统的选择 4 2.1.1嵌入式系统的分类 4 2.1.2嵌入式系统的选择 6 3.1 Bootloader移植 8 3.1.1 Bootloader介绍 8 3.1.2 U-Boot移植 9 3.2 内核移植 11 3.2.1 移植环境 11 3.2.2 内核移植过程 11 3.3 文件系统移植 12 移植步骤: 12 4.1 Video4Linux简介 13 4.2 Video4linux 编程指南 14 4.2.1.视频编程的流程 14 4.2.2 定义的数据结构及使用函数 14 4.2.3.Video4linux支持的数据结构及其用途 15 4.2.4 Ioctl函数介绍 19 4.3 截取图象的方法 20 4.3.1用mmap(内存映射)方式截取视频 20 4.3.2 直接读设备 22 5 图像在LCD屏上的显示 23 5.1 Framebuffer的介绍 23 5.2 图像由24位图向16位图转换 23 5.3 实物图 24 6 结束语 25 参考文献 26 致 谢 27 27 1 绪 论 1.1 前 言 嵌入式系统(embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电机工程师协会的定义,嵌入式系统为控制、监视或辅助设备、机器或用于运作的设备[1]。 随着网络技术和集成电路技术的高速发展,嵌入式系统已经成为IT的一个焦点。嵌入式图像采集系统大量的应用于自动控制、工业生产、军事技术和家用消费电子等各个领域。 传统的图像采集方法是采用CCD摄像机获得视频信息,这种方法易于实现,但成本较高。随着ARM系列处理器应用的越来越广泛和基于linux的嵌入式技术的迅速发展,利用linux自身带有的TCP/IP协议来实现远程监控和图像传输已经成为可能。 开发具有自主知识产权的嵌入式处理器,嵌入式操作系统和嵌入式高端产品,对我国的民族工业来讲,将有十分重要的战略意义。 1.2 课题研究背景与意义 1.2.1课题研究背景 随着计算机技术的不断发展,人类步入网络时代以来,以“信息采集、处理、监控”为核心的视频监控系统越来越广泛地应用于电视会议、可视电话、远程监控、智能交通、智能小区等远程图像传输系统中。传统的视频监控系统一般基于PC机和视频采集卡的形式,传统系统采集的图像品质不高、抗干扰能力差、系统体积大、成本高、携带不便,在远距离通讯、多系统控制中很难实现。而采用基于DSP结合FPGA方式又需投入大量的人力和资金,成本高[2]。 在这种背景下,设计一种轻便小巧的系统来采集传输图像成为市场所需。 嵌入式linux操作系统具有可移植性好、网络功能强、有优秀的GUN编译工具支持等优点,linux的开放源代码和免费的优点也使成本大大降低,嵌入式系统把微处理器与其专用软件平台相结合,大大提高了操作系统的效率,采用USB接口的摄像头在一定程度上突出了采样速率高、图像质量高、通用性好的特点。 基于上述原因,本文设计了一种新的视频采集处理系统——基于ARM和linux的嵌入式视频监控系统。 1.2.2课题研究意义 本课题研究的是基于嵌入式linux的视频图像采集,利用市场上很常见的中星微系列的USB摄像头来得到现场的图像数据,利用linux内核中的video4linux编程接口函数采集,在PC机上和LCD屏上实现了图像的实时显示。此类视频采集系统对于各个领域都有重要的意义。 例如,在日常生活中,视频监控,智能交通和智能小区的发展,生物医学中的X射线成像、染色体分类技术等,卫星遥感图像识别,办公自动化中的门禁系统、手写识别、票据以及人民币的识别,以及工业视觉,虚拟现实等等领域,图像采集都有着极其重要的应用[3]。 在军用方面。图像采集收集的情报通过无线传输到监控指挥中心,为战场行动提供了重要的情报依据,在强大空中侦察下,我军能够及时掌握敌方的大规模行动,其部署和移动很容易暴露,灵活、机动、可靠的情报搜集,战时能起到很好的侦察保障功能,为决策人缘提供有力的决策依据。 在不就的将来,也许我们能体验到,当我们在各种需要身份验证和识别时,需要的不再是钥匙、密码,而仅仅是一个摄像头而已。试想,这项技术的发展将会给我们的生活带来多么深远的影响。因此,研究图像采集及其处理有着重大的意义。 1.2.3国内外研究现状 视频监控系统是安全防范系统的重要组成部分. 目前在国内外市场上,主要有模拟视频监控和数字视频监控类产品. 传统的模拟监控系统技术已非常成熟,性能稳定、应用广泛,但已不能满足人们日益增长的需要. 模拟视频信号的传输工具主要是同轴电缆,通常只适合于小范围的区域监控;系统的扩展能力差,新的设备也很难添加到原有的系统之中;由于各部分独立运作,相互之间的控制协议很难互通,无法形成有效的报警联动,联动只能在有限的范围内进行[4]。 近年来,随着计算机、网络、图像处理以及传输技术的飞速发展,视频监控制技术也有长足的进步,前端一体化、视频数字化、监控网络化、系统集成化是视频监控系统公认的发展方向。本文基于这种发展趋势,提出了1 种性能高效、价格低廉解决方案. 本方案采用PC机、高性能嵌入式设备以及先进的图像处理技术,通过Internet传输图像. 本系统的优点在于:数字监控系统可以在Internet上传输图像数据,基本上不受距离限制,信号不易受干扰,可大幅度提高图像品质和稳定性;使数字化存储成为可能,经过压缩的视频数据可存储在磁盘阵列中或保存在光盘中,查询十分简便快捷;基于嵌入式技术,系统硬件和操作系统捆绑较为紧密,功能专一,因此性能上更稳定,且便于安装、维护,易于实现系统的模块化设计,便于管理[3]。 2 嵌入式系统的选择 2.1.1嵌入式系统的分类 目前嵌入式操作系统种类繁多,有深嵌入系统,也有浅嵌入式系统;有多任务,也有单任务系统;有实时系统,也有分时系统。其实,嵌入式操作系统是与应用环境密切相关的,从应用范围角度来看,大致可以分为通用型的嵌入式操作系统如WindowsCE、VxWorks、嵌入式Linux等和专用型的嵌入式操作系统如Palm0S、sysbian,SmartPhone等。从实时性的角度看,又可以分为两类。一类是面向控制、通信等领域的实时操作系统,如Microsoft公司得windows CE、WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(PDA)、移动电话、机顶盒、电子书、WebPhone等,如现在非常流行的Mierosoft公司的SmartPhone操作系统等等。20世纪80年代,商业化的嵌入式操作系统开始得到蓬勃发展[6]。目前国内外已有几十种商业操作系统可供选择。 目前比较流行的嵌入式操作系统比较多,对其中几类进行介绍如下[7]: (1)Palm0S Palm0S是一种32位的嵌入式操作系统。PalmOS提供了串行通信接口和红外线传输接口,利用它可以方便地与其它外部设备通信;拥有开放的0S应用程序接口,开发商可根据需要自行开发所需的应用程序。在个人数字助理(PDA)市场上,PalmOS是全球知名、使用人数最多的PDA操作系统。 PalmOS是一套具有极强开放性的系统,现在有大约数千种专门为PalmOS编写的应用程序。 PalmOS操作系统的一个最大的特点就是省电以及系统资源开销较少,而且第三方应用程序非常丰富。由于PalmOS采用开放式架构,有很多PalmOS的使用者都投入到软件开发工作中,这也是PalmOS操作系统成功的一个重要原因。 (2)VxWorks VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统。它的良好的持续发展能力、高性能的内核以及友好的用户开发环境,使其在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精度技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。 VxWorks具有可靠性,良好的实时性,高度灵活的可裁减性等突出特点。 (3)uC/OS Ⅱ uC/OS Ⅱ是美国人Jean Labrosse在1992年开发的一个嵌入式操作系统,并于1998年推出它的升级版本uC/OS Ⅱ。uC/OS Ⅱ是一种免费、开放源代码、结构小巧、基于可抢占优先级调度的实时操作系统,其内核提供任务调度与管理、时间管理、任务同步和通信、内存管理和中断服务等功能。 uC/OS Ⅱ主要面向中小型嵌入式系统,具有执行效率高、占用空间小、结构简洁、实时性能优良和可扩展性强等特点,最小内核可编译至2KB,一般情况下占用10KB数量级。它的内核本身并不支持文件系统,但它具有良好的扩展性能,如果需要的话可以自行加入。由于免费、源码开放、规模较小,uC/OS Ⅱ不仅在众多的商业领域中获得了广泛的应用,而且被很多大学所接纳,作为教学用的嵌入式实时操作系统。 (4)嵌入式Linux Linux现在已经是最为流行的一款开放源代码的操作系统。Linux是1991年由芬兰人Linus Torvalds发明的,从诞生到现在的短短十几年的时间,Linux已经发展成为一个功能强大、设计完善的操作系统,不仅在通用操作系统领域与Windows等商业系统分庭抗争,而且在新兴的嵌入式操作系统领域也获得了飞速的发展。由于Linux系统本身是开放源码的,又是一种多任务、稳定性高、内核可裁减的操作系统,它在嵌入式系统方面大放光芒。在各种嵌入式LinuxOS迅速发展的状况下,Linux在嵌入式系统方面的发展速度和影响是任何一种操作系统不能比的。 嵌入式Linux是在标准Linux的基础上针对嵌入式系统进行内核裁减和优化后形成的,使其体积更小、性能更高,同时,由于它是免费的,没有其它商业性嵌入式操作系统需要的许可证费用,所以具有很强的市场竞争力。当前国家对研制自主操作系统大力支持,为源码开放的Linux的推广提供了广阔的发展前景。 (5)Windows CE Windows CE是微软公司在嵌入式操作系统市场上的一个重要产品。它最早于1996年开始发行,但是最初并没有取得成功,直到Windows CE 3.0以后他才真正被人们所接受。目前的最新版本为Windows CE.NET。 Windows CE是一个32位的多线程、多任务的嵌入式操作系统,它经过压缩,可以移植,能够开发多种企业和客户设备,其操作界面来源于Windows,但Windows CE是基于Win32API重新开发的、新型的信息设备平台。Windows CE具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点,适用于各种嵌入系统和产品。它的模块化设计方式使得系统开发人员和应用开发人员能够为多种多样的产品来定制它。若开发者熟悉Windows开发环境,可以基于Windows CE开发出更好的应用程序。随着嵌入式系统逐渐深入生活,越来越多的嵌入式设备都应用WinCE系统[8]。 2.1.2嵌入式系统的选择 多种嵌入式系统各有千秋,但是本课题研究选择了嵌入式Linux系统,因为它在嵌入式领域具有独特的优点。 嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式linux既继承了Interlnet上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式Linux的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_Linux Hardhat Linux 等嵌入式Linux支持,实时性能稳定性好安全性好[9]。 Linux做嵌入式的优势,首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持;其次,Linux的内核小、效率高,内核的更新 嵌入式linux速度很快,linux是可以定制的,其系统内核最小只有约134KB。第三,Linux是免费的OS,在价格上极具竞争力。 Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台,是一个跨平台的系统。到目前为止,它可以支持二三十种CPU。而且性能稳定,裁剪性很好,开发和使用都很容易。很多CPU包括家电业芯片,都开始做Linux的平台移植工作。移植的速度远远超过Java的开发环境。也就是说,如果今天用Linux环境开发产品,那么将来换CPU就不会遇到困扰。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,Toker ring(令牌环网)、光纤甚至卫星的支持。所以Linux很适于做信息家电的开发[10]。 3 软件平台的设计与实现 3.1 Bootloader移植 3.1.1 Bootloader介绍 系统引导程序通常称为Boot Loader,是在系统复位后执行的第一段软件代码,相当于PC机上的BIOS。通常固化在硬件的某个固态存储结构中,上电后自启动。通过bootloader这段代码,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的bootloader.不过bootloader的发展也趋于支持多种体系结构,现在比较成熟的有一下几种: (1)vivi vivi是由韩国Mizi公司专门针对基于ARM处理器的嵌入式系统开发的一种Boot Loader,因为VIVI 目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。VIVI一般有如下作用。 1)把内核(kernel)从Flash复制到RAM,然后启动它; 2)初始化硬件; 3)下载程序并写入Flash; 4)检测目标板。 (2)RedBoot RedBoot也称红帽子嵌入式调试引导程序。RedBoot 是一个专门为嵌入式系统定制的引导启动工具,最初由Redhat开发,它是基于eCos(Embedded Configurable Operating System)的硬件抽象层,同时它继承了eCos的高可靠性、简洁性、可配置性和可移植性等特点。RedBoot集Bootloader、调试、 Flash烧写于一体,支持串口、网络下载,执行嵌入式应用程序。既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(Flash更新、网络启动)。RedBoot支持下载和调试应用程序,开发板可以通过BOOTP/DHCP协议动态配置IP地址,支持跨网段访问。用户可以通过tftp协议下载应用程序和image,或者通过串口用x-modem/y-modem下载。RedBoot支持用GDB(the GNU debugger)通过串口或者网卡调试嵌入式程序,可对gcc编译的程序进行源代码级的调试。相比于简易jtag调试器,它可靠、高速(CPU的 cache打开后,通过网卡tftp下载能达到1Mbps,GDB下载的速度能达到2Mbps)、稳定,用户可通过串口或网卡,以命令行的形式管理 Flash上的image,下载image到Flash。动态配置RedBoot启动的各种参数、启动脚本,上电后RedBoot可自动从Flash或 tftp服务器上下载应用程序执行。 (3)U-Boot U- Boot是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,它可以运行在基于PowerPC、ARM、MIPS等多种嵌入式开发板上。本linux系统的启动代码用的是U-Boot。 3.1.2 U-Boot移植 要移植U-Boot到嵌入式产品中,首先要在宿主机上编译配置U-Boot,将U-Boot源代码编译成为可以在ARM上执行的二进制文件,并烧写到实验箱上才能执行。本实验系统采用将U-Boot烧写到Nand Flash(SMC卡)中进行启动。 移植过程如下: (1)在工作目录下解压U-Boot 输入命令:tar -xjvf u-boot-1.3.1.tar.bz2 (2)进入U-Boot目录,修改Makefile 输入以下命令:cd u-boot-1.3.1 Vim Makefile 为tekkaman2440建立编译项: sbc2410x_config: unconfig @$(MKCONFIG) $(@:_config=) arm arm920t sbc2410x NULL s3c24x0 tekkaman2440_config:unconfig @$(MKCONFIG) $(@:_config=) arm arm920t tekkaman2440 tekkaman s3c24x0 各项的意思如下: arm: CPU的架构(ARCH) arm926EJ: CPU的类型(CPU),其对应于cpu/arm926EJ子目录。 tekkaman2440: 开发板的型号,对应于board/tekkaman/tekkaman2440目录。 tekkaman: 开发者/或经销商(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目录 由于我在上一步板子的开发者/或经销商(vender)中填了 tekkaman ,所以开发板tekkaman2440目录一定要建在/board子目录中的tekkaman目录下 ,否则编译会出错。 [tekkamanninja@ARM9-Host u-boot-1.3.1]$ cd board [tekkamanninja@ARM9-Host board]$ mkdir tekkaman tekkaman/tekkaman2440 [tekkamanninja@ARM9-Host board]$ cp -arf sbc2410x/* tekkaman/tekkaman2440/ [tekkamanninja@ARM9-Host board]$ cd tekkaman/tekkaman2440/ [tekkamanninja@ARM9-Host tekkaman2440]$ mv sbc2410x.c tekkaman2440.c 还要修改自己的开发板tekkaman2440目录下的Makefile文件,不然编译时会出错: [tekkamanninja@ARM9-Host tekkaman2440]$ kwrite Makefile COBJS := tekkaman2440.o flash.o 在include/configs/中建立配置头文件 [tekkamanninja@ARM9-Host tekkaman2440]$ cd ../../.. [tekkamanninja@ARM9-Host u-boot-1.3.1]$ cp include/configs/sbc2410x.h include/configs/tekkaman2440.h (4)测试编译能否成功 1)配置 [tekkamanninja@ARM9-Host u-boot-1.3.1]$ make tekkaman2440_config Configuring for tekkaman2440 board... 2)测试编译 [tekkamanninja@ARM9-Host u-boot-1.3.1]$make 测试通过后进行下一步 3.2 内核移植 3.2.1 移植环境 交叉编译器:arm-linux-gcc 3.4.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-s3c2410/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)拷贝文件系统源代码压缩包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-filesystem 4 图像采集程序设计 4.1 Video4Linux简介 Video4Linux是linux中关于视频设备的内核驱动,他针对视频设备的应用程序编程提供一系列接口函数,配合适当的视频采集设备和相应的驱动程序,可以实现影像采集、AM/FM广播、频道切换等功能,在远程会议、可视电话、视频监控系统中有着广泛的应用。 在linux下,所有外设都被看成是一种特殊的文件,称之设备文件,这里只要针对的设备文件是/dev/video0,进行视频图像采集方面的程序设计。 基于Vide04Linux的图像采集的程序流程如图4.1所示。 开始 开启设备 获取设备信息和图像信息 对采集缓冲区进行内存映射 捕捉视频数据 图像数据处理 采集中止? 关闭设备 结束 N Y 图4.1 图像采集流程图 4.2 Video4linux 编程指南 4.2.1.视频编程的流程 (1)打开视频设备: (2)读取设备信息 (3)更改设备当前设置(可以不做) (4)进行视频采集,两种方法: 1)内存映射 2)直接从设备读取 (5)对采集的视频进行处理 (6)关闭视频设备。 4.2.2 定义的数据结构及使用函数 struct _v4l_struct { int fd; struct video_capability capability; struct video_buffer buffer; struct video_window window; struct video_channel channel[8]; struct video_picture picture; struct video_mmap 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 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); 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 包含设备的基本信息(设备名称、支持的最大最小分辨 率、信号源信息等) name[32] 设备名称 maxwidth maxheight minwidth minheight Channels 信号源个数 type 是否能capture , 彩色还是黑白, 是否能裁剪等等。值如 VID_TYPE_CAPTURE等 (2)video_picture 设备采集的图象的各种属性 Brightness 0~65535 hue colour contrast whiteness depth 8 16 24 32 palette VIDEO_PALETTE_RGB24 | VIDEO_PALETTE_RGB565| VIDEO_PALETTE_JPEG| VIDEO_PALETTE_RGB32 (3)video_channel 关于各个信号源的属性 Channel 信号源的编号 name tuners Type VIDEO_TYPE_TV | IDEO_TYPE_CAMERA Norm 制式 PAL|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) clipcount 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)) < 0) { perror("v4l_open:"); return -1; } if (v4l_get_capability(vd)) return -1; if (v4l_get_picture(vd)) retu rn -1; return 0; } 2)读video_capability 中信息 成功后可读取vd->capability各分量 int v4l_get_capability(v4l_device *vd) { if (ioctl(vd ->fd, VIDIOCGCAP, &(vd->capability)) < 0) { perror("v4l_get_capability:"); return -1; } return 0; } 3)读video_picture中信息 int v4l_get_picture(v4l_device *vd) { if (ioctl(vd ->fd, VIDIOCGPICT, &(vd->picture)) < 0) { perror("v4l_get_picture:"); return -1; } return 0; } 成功后可读取图像的属性 4)改变video_picture中分量的值(可以不做的) 先为分量赋新值,再调用VIDIOCSPICT vd->picture.colour = 65535; if(ioctl(vd->fd, VIDIOCSPICT, &(vd->picture)) < 0) { perror("VIDIOCSPICT"); return -1; } 5)初始化channel (可以不做的) 必须先做得到vd->capability中的信息 int v4l_get_channels(v4l_device *vd) { int i; for (i = 0; i < vd ->capability.channels; i++) { vd ->channel[i].channel = i; if (ioctl(vd ->fd, VIDIOCGCHAN, &(vd->channel[i])) < 0) { perror("v4l_get_channel:"); return -1; } } return 0; } 6)关闭设备 int v4l_close(v4l_device *vd) { close(vd ->fd); return 0; }[5] 4.2.4 Ioctl函数介绍 从上面代码段中可以看到ioctl函数频繁的出现,下面我们来介绍一下ioctl函数。 ioctl用于向设备发控制和配置命令 ,有些命令也需要读写一些数据,但这些数据是不能用read/write读写的,称为Out-of-ban- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 dvr 系统 设计 论文 本科 学位
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【可****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【可****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文