摘要 为满意高清视频监控的需求,针对现在raw格局传感器的驱动支撑尚不完善的问题。文中依据TI公司的DM6467T芯片硬件渠道,运用芯片供给的VPIF接口,对高清摄像头进行驱动程序的规划。剖析了V4L2驱动结构,并别离对V4L2中心驱动、VPIF接口驱动以及传感器驱动进行修正及规划。编写了驱动测验程序,试验成果表明,该规划能成功收集到raw格局的图画数据,对同类传感器驱动规划具有必定参考价值。
跟着数字视频技能成为安防监控与视频会议不行短少的一部分,人们对视频稳定性、图画明晰度以及数据实时性的要求也逐步提高。为得到更明晰的图画,TI(德州仪器)推出了达芬奇系列芯片。该系列芯片长于处理多媒体数据,支撑多种视频格局的输入和高清视频的输入。关于YUV格局的视频图画输入,现在已有较为老练的驱动可直接运用,但是常见的传感器一般输出raw格局的视频数据,raw格局的是最原始的视频数据,其信息量最大,现阶段对传感器的驱动支撑尚不完善。本文依据Linux环境,介绍了V4L2、VPIF和传感器驱动之间的联系,完结视频收集设备驱动的规划及简略测验程序的编写。
1 硬件渠道架构介绍
在进行驱动程序规划之前,首要要了解相关硬件设备的信息。
1.1 DM6467T介绍
DM6467T是TI公司推出的一款达芬奇系列的双核芯片。达芬奇技能的根底是集成了DSP与ARM双内核的片上体系,ARM内核可加载操作体系,首要起操控和办理作用,DSP内核相当于一个只担任处理编解码算法的协处理器。DM6467T具有1 GHz主频的DSP内核,500 MHz主频的ARM926E—JS内核以及2个HDVICP硬件协处理器。依据多媒体布景提出的DM646 7T,不只运算才能高,且具有较强的操控才能。
DM6467T具有VPIF(Video Port Interface)视频接口功用模块,VPIF模块办理着视频数据的输入输出功用,可满意各种视频输入输出设备的格局。该模块有4路可装备的数据通道,每路为8 bit的数据宽度,其间两路用于视频输出,另两路用于视频输入。VPIF支撑ITU—BT.656、ITU—BT.1120格局的视频,也可支撑数据宽度为8/10/12 bit的raw格局图画数据。
1.2 MT9P031传感器
MT9P031传感器是Aptina公司推出的一款高清传感器,最高可支撑2 592×1 944像素的视频收集。在720p的视频格局下,每秒可收集60帧视频图画。MT9P031运用I2C(Inter-Integrated Circuit)总线进行通讯,经过I2C设置传感器内部寄存器,即可操控传感器的作业形式及作业参数。I2C总线是由Philips公司开发的两线式串行总线,用于衔接微操控器及其外围设备。
传感器端衔接示意图如图1所示。传感器的数据接口与DM6467T的VPIF接口相衔接。MT9P031传感器收集输出的是12位宽度的原始数据,需求占用VPIF接口中两路8 bit的数据通道,传感器运用行同步信号与帧同步信号进行同步,其同步信号与VPIF接口相衔接。
2 视频驱动规划
2.1 V4L2驱动
V4L2(Video for Linux two)是Linux下开发视频收集设备驱动程序的一套规范,这套规范运用分层的办法为驱动程序的开发供给了明晰的模型和共同的接口。V4L2本身是一个字符设备,具有字符设备的一切特性,直接将接口露出给用户。当视频设备衔接到主机后,驱动程序会首要注册一个主设备号为81的字符设备,其是硬件仅有的身份标识。
图2展现了V4L2的驱动结构。驱动正常加载结束后,会在/dev目录下发生/dev/videoX设备节点。图中的V4L2驱动中心构建一个内核中规范视频设备驱动的结构,为视频操作供给一致的接口函数。渠道V4L2驱动部分,依据渠道本身的特性完结与渠道相关的驱动,渠道驱动用于操控视频接纳端的相关操作。本文选用DM6467T处理器,运用DM6467T的VPIF接口,该渠道驱动即VPIF驱动。用户在运用接口进行操作时,V4L2调用渠道驱动所供给的功用对DM6467T进行操作。用户需求收集传感器数据时,运用V4L2驱动中心供给的接口进行操作,驱动中心将担任基层驱动的调用,完结数据收集作业。
2.2 VPIF接口驱动
VPIF(Video Port Interface)是DM6467视频接口功用模块,VPIF接口共4路数据通道,两路8位视频输入通道,两路输出通道,其4路通道具有相同的硬件结构。DM6467T经过VPIF接口接纳传感器收集的视频数据,并将一切输入数据都缓存在片内Flash中。
首要需规划驱动初始化程序,在加载驱动过程中,VPIF需求进行初始化作业,首要包含分配缓冲,检测设备类型,分配内存给通道目标,将设备注册为V4l2_dev,请求视频数据接纳时的中止,该中止表明一帧视频数据接纳完结。注册相关的操控类函数,该类函数将完结用户层接口的操控操作。
余下的VPIF驱动函数规划可分为3部分:(1)用户操控相关的操作函数,该类函数完结V4L2中ioctl函数的详细操作。用户可经过V4L2对VPIF进行查询设备才能、设置像素、设置规范格局、请求缓冲区、对缓冲区进行操作和敞开或中止视频收集等操作。(2)字符设备操作相关的函数,包含设备翻开的完结,设备被封闭时资源开释以及内存映射的完结。(3)完结中止服务程序。收集视频数据阶段,每接纳到一帧完好数据后,体系会发生一个中止,跳转到中止服务程序。发生中止表明缓存区域已被接纳到的图画数据填满,中止服务程序中需求完结缓存轮换的操作,行将缓存指针指向下一个空白区域。
2.3 MT9P031驱动
MT9P031传感器驱动首要需求完结初始化功用。传感器驱动需求作为v4l2_subdev进行注册,注册完结后可在VPIF驱动中运用v4l2_subdev_call函数对其进行操作。MT9P031的内部操控寄存器由I2C总线进行操控,传感器驱动在初始化时还需注册为I2C设备,并运用I2C总线进行勘探,读取传感器的设备号,检测传感器芯片是否正常。
因为MT9P031是V4L2子设备,驱动需求完结供上层渠道驱动调用的操控函数,包含设置及获取当时视频格局,设置及获取视频参数以及完结传感器数据收集与中止功用的函数。
终究需求在芯片相关的设置文件中,参加VPIF与传感器的文件的装备,装备根本参数,如I2C地址、VPIF通道的衔接状况等信息。
3 驱动测验程序
3.1 驱动程序编写
本文编写的驱动程序直接编译在内核中,在Linux内核发动的过程中,视频驱动进行初始化。内核加载结束后,在/dev目录下发生/dev/vide0设备节点,用户空间经过调用Open函数即可翻开设备,进行视频收集操作。详细流程如图3所示。
用户翻开设备后,运用Ioctrl函数进行操作,经过VIDIOC_QUERTCAP操控指令可查询驱动支撑格局,并运用其他操控指令进行相应设置。Linux操作体系和驱动程序运转在内核空间,运用程序运转在用户空间,两者不能直接运用指针传递数据,需经过VIDIOC_REQBUFS指令和Malloc函数别离在内核空间和用户空间分配内存缓冲区,终究经过Mmap函数进行内存映射。运用VIDIOC_QBUF指令将分配到的缓冲参加缓冲行列,该行列将用于寄存接纳到的视频数据。运用VIDIOC_STREAMON指令开端视频收集,从缓冲行列中取到视频数据,并保存在SDRAM中,保存结束后将缓冲区放回行列。收集结束后需先中止视频收集,调用Close函数封闭视频设备,而且开释请求的内存空间。
3.2 测验成果
终究收集到的视频数据寄存在SDRAM中,传感器收集到的视频图画是raw格局的数据,其数据格局为红绿/绿蓝交织的值,需求运用差值算法将其转换成RGB图画再进行显现,终究出现了较为明晰的图画,验证了驱动程序的正确性。
因为raw格局的数据量较大,在实践运用中并不合适将该数据直接存储至存储器中,需求对数据进行转码紧缩,随后再存储或经过网络进行传输。运用该驱动程序进行网络摄像头的规划,因为转码运算量大,在720P的格局下,现在实时的收集播映速率可到达10 fip·s-1。虽未到达传感器的规范,但验证了驱动的正确性,且根本满意运用需求。对DSP算法进行优化后,视频每秒的帧数将可进一步提高。
4 结束语
本文介绍了V4L2驱动的规划架构,运用DM6467T的VPIF接口,规划了依据DM6467T的高清摄像头驱动。现有依据VPIF接口规划的驱动仅支撑YUV重量格局的视频数据,本文完结了在VPIF下针对raw格局视频数据收集的驱动,收集数据也到达了预期的作用。raw格局图画数据量大,依据需求进行处理后,用处广泛。