基于DM 6467T多路视频实时采集与显示系统设计

2014-11-20 08:19孙丽娜赵春蕾
电视技术 2014年7期
关键词:标清分路达芬奇

张 晶,戴 明,孙丽娜,赵春蕾,冯 磊

(1.中国科学院航空光学成像与测量重点实验室,吉林长春130033;2.中国科学院长春光学精密机械与物理研究所,吉林长春130033;3.中国科学院大学,北京100039)

随着经济和科技的不断发展,智能视频监控的重要性越来越突出,对技术的要求也越来越高,数字化、功能化、集成化、小型化、网络化[1]的发展趋势对监控系统核心处理器性能的要求和各种外设的要求越来越高[1-2]。

TI公司的达芬奇系列双核片上系统[3]是在这种大的发展环境下催生而来,它与TI公司的传统DSP相比,增加了ARM内核,专门负责外设的控制,从而使得DSP端可以更好地集中资源进行算法实现。

合众达是TI公司在中国的第三方公司,在达芬奇系列芯片的基础上开发了一系列的开发工具套件,对达芬奇芯片的应用具有很好的指导意义和实用价值,专门针对本文用到的TMS320DM6467T芯片就有SEED-DVS6467T和SEED-VPM6467T两种。

本文考虑到多路视频同时处理的需求选择了SEEDDVS6467T作为硬件平台,在此基础上主要进行了GPP端多线程应用程序设计,实现了8路视频实时采集,通过标清复合视频接口和高清YPbPr分量视频接口(或DVI接口)实现实时回放。实验结果表明,视频回放清晰流畅且实时性很高,该系列芯片在视频监控领域应用广泛。

1 SEED-DVS6467T简介

SEED-DVS6467T是一款高性能的数字视频服务器。该服务器可以用于8路视频、1路音频的采集和处理,为音视频处理方面的研究提供了很好的借鉴,同时在视频监控及相关领域有着很大的应用前景。

SEED-DVS6467T的硬件框图如图1所示,其核心芯片DM6467T是一款高性能的ARM+DSP双核片上系统,其中ARM端主要实现外部接口的控制和应用,DSP端则主要负责音视频处理算法的实现。该板卡集成了128 Mbyte Nor Flash存储器、1 GHz主频配置的DDR2存储器。在视频采集方面,通过2片TVP5158作为解码芯片,实现8路复合视频的分路采集;视频输出则以ADV7473为编码芯片,实现标清和高清两种视频输出,其中标清接口为CVBS复合视频接口,高清接口则有DVI和YPbPr两种。该平台还配置了1路RS-232实现对板卡的控制,2路RS-485实现云台控制,其他接口还有2路SATA硬盘接口、1路USB接口、JTAG仿真接口等。

图1 SEED-DVS6467T硬件框图[4](截图)

2 开发环境搭建

达芬奇平台的开发环境如图2所示,主要包括目标板、仿真器、Windows控制台和Linux服务器,其中Windows控制台通过RS-232串口与目标板相连,通过超级终端实现对目标板的控制,SEED-XDS560PLUS仿真器通过JTAG接口与目标板相连,通过USB接口与Windows控制台相连,程序调试和下载可在Windows中的CCS软件下实现。Linux服务器可以安装于VMware虚拟机中。通过目标板和PC机的网络接口以及PC机的虚拟网卡即可实现相互之间的网络连接。

图2 开发环境框图

3 应用程序设计

本方案中应用程序设计主要是基于GPP端的多线程设计,主要包括主线程、视频捕获线程1、视频捕获线程2、视频复制线程、视频显示线程等,其中视频捕获线程1和视频捕获线程2分别负责2片TVP5158的视频采集,视频复制线程则负责对采集到的8路视频进行分路复制,视频显示线程则负责复制到的8路视频的实时显示,视频显示线程内嵌于视频复制线程中。

3.1 主线程

主线程流程图如图3a所示,首先将所有优先级设置为最高,setpriority(PRIO_PROCESS,0,-20);然后初始化CMEM和DMA,并创建dma互斥锁;接着利用malloc()函数为TVP5158分路线程句柄param分配内存,该句柄贯穿程序始终,具体定义为:

图3 线程流程图

其中PORTNUM=2,分别代表2片视频解码芯片,CHN_PER_PORT=4,分别代表每片解码芯片对应的4路视频;TVP5158为通道句柄demuxChanHandle分别对应8路视频通道;mailbox邮箱句柄cap2demux分别对应2片TVP5158视频解码芯片,表示由视频采集线程到视频复制线程的邮箱;chroma_offset则表示视频通过yuv格式存储时的色度偏移量。

在为TVP5158分路线程句柄分配内存后开始对其初始化,首先通过CHparam_create()函数创建通道句柄,用以初始化demuxChanHandle,然后创建视频捕获线程到视频分路线程mailbox,对cap2demux进行初始化。

初始化完毕后利用pthread_create()函数依次创建视频捕获线程1、视频捕获线程2、视频复制线程,利用pthread_join()函数分别将3个线程挂起来,等待所有线程结束后,main()函数才返回。

3.2 视频捕获线程

本方案由于有2片视频解码芯片,因此包含2个视频捕获线程,但2个线程的基本流程相同,具体流程图如图3b所示。

本方案视频采集格式为V4L2格式。首先利用init-Capture()函数对捕获设备进行初始化,在该函数中,首先通过open((const char*)devname,O_RDWR)打开捕获设备,然后设置视频采集参数,通过ioctl(*capture_fd,VIDIOC_S_STD,&std)设置视频格式为PAL制式,通过ioctl(*capture_fd,VIDIOC_G_FMT,fmt)设置视频帧格式,接着利用 ioctl(*capture_fd,VIDIOC_REQBUFS,&reqbuf)向驱动申请8个视频流数据帧缓冲区,利用ioctl(*capture_fd,VIDIOC_QUERYBUF,&buf)查询帧缓冲区在内核空间的长度以及偏移量,再通过内存映射将帧缓冲区的地址映射到用户空间,即mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHAR ED,*capture_fd,buf.m.offset),最后通过 ioctl(*capture_fd,VIDIOC_QBUF,&buf)将视频帧缓冲区的全部缓冲放入视频采集输出队列,至此视频采集设备初始化完毕。接着利用startCapture()函数来开始视频数据流的采集,该函数的具体实现为 ioctl(*capture_fd,VIDIOC_STREAMON,&a),设备将采集到的视频数据存入帧缓冲区后将该帧缓冲区移至采集输出队列。然后对TVP5158分路线程句柄中chroma_offset进行初始化,即param->chroma_offset=capture_fmt.fmt.pix.sizeimage/2,至此,param 初始化完毕。

随后视频捕获线程进入主循环:首先利用getCapture-Buffer()函数从采集输出队列中获取帧缓冲区,具体实现为ioctl(*capture_fd,VIDIOC_DQBUF,&buf);然后利用MBX_post()函数将该缓冲区信息通过mailbox发送出去,存入TVP5158分路线程句柄的cap2demux中,以便进行视频分路处理;然后通过putCaptureBuffer()函数返还视频帧缓冲区,使其重新排入采集输入队列,具体实现为ioctl(*capture_fd,VIDIOC_QBUF,&buf),至此,主循环结束。

退出主循环之后,通过stopCapture()函数停止视频采集,具体实现为 ioctl(*capture_fd,VIDIOC_STREAMOFF,&a);然后通过releaseCapture()结束视频采集线程,在该函数中,释放内存通过munmap(capture_buff_info[port][i].start,capture_buff_info[port][i].length)实现;最后通过close(*capture_fd)关闭视频捕获设备,捕获线程结束。

3.3 视频复制线程

视频复制线程负责对捕获线程捕获到的视频信息进行分路复制和缓存,提供给显示线程用于视频显示,具体流程图如图3c所示。

首先利用malloc()函数为视频显示线程句柄displaythrd_handle分配内存,然后通过MBX_create()函数创建视频复制到视频显示邮箱,来对视频显示线程句柄中的唯一成员 cpy2dis[PORTNUM][CHN_PER_PORT]进行初始化,然后利用pthread_create()函数创建视频显示线程,通过 DRV_dmaOpen(&dmaHndl,DRV_DMA_MO DE_DEMUX,HEIGHT*2)打开行扫描分路DMA,随后进入主循环。

在主循环中,首先通过MBX_pend()函数读取视频捕获线程中发送到复制线程的邮箱信息cap2demux,然后利用Get_ChnParamdemux()函数提取 ChanHandle[PORTNUM][CHN_PER_PORT]中的通道参数,再利用TVP5158Demux_getTable()函数获得分路器参数列表,将同一个分路器的4路视频按照顺序存储在一起,列表形成后通过DRV_dmaDemux(&dmaHndl,&demuxPrm)将列表信息传递给DMA句柄,最后通过MBX_post()函数将存储的分路视频信息发送给复制线程到显示线程邮箱cpy2dis[PORTNUM][CHN_PER_PORT],退出主循环后复制线程结束。

3.4 视频显示线程

本方案中用到的视频显示也是V4L2格式的,与视频捕获线程具体实现类似,流程图如图3d所示。

首先通过initDisplay()函数打开并初始化显示设备,视频输出格式在此处进行选择,标清模式参数选择为init-Display(&display_fd,dev,&display_numbuffers,"COMPOSITE","PAL",&display_fmt),即输出接口为复合视频接口,视频格式为PAL格式,高清模式参数选择为initDisplay(&display_fd,dev,&display_numbuffers,"COMPONENT","1080I-25",&display_fmt),即输出接口为YPbPr高清分量视频接口,视频格式为1 080I,帧率为25 f/s(帧/秒),通过startDisplay()函数开始进行视频显示,然后通过Videocpy_init()函数进行视频复制初始化,具体实现方式是通过 DRV_dmaOpen(&dmaHndl,DRV_DMA_MODE_NORMAL,HEIGHT)打开dma通道,为后面的视频复制做好准备,随后线程进入主循环。

在主循环中,首先通过 MBX_pend()函数读取cpy2dis中的邮箱信息,将待显示的视频缓冲区加入视频显示输出队列,再通过getDisplayBuffer()函数从视频显示输出队列中获得视频显示缓冲区,通过Edma_videocpy()函数实现视频的复制,该函数的主要实现为DRV_dma-Copy2D(&dmaH ndl,&copy2D,1),其中 copy2D 的格式通过视频输出的模式来确定,本方案中实现的输出有标清和高清两种模式,8路视频同时输出设置为3×3的模式,标清整体输出分辨率为720×576,每一路视频输出分辨率设置为238×190,高清模式整体输出为1 920×1 080,每一路视频输出分辨率设置为638×358,8路视频分别实现复制之后,利用putDisplayBuffer()函数返还显示缓冲区到显示输入队列中,至此,主循环结束。

退出主循环后,通过stopDisplay()函数停止视频显示,再通过releaseDisplay()函数释放缓冲区,关闭显示设备。至此,视频显示线程结束。

4 结果与分析

4.1 实验结果

程序运行结果截图如图4所示。

图4 Putty串口控制台(截图)

通过设置initDisplay()函数参数和Edma_videocpy()函数内copy2D参数,本方案可以分别实现标清和高清视频输出,方案设置的视频显示模式都是3×3模式,同时显示8路视频信息,最后一块空缺,标清显示通过普通标清电视实现,高清显示通过高清液晶电视实现,具体显示效果分别如图5a、图5b所示。视频显示图像清晰流畅,实时性很高,能够很好地满足视频监控的效果。不过与标清视频显示相比,高清视频显示在视野和清晰度上都有更好的效果。

4.2 结论

本方案在合众达公司SEED-DVS6467T的硬件基础上完成了GPP端软件设计,实现了8路视频同时采集,并以标清和高清两种形式进行回放,实验结果显示,视频回放清晰流畅且实时性很高,特别是高清视频的回放不仅清晰度很高,而且视野更广,在视频监控领域有着很好的应用前景。

图5 标清和高清视频显示(截图)

SEED-DVS6467T平台具有2路SATA硬盘接口,可以开发应用程序对采集到的视频信息进行存储,方便之后调用。另外,达芬奇系列芯片具有双核结构,除了ARM内核外,还有性能强大的DSP内核以及高清视频协处理器,可以实现复杂的视频处理功能,而达芬奇芯片本身带有编解码库,并且具有8路视频同时编解码的处理能力,如果能在本方案的基础上结合DSP端,对采集到的8路视频进行编解码或者其他处理后再返还ARM进行回放或存储,可以在保证视频质量的前提下更好地节省空间。因此该方案的实现对于后续达芬奇芯片的应用开发具有很大的意义。

[1]杨明极,吕鑫淼,吕鑫磊.基于 TMS320DM6467的高清晰视频接口的硬件设计[J].电视技术,2011,35(19):43-45.

[2]文武,吴勇,张杰.基于TMS320DM6467的视频采集系统设计[J].电视技术,2011,35(17):39-41.

[3] Texas Instruments.TMS320DM6467T digital media System-on-Chip[EB/OL].[2013-06-23].http://www.ti.com.cn.

[4] 合众达电子.SEED-DVS6467T 硬件用户指南[EB/OL].[2013-06-23].http://www.seedDSP.com.

猜你喜欢
标清分路达芬奇
轻松做完大手术——聊聊达芬奇手术机器人
分路不良造成机车信号掉码故障分析与电路改进
坐标系
25Hz相敏轨道电路改善分路特性的方法
接近区段失去分路故障分析与解决
达芬奇想飞
手术室的“阿尔法狗”:达芬奇机器人
浅析分路不良区段解锁的特殊操作
高速公路高清与标清系统混合监控及管理
视频监控系统的高清标清对比与发展