兰浩 王湘慧
摘要:研究了H.264编解码算法在DM6467上的应用,重点分析了图像数据流通过网络在IDE硬盘上的存储和读取的过程。实现了基于UDP协议的网络摄像机的功能,获得了良好的效果。
关键词:H.264;存储;读取;DM6467
中图分类号:TN919 文献标识码:A 文章编号:1009-3044(2012)34-8251-03
H.264[1]是一种高性能的视频编解码技术,由ITU-T和ISO两个国际标准化组织联合制定一个新的视频编码标准,以实现视频的高压缩比、高图像质量、良好的网络适应性等目标。H.264已成为视频图像压缩的最佳标准,采用H.264能将视频信号压缩成高压缩比的视频数据流,实现在网络远端视频数据存储和读出的功能。
H.264标准压缩系统[2-6]由视频编码层(VCL)和网络提取层(NetworkAbstractionLayer,NAL)两部分组成。VCL中包括VCL编码器与VCL解码器,主要功能是视频数据压缩编码和解码,它包括运动补偿、变换编码、熵编码等压缩单元。
1网络摄像机存储回放系统构成
系统采用DM6467DSP来实现远程视频图像的采集、编码,解码显示及本地存储,也可通过UDP协议[7]传输到网络远端的DSP存储和读取等功能。系统框架图如图1所示。
工作原理:CCD摄像机捕捉到模拟图像信号传送至视频信号模数转换芯片TVP7002转换成连续的视频数据流,传输至DM6467来处理。DSP芯片完成对视频的采集处理,建立捕捉线程,并从视频前端的设备驱动程序取得720P@60Hz最新图像。同时还建立视频压缩线程,与编解码引擎通信,将最新图像编码后,提交给写文件函数将其写入文件。调用UDP协议传输,将压缩后的视频流通过Internet或者Intranet传输至网络远端的DSP,远端的DM6467中ARM处理器调用存储进程,完成视频数据流在IDE硬盘上的存储工作。如果要将硬盘中的视频数据流回放,也是调用读取进程,在DSP端建立显示线程,与Linux的视频后端驱动程序通信,将最新图像提交显示。
2ICETEK-DM6467-EVM简介
ICETEK-DM6467-EVM[8-9]可以广泛用于视频安全监控系统、IP机顶盒、视频会议、车载信息娱乐系统、便携式媒体以及数码像机等数字视频流的编码和解码等硬件处理系统。ICETEK-DM6467-EVM框架图如图2所示。
ICETEK-DM6467-EVM是一款多功能的平台,扩展了TMS320DM6467几乎所有可扩展的外设和接口,而且将关键接口单独引出,为用户自定义扩展的接口。适用于具体产品应用、软硬件研发、嵌入式系统设计和评估、嵌入式教学实验、多媒体应用系统组建等。
ICETEK-DM6467-EVM采用TI最新的应用于数字视频处理的片上系统芯片TMS320DM6467处理器,针对高端视频多媒体系统的需求而设计。该处理器为ARM+DSP的双核架构处理器兼具DSP和RISC技术的优势,集成了时钟频率高达594MHz的C64x+DSP内核和297MHz的ARM926EJ-S内核。TMS320DM6467包含一个高清视频/影像协处理器(HDVICP)和视频数据转换引擎(VDCE),用于减轻相关算法的DSP内核繁重的视频与影像处理负担,使更多的DSPMIPS能用于视频后处理或者其他并行任务。
ICETEK-DM6467-EVM板上存储器由256MB的DDRDRAM、128MBNANDFlash多种类型的存储器组成。DDR存储器主要用于程序和内核的运行,NADNFlash主要用于内核的存储。
3网络摄像机存储回放流程
网络摄像机存储和回放是使用DM6467上297MHz的ARM926EJ-S内核在Linux环境下完成。
视频数据流存储的工作原理如下:等待获得硬件的帧同步信号,直到获得otherthread信号,然后从videothread中获取encodedbuffer;并判断是否正确获取了数据,如果没有获得数据,则显示数据获取失败,调用cleanup函数清除缓冲区并回到等待otherthread信号状态;如果获得正确数据则判断从videothread获取的数据是否溢出,如果没溢出,则判断缓冲区中的数据是否可以被存储,如果不能被存储,则显示存储失败并调用cleanup函数清除缓冲区,返回等待otherthread信号状态;如果可以被存储,则显示存储了0btye并再次的从videothread中获取encodedbuffer数据;如果videothread从中获取的数据溢出了,则将encodedbuffer中的数据存储到硬盘上,并调用cleanup函数显示存储成功,并在此从videothread中获取数据。其流程图如图3所示。
从存储设备中读取图像再回放的工作原理如下:打开编码输出文件,并判断文件是否为空,如果为空则调用cleanup函数清除缓冲区并重新打开编码输出文件;若不为空则创建videothread的缓冲区。如果创建失败则调用cleanup函数清除缓冲区并重新打开编码输出文件;创建成功则向缓冲区中填充编码了的数据,如果没有正常填充,则显示编码数据填充失败并调用cleanup函数清除缓冲区,重新打开编码输出文件;如果填充正常则等待填充完成,完成后等待overthread信号。其流程如图4所示。
4H.264解码算法消耗
H.264BPEncoder(v1.10.00)onDM6467是由TI提供的运行在DM6467处理器上的视频编解码标准算法。测试中消耗指令周期:采用CodeGenerationTools版本6.0.3,程序、堆栈和输入输出缓冲区均位于扩展存储器,32k字节1级程序高速缓存,64k字节1级数据高速缓存的存储器映射。平均值为30fps时的每帧用时平均计算结果,最大值为在30fps时最坏情况下的计时,如表1所示。
5结论
通过测试H.264算法的编解码性能,完成了基于UDP协议的网络码流传输压缩后的视频数据流,并实现在IDE硬盘上的存取和读取功能。编解码设计很多的复杂的数学运算,在DSP端可以对图像编解码做进一步的算法优化,更好的利用DSP片内资源,提高编码速度,在广播电视、视频存储和回放、视频会议等领域具有广泛的应用前景。
参考文献:
[1]沈兰荪,卓力.小波编码与网络视频传输[M].北京:科学出版社,2005.
[2]ITU-TReeonunendation.H.263,“VideoCodingforLowbitrateCommunication”[S].Version1,1995;Version2,1998;Version3,2000.
[3]余兆明.图像编码标准H.264计数[M].北京:人民邮电出版社,2005.
[4]吕明洲,陈耀武.基于异构多核处理器的H.264并行编码算法[J].计算机工程,2012,16(38):35-39.
[5]毕厚杰.新一代视频压缩编码标准——H.264/AVC[M].北京:人民邮电出版社,2005.
[6]张彤宇,苏睿,刘宝兰.H.264/AVC视频编码器在DM642平台上的实现与优化[J].微电子学与计算机,2005,22(12):165-168.
[7]兰浩,徐瑶,李仲阳,等.基于H.264编解码UDP协议网络摄像机的实现[J].湖南师范大学自然科学学报,2008,31(3):42-46.
[8]林李松,陈耀武.基于TMS320DM6467的H.264自适应错误掩盖并行解码算法[J].计算机工程与应用.2012.48(8):172-175.
[9]刘根林,陈健.基于TMS320C6416芯片的H.264编码器的设计和实现[J].数字电视与数字视频,2004,10:23-25.