基于ADI H.264编码库的视频压缩系统设计与实现

时间:2022-08-11 10:07:11

基于ADI H.264编码库的视频压缩系统设计与实现

摘 要:基于H.264视频编码标准和ADSP-BF561双核的结构特点,结合adi公司提供的h.264编码库,完成整个编码系统的设计。设计中图像采集采用OV7660,并利用了ADI公司高效、完备的系统级编码库支持,充分考虑了双核DSP 的BF561在图像处理中的优异性能进行并行编码。测试结果表明,在BF561上实现H.264视频编码,实现视频流的高质量压缩是完全可行的。

关键词:H.264;编码库;图像采集;BF561

中图分类号:TN919.81文献标识码:A

文章编号:1004-373X(2010)04-083-03

Design and Implementation of Video Compression System Based on

ADI H.264 Encoding Library

LIU Ling,WEI Lifeng,WANG Qinghui

(Shenyang Institute of Chemical Technology,Shenyang,110142,China)

Abstract:Based on H.264 video coding standard and ADSP-BF561 dual-core structural features,design of the entire coding system is completed combined with H.264 encodeng library provided by ADI.In this design,with the support of ADI′s highly efficient,complete system-level encoding library,video is captured by OV7660,meanwhile,excellent performances of the dual-core DSP BF561 is given full consideration in image processing for parallel code.The result shows that it is possible to implement H.264 video coding on BF561 and high quality compression of video flow.

Keywords:H.264;encoding library;image capturing;BF561

0 引 言

目前多媒体通信终端设备具有广泛的应用前景,可以应用于视频会议、可视电话、数字电视等各个领域,随着视频处理技术的不断创新,多媒体领域已成为研究热点。为了适应图像、视频技术日益增加的应用需求,高性能的DSP纷纷问世,ADI公司的ADSP-BF561就是一款功能强大的双核DSP芯片,灵活的高速缓存架构,以及增强的DMA子系统,适合执行复杂的控制和信号处理任务,同时保持高速的数据吞吐率。随着并行处理的优势越来越明显,多核架构已经成为业界公认的未来嵌入式处理器的主流,而BF561就是这样的典范,该处理器目前已经成为视频监控等中高端应用的广泛选择。

H.264/AVC作为最新的第三代视频编码标准,其制定的主要目的就是为了提供更高的编码效率和更好的网络适应性[1]。在相同重构图像质量下,与H.263和MPEG-4 ASP标准相比,能节约50%的码流;H.264采用分层模式,定义了视频编码层(VCL)和网络提取层(NAL),后者专为网络传输设计,能适应不同网络中的视频传输,进一步提高网络的“亲和性”。在此,基于ADI H.264 编码库进行了视频压缩系统的设计与实现,在整个实现过程中,利用ADI公司高效、完备的系统级编码库支持,充分考虑双核DSP 的BF561在图像处理中的优异性能进行并行编码,实现了视频流的高质量压缩。

1 硬件的结构和特点

该设计主要采用ADI公司的Blackfin561(以下简称BF561)媒体处理芯片,BF561具有对称的双核结构,即一个BF561芯片内部集成了两个Blackfin内核,两个内核主频都可以高达600 MHz,支持并行处理[2]。ADSP-BF561采用低功耗和低电压的设计方法,改进的哈佛结构和分级的存储器结构,即Level1(L1)存储器一般以全速运行,没有或仅有很少的延迟,并反复调用程序段和频繁用到的数据段放在L1中,以提高双核编码速率[3]。Level2(L2)是另一级存储器,分布在片内或片外,对它的访问耗费多个处理器周期。整个体系结构包括丰富的视频指令。提供适合DCT、哈弗曼编码等视频压缩标准中常用的操作指令,这些视频指令还消除了主处理器与一个独立的视频编解码器之间复杂和易混等通信问题。BF561集成更多的设备,即提供丰富的设备接口,例如串行外设SPI接口,通用异步收发器UART接口和并行外设PPI接口等[4]。BF561最突出的特点就是传输速度快,具有高达600 MHz的主频双核结构。

2 基于ADI H.264编码库的视频压缩系统

整个视频压缩系统由视频采集和H.264编码两部分组成。视频采集部分负责捕获图像,并且将捕获到的图像通过PPI接口填充到指定的视频帧缓冲区中。H.264编码主要负责对采集到的数据进行压缩,并以压缩比特流输出。

2.1 视频采集

视频采集部分的任务是完成视频数据的采样,并转换成适合编码器编码的数据流。具体流程图如图1所示。

图1 图像采样流程图

视频采集是从输入设备OV7660驱动程序获得视频图像,OV7660是美国 OmniVision 公司开发的一款CMOS彩色图像传感器芯片[5],支持VGA,QVGA,CIF等多种分辨率。视频输出格式有Raw RGB,GRB 4∶2∶2 和YUV/YCbCr(4∶2∶2)。在本设计中,选择CIF YUV(4∶2∶2)格式,需要设置其相应寄存器COM1=0X00,CLKRC=0X80,COM7=0X20,TSLB=0X05,而H.264视频编码算法对4∶2∶0格式的视频数据进行压缩[6],所以需要重采样的过程。

4∶2∶2格式图像一个宏像素中有4个Y分量,2个U分量和2个V分量[7]。4∶2∶0格式图像一个宏像素中有4个Y分量,1个U分量和1个V分量。其中,Y,U和V的存储区是分开的,Y在前,然后是U,最后是V,所以把4∶2∶2格式转换成4∶2∶0格式,要保留所有的Y,并取第偶数行的U和第奇数行的V。摄像头配置完后,打开PPI0将视频数据填充到Blackfin处理器的视频帧缓冲区中,数据将传输到内部L1数据存储器中,这样处理器内核用一个时钟周期的延迟就可以访问到数据,一个视频帧图像传输完后产生中断,在中断处理子程序中启动MDMA,即需要三对描述符source_y,dest_y,source_u,dest_u,source_v,dest_v,形成源和目的两个描述符链表,进行Y,U和V从交织的4∶2∶2格式的源数据区到Y,U和V分离的目的数据区的搬移,分离亮度值和色度值[8],然后交给H.264编码器进行编码。

2.2 视频编码

视频编码主要采用ADI封装的编码库,把关于编码器配置参数的初始化、编码器存储空间的分配以及视频的压缩编码算法等封装在编码库里,生成.ldr链接文件。这样在编码程序运行时直接调用编码库即可,节省了运行周期,达到快速开发的目的。

在编码库中宏块是基本的处理单元。每个宏块都由一个16×16 的亮度块和两个8×8的色度块组成。处理图像是按照从左至右,再从上到下的光栅扫描次序进行的,共扫描16×16个元素。每个宏块都可能按照帧内或帧间模式进行编码。宏块可以使用时间或者空间上的残差预测。时间残差预测宏块称为帧间宏块预测,而空间残差预测宏块称为帧内宏块预测。编码器对于预测模式的选择主要是以最少残差能量为依据的。编码器以固定比特频率编码一个完整的帧间宏块帧或者当一个场景切换在视频输入源中被检测到。那么这个完整的帧间宏块帧就叫做I帧,编码方式基本上就是JPEG的格式。P帧则是前向预测帧,编码方式是使用运动检测误差编码。

编码器的核心处理已经经过优化并从Blackfin的内部L1存储器运行。这是编解码器的重要过程。视频图像数据是通过MEMDMA从外部的L3存储器到L1存储器转移的,编码器一直流水线执行,以达到最佳的性能[9]。

其中,API的函数使用尤为重要,主要有“h264_encode_init”, “h264_encode”,“h264_encode_close”,“h264_encode_init_me_subpel1/subpel2”模块是获取编码视频数据的命令。快速开发的流程如图2所示。

图2 快速开发的流程图

(1) 声明video_codec_objects的类型vidcodec_t;

(2) 给比特流缓冲器、L3状态寄存器和编码库的暂存分配内存;

(3) 初始化video_codec_object的API变量;

(4) 使能功能块h.264_encode_init去初始化编码目标。这个应用需要传输指针到video_codec_object结构中,分配记忆宏块,比特流缓冲器存址并输出nal list指针;

(5) 启动功能块h.264_encode_init_me_subspel1是为了使能算法,达到子块的运动搜索,需要特别注意h.264_encode_init_me_subspel1是与相应算法一一对应的,只有与通过它的API口去使能与算法相对应的代码才能被链接到最后的执行过程中;

(6) 编码器此时准备编码视频模块。在一个视频模块被采集后开始编码,启动功能块h.264_encode编码。在成功连续编码过程中,编码器将返回输入模块指针到caller,否则返回0;

(7) 使用输出指针pnals->nallist压缩数据以输出,通过编码器产生的压缩码流被释放作为NAL单元,在那里编码库创建一个naltable,以描述在码流缓冲器中NAL单元的位置以及NAL单元的长度。系统层可以用这个信息去重新获得NAL单元;

(8) 当编码结束继续编码时,启动功能块h.264_encode_close释放系统资源,编码完成。

3 实验结果

在该实验中,首先选择好要连接的目标板类型,并在DOS窗口中找到可执行目标文件hostapp.exe Cu,以测试USB口是否接通。此时,调试板上的发光二极管15,16点亮, USB连接成功,在编码的过程中发光二极管18和19不停闪烁, BF561的A核和B核正在完成编码的工作,最后将压缩码流以文件的形式通过USB保存在本地存储器中。编码结束后,用H.264的解码器对压缩码流解码,用YUVviewerPlus.exe播放解码后的视频文件。解码后的图像清晰度与在Visual DSP++5.0中用Image Viewer查看的相比[10],图像质量基本相同,图像清晰。

4 结 语

在此结合H.264视频编码标准的特点及ADI公司的BF561处理器结构和特点,完成基于ADI H.264编码库的视频压缩系统设计实现。由于本文在代码移植和改进中尚未对代码进行优化处理,对DSP的内部资源利用也没有达到最佳,从实验结果看,编码时可达到每秒钟编码20帧图像的速度,而OV7660采集图像的速度是每秒钟30帧,并未达到实时编码的性能,这将在后续工作中重点实现。

参考文献

[1]Thomas Wiegand,Gary J Sullivan.Overview of the H.264/AVC Video Coding Standard[J].IEEE Trans.on Circuits and Systems for Video Technology,2003,7(13):560-576.

[2]H.264/MPEG-4 Part 10 White Paper[EB/OL]..

[3]Analog Devices.ADSP-BF561 Blackfin Processor Hardware Reference[EB/OL]..

[4]Analog Devices.Blackfin?Embedded Symmetric Multi-Processor[P].

[5]OV7660/OV7161 CMOS VGA (640×480) CameraChip Implementation Guide[Z].Rev.1,2004.

[6]毕厚杰.新一代视频压缩编码标准H.264/AVC[M].北京:人民邮电出版社,2005.

[7]刘峰.视频图像编码技术及国际标准[M].北京:北京邮电大学出版社,2005.

[8]Analog Devices Inc..Video Framework Considerations for Image Processing on Blackfin Processors (EE-276) [Z].Rev.1,2005.

[9]Analog Devices Inc..H.264 BP Encoder Developer′s Guide Blackfin ADSP-BF5xx Processors[Z].Rev.2.1.0,2008.

[10]Analog Devices Inc..VisualDsp++5.0 Device Drivers and System Services Manual for Blackfin? Processors[Z].Rev.3.0,2007.

上一篇:一种有效的角点检测与匹配算法 下一篇:基于RS 232接口标准的SMT数据采集技术