视频调理器

2024-06-06

视频调理器(共5篇)

视频调理器 篇1

0 引言

视频信息的采集、存储、传输与处理一直都是多媒体领域研究的热点[1]。多种视频标准并存, 桌面、嵌入式等不同应用, 需要兼顾计算高效性和编程灵活性的动态可重构可编程视频处理器体系结构[2]。而传统通用处理器 (Gnereal Purpose Processor, GPP) 、DSP以及专用电路已很难满足视频处理性能和灵活性的要求, 所以支持多标准和多种视频编解码算法已成为视频编解码器发展的趋势, 这向体系结构设计提出了更高的要求[3,4]。GPP采用RISC指令系统, 通过超标量、乱序执行、动态分支预测、推测执行等机制, 但执行效率低下, 也只能处理较小的图像[5];如Intel的MMX/SSE、IBM的Alti Vec、HP的MAX-I/MAX-II等。专用集成电路 (ASIC) 性能高, 执行效率也成倍提高, 如TIAN X H[6]通过利用流水线的方式来减少数据相关性, 并设计了一种完全支持RDO的上下文存储器管理机制, 能够达到每个时钟周期处理一个符号的速度, 但它没有了可编程的灵活性, 无法适应多标准的发展。现有编解码器体系结构无法完全满足视频处理的需求, 研究创新的可编程可重构统一处理阵列体系结构, 能够解决视频处理的计算高效性和编程灵活性问题[7,8,9], 但在视频阵列处理器中数据加载已逐步成为阵列处理器的瓶颈。如何减少数据的访存冗余, 提高视频阵列处理效率, 是一个亟待解决的问题。

本文将要介绍可编程可重构数据加载单元的设计与实现, 从而提升视频处理的效率与性能。

1 运动估计算法对存储结构要求

目前在视频编解码标准中, 运动估计算法主要是为了除去帧间冗余, 使视频传输过程中的比特数大大减少。运动估计基本算法就是要对当前帧和参考帧进行最小平均绝对值误差 (MAD) 操作, 得到其运动矢量发送到解码端。如图1所示, 实线框分别表示当前帧 (W×H) 和编码的当前块 (N×N) , 虚线框分别表示参考帧 (W×H) 和计算的候选块 (N×N) , 点线框是参考帧的搜索区域 (2pv+N×2ph+N) 。

计算过程包括了六重循环, 当前块和候选块的每个像素计算绝对误差和 (SAA) , 候选块遍历了 (2ph+N) × (2pv+N) 个像素的搜索窗, 即在搜索窗内选定了2ph×2pv比较块。一帧图像计算绝对误差和 (SAA) 就要进行W×H×2pv×2ph次操作, 每次绝对误差和操作需要2个像素, 那么一帧图像要访问存储2×W×H×2pv×2ph次。若为1 080P30 f/s, 则总线将要读取像素点7.962 64 Gpixel/s, 而实际当前帧和参考帧的全部像素点仅为2×1 080×1 920×30=0.124 416 Gpixel。访存冗余规定如下:

若结构不支持硬件缓存区域, 访存冗余将达到64。那么存储的带宽BW=f×W×H×访存冗余当前帧+f×W×H×访存冗余候选块。存储带宽由访存冗余决定, 当每个像素只进行一次访存操作时, 存储器的带宽最小。所以必须在硬件内部设置像素缓存区域。若系统时钟为100 MHz, 进行1 080P 30 f/s帧间预测, 那么搜索一帧的最大时间为1/30 s, 搜索每个4×4子块的时间为26个系统时钟。pv=ph=32的搜索区域含有1 024个候选块, 每个候选块要进行16次减法和15次加法, 即26个时钟要处理1 024个候选块31K次操作, 这显然需要多个候选块并行操作, 所以存储系统要有能够支持多个候选块并行操作的能力。

2 视频阵列处理器数据加载单元设计

2.1 视频阵列处理器结构

视频阵列处理器可编程可重构的统一体系结构就是采用处理单元 (PE) 之间邻接互连, 基于单指令多数据 (SIMD) 的数据级并行计算和多指令多数据 (MIMD) 的指令级并行计算, 解决了并行算法和非并行算法的计算高效性和编程灵活性。简单来说就是将算法中灵活的部分用编程方式执行, 而算法中计算量较大的部分采用可重构的方式并行处理。图2给出了完整的视频阵列处理器系统结构, 包含5个可编程可重构阵列, 每个可编程可重构阵列都是通过总线与主处理器连接且可编程可重构阵列之间可以通过寄存器进行通信。每一个可编程可重构阵列包含16个可编程可重构处理单元组以及一个单元组阵列控制器处理器;每一个处理单元组主要包含一个可重构的4×4处理单元阵列以及一个可编程的处理单元组控制处理器。

该视频阵列处理器可编程可重构的统一体系结构可以完成视频压缩的计算任务, 主处理器将不同的视频压缩算法映射到可编程可重构阵列处理器上。根据算法特点分为可重构处理部分和可编程处理部分, 用4×4阵列处理单元处理一些计算量大的算法, 用可编程控制器处理比较灵活的算法。

2.2 数据加载单元的设计

访存时, 需要局部存储单元加载部分数据, 以实现数据复用。对当前帧需要N×N存储大小, 而数据复用重叠区域的大小为N× (N-1) ;对参考帧搜索区域的存储大小为2ph×2pv, 数据复用重叠区域的大小为2ph× (2pv-1) 。由于处理单元 (PE) 不存在局部存储, 采用广播策略分派数据。计算过程应该是PC地址和数据地址的计算, 所有的操作指令都应由PC和数据地址驱动, 系统根据PC取出相应指令得到所需数据, 并由数据地址得到对应的数据, 由新数据或已有数据计算下一次操作的PC值和数据地址循环往复。其数据流经计算部件输出数据结果, 可编程大多是自主申请所需数据, 而可重构或ASIC为了更高的性能大多使用地址生成的策略将数据“灌入”计算单元, 以节省读取数据的时间, 增加系统吞吐率。如图3所示数据存储结构, 块区域存储 (Block Area Mem) 需要兼顾申请读取和“灌入”数据两种模式。实线表示加载数据通过总线分别加载到各个块区域存储中;而当多个PE组需要加载相同数据时, 如虚线表示可以通过一个发出读请求的块区域存储广播到其他需要数据的块区域存储中实现数据的共享。

块区域存储 (Block Area Mem) 负责与总线通信, 以及数据的缓存, 即需要当前帧缓存、参考帧缓存和写入数据缓存。当前帧缓存负责当前块的缓存和预取, 参考帧缓存负责参考块的缓存和预取, 写入缓存负责重建帧和相关变量的写入。若使用灌入模式, 为了达到高的处理能力, 块区域存储 (Block Area Mem) 对当前块和参考块进行缓存和预取, 为阵列处理器提供不间断的数据源。在数据加载中搜索窗口的数据量要多于当前块数据, 能满足搜索窗口的加载即可满足当前块的加载, 若要实时加载32×32搜索区域, 每个搜索区域的最大处理时间是4 115 ns, 即410个时钟要加载1 024个像素分量, 每时钟应加载3个像素。块区域存储 (Block Area Mem) 采用一次加载4个像素分量设计, 即32 bit的数据位宽, 256个时钟可以加载一个32×32搜索区域的像素分量。对16×16宏块和32×32搜索区域数据采用乒乓操作, 使当前块和参考帧在“灌入”模式下不间断地提供数据。根据帧间预测算法对存储需求, 电路工作在100 MHz下, 对于pv=ph=32的搜索区域, 每26个系统时钟要处理1 024个候选块, 若16×16 PE组的每个PE只求一个当前块像素和候选块像素差的绝对值, 剩余操作由其他PE组的PE流水完成, 那么一个16×16的PE组可以处理16个4×4子块像素差的绝对值。这样要完成1 080P30 f/s实时整数运动估计, 需要读取数据的16×16 PE组有1 024/ (26×16) =2.462个, 且这3个PE组可以利用数据共享减少对存储的访问, 而总线可以对各块区域存储进行数据广播, 为减少对内部总线带宽的要求, 块区域存储 (Block Area Mem) 应具备从总线读取相同数据的能力。在Cache模式下20 KB的当前块缓存和参考块缓存共同构成了16个2路直接相联Cache。

如图4所示, 块区域存储 (Block Area Mem) 由互连检测模块 (connect_chk) 、读写控制模块 (rd_wt_ctrl) 、16×16 Buf和32×32 Buf构成。

(1) 互连检测模块:主要用于检测相邻块区域存储与本块区域存储的互连情况, 根据配置的互连情况与周围模块建立连接, 传递数据以实现数据的广播。

(2) 读写控制模块:负责在“灌入”模式时计算下次读取数据的首地址、缓冲区的切换及数据写入;在Cache模式时, 负责对2 KB寄存器进行管理, 构成16个2路直接相联Cache。

(3) 16×16 Buf:用于存储当前块数据, 受读写控制模块的控制。

(4) 32×32 Buf:用于存储参考块及搜索区域数据, 受读写控制模块的控制。

3 结果及分析

用Synopsys公司Desgin Compiler在SMIC 0.13μm CMOS工艺标准单元库下综合, 频率可达197.3 MHz。选用Xilinx公司Virtex6系列芯片Virtex XC6VLX550T进行FPGA验证, 综合后的芯片资源使用情况如表1所示。本结构采用Verilog硬件描述, 在Questasim 10.1d下完成了功能仿真和验证;图5所示为Cache模式时一组2路直接相连Cache替换策略仿真波形图。

第1次访问的数据地址peg_rd_add0为25’d823区号块号 (rd_area_nu, rd_block_nu) 即 (12, 13) , 在输出有效信号valid0有效时, hit0_0、hit0_1均为低, 此次访问没有命中, 替换id (excid0) 为低表示本次读取数据应写入本组2路ram中的0号数据ram。第2次访问的地址仍是25’d823, 在输出有效信号valid0有效时, hit0_0有效表示0号ram命中, 且0号ram的访问计数counter_0为0, 1号ram的访问计数counter_1为1, 表明ram0最近被访问过而ram1没有被访问。第3次访问的地址为25’d564区号块号 (rd_area_nu, rd_block_nu) 为 (8, 13) 与823的块号一致, 但ram1数据有效标志tag_valid1无效, 表示不发生替换exch0为低。第4次访问地址为上次的564, hit0_1有效表示ram1命中。第5次访问的地址为25’d52区号块号 (rd_area_nu, rd_block_nu) 为 (0, 13) , 此次exch0为高表示需要替换cache数据块, 且excid0为低表示要替换ram0的数据。从上述描述可知, Cache替换策略得以正确实现, 电路功能正确。

从上述分析可知, 在Cache模式时对寄存器进行管理。验证结果表明, 灌入和Cache模式可以满足1 080P实时处理对数据加载的需求。

4 结束语

本文在研究分析了视频处理编码中运动估计算法的基础上, 制定了视频阵列处理器数据加载电路设计的详细方案, 通过功能仿真验证了电路功能的正确性, 并综合电路, 得到了资源占用率、工作频率等指标。结果表明, 该电路能够满足1 080P视频处理对数据加载的要求。该研究对于灵活性和高效性的可编程可重构视频阵列处理器结构的设计有重要意义, 后期将选用更多的视频算法对该设计进行验证。

摘要:随着多种视频编解码标准和视频算法的提出, 视频处理器高效性和灵活性显得更为重要。针对视频阵列处理器中数据加载速率与阵列处理单元处理不匹配的问题, 通过对视频编解码标准算法的分析, 深度挖掘数据访存冗余和传输的特点, 在可编程可重构体系结构下, 设计了支持灌入和Cache两种工作模式的数据加载电路, 并进行了功能仿真和FPGA验证。结果表明, 该电路能够满足1080P视频处理对数据加载的要求, 采用Desgin Compiler在SMIC 0.13μm CMOS工艺标准单元库下综合, 频率可达197 MHz。

关键词:视频阵列处理器,数据加载,可编程,可重构

参考文献

[1]毕厚杰.新一代视频压缩编码标准—H.264/AVC (第二版) [M].北京:人民邮电出版社, 2009.

[2]CHEN T C, CHIEN S Y, HUANG Y W, et al.Analysis and architec ture design of an HDTV720p 30 frames/s H.264/AVC encoder[J].IEEE Trans.Circ.Syst.Video Technol., 2006, 16 (6) :673-688.

[3]LIN Y L S, KAO C Y, KUO H C, et al.VLSI design for video coding[M].Springer, 2010.

[4]刘定佳.H_264视频编码算法研究及DSP实现[D].西安:西安电子科技大学, 2010.

[5]黄小平, 樊晓桠, 张盛兵, 等.32位双发射双流水线结构RISC微处理器设计[J].西北工业大学学报, 2011, 29 (1) :6-11.

[6]TIAN X H, LE T M, HO B L, et al.A CABAC encoder design of H.264/AVC with RDO support[C].IEEE International Workshop on Rapid System Prototyping, 2007:167-173.

[7]陶文卿.面向媒体处理的可重构阵列的结构设计与研究[D].上海:上海交通大学, 2010.

[8]张鹏, 杜建国, 解晓东, 等.一种基于多核流水的多标准视频编解码器体系结构[J].计算机研究与发展, 2008, 45 (11) :1985-1993.

[9]PASTUSZAK G, TROCHIMIUK M.Architecture design and efficiency evaluation for the high-throughput interpolation in the HEVC encoder[C].Digital System Design (DSD) , Euromicro, Los Alamitos CA, 2013:423-428.

视频调理器 篇2

近日,在北京举行的安防展上,TI视频与视觉业务部视频业务经理Cyril Clocher及视频监控产品经理王承宁博士与记者分享了TI视频监控业务发展战略和最新的视频监控产品。

视频监控发展趋势

Cyril表示:“视频监控正在往多通道和IP网络摄像机方向发展。从多通道摄像机的发展方向可以看到,由于D1通道成本下降,D1将会逐步取代CIF;其次,4、8、16通道D1 30帧/s将成为主流;未来几年,DVR市场在向NVR发展的同时,将继续保持批量增长。而IP网络摄像机的发展前景也令人欣喜,在未来10年的商机中18%为GAGR;720 P与1 080 P实时分辨率将成为主流,也就是说IPTV的分辨率将会成为市场的主流;5百万至1千万像素开始进入高端市场;越来越多的IP摄像机需要简单的视频分析功能,如对摄像机的攻击、智能运动检测。高清视频协处理器VICP 2.0

高清VICP 2.0最大的特点就是可以支持所有从D1到高清的协处理,即用同样的硬件、不同的软件,可以实现从D1到高清所有的解决方案。Cyril举例道:“把VICP2.0放在DM8168 D1中,就可以实现摄像头的应用。如果放在IP摄像头中,就可以完成IPC编码。有这样的协处理器,客户一旦掌握了其使用方式,其一个投资就可以应用到所有的产品中。”

达芬奇混合DVR/DVS产品系列

目前最高性能的达芬奇处理器就是DM8168,其结构框图如图1所示。它集成了1 GHz ARM Cortex-A8和1 GHz TI C674x DSP内核,以及若干VICP 2.0。DM8168支持将高清多通道系统的所有捕获、压缩、显示以及控制功能完美整合于单芯片之上。对于混合型安防DVR解决方案而言,可同时支持16通道H.264HP带CIF子码流的D1编码与8通道D1解码,并具有视频混合与图像混合功能,支持多达3个独立显示器。无缝接口连接至4个TI的多通道视频解码器TVP5158,可无缝捕获多达16个D1视频通道。TVP5158可自动控制对比度,降低噪声,提高压缩比与整体视频质量,这样不但可取消额外的FPGA与外部存储器,还可简化设计,提高系统灵活性。

达芬奇IP摄像机处理器

DVR是目前市场的重点,而且大家注重的是目前市场的主流产品。但根据TI的分析,IP摄像机将是今后的发展方向,会有越来越多的IP摄像机被应用,其代表是:具有视频分析功能的标准IP摄像机,百万像素和几百万像素以上高清的IP摄像机解决方案。Cyril向记者着重介绍了支持智能分析的视觉协处理器DMVA。它可以做5种简单的视频分析:人数统计、触发区、智能运动检测、摄像机篡改检测及流媒体元数据。例如对于摄像头的攻击,如果有人想偷东西,发现有摄像头,继而调整摄像头的方向或者聚焦,或者把灯关掉,所有这些行为都会引发DMVA智能分析的功能,通知后端现在有人在动摄像头,TI很多客户要求把这种功能加到标准的IP摄像机中。这些视频分析的功能并不是高端的视频分析,只是在摄像头前端加上一些视频分析功能,可以帮助客户最快地获取一些前端的信息,如果客户需要高端的、精确和复杂的视频分析,可以把摄像头前端所有收集到的信息通过网络传到后端,然后在后端的服务器上做更复杂的视频分析功能。

视频调理器 篇3

1视频图像数字处理器的构成

采用TMS320DM642的实时视频图像数字处理器,主要功能有:视频采集(视频解码)、高速处理卡(DSP)、数/模转换(视频编码)、视频合成(复合视频、超级视频)[2]。外围电路主要包括CCD高速摄像机、视频解码器、视频编码器、执行机构CPLD和TMS320DM642外部存储器接口(EMIF)连接的SDRAM图像帧存储器、FLASH程序存储器,及其他DSP外围电路(复位、电源连接、JTAG调试端口)等。图1为该处理器的结构图。

2TMS320DM642芯片简介

TMS320C6000系列DSP芯片是目前最先进、性价比最优的DSP芯片之一。采用TMS320DM642,高性能32位定点DSP,工作主频最高达720 MHz,处理性能可达5 760 MIPS。可实时实现多路数字视频/音频的编码运算。 其主要特点包括:具有VelociTI先进VLIW结构内核;片内集成大容量SRAM;16/32/64 b高性能外部存储器接口(EMIF)提供与SDRAM,SBSRAM和SRAM等同步/异步存储器的直接接口;片内提供多种集成外设(多通道DMA/EDMA控制器、多通道缓冲串口McBSP、多通道音频串口McASP、32 b通用计数器 Timer、支持多种复位加载模式Boot);内置灵活的PLL锁相时钟电路[3]。

3视频图像处理器外围电路

3.1 视频采集与数/模转换电路

视频采集电路选用的主要芯片为解码器TVP5150,它可以接收2路复合视频信号(CVBS)输入和1路超级视频信号(Y/C)输入。如图2所示。

视频信号输入范围为0.75 Vpp,而外部视频信号输入范围一般为1 Vpp,所以外部视频输入与TVP5150视频输入之间串接18 Ω和56 Ω到地分压电阻网络,使用前一定要将视频信号输入范围调整到1 Vpp。

DM642用通用I/O口GP0[0]控制I2C总线的切换,GP0[0]为“0”时,选通第1和第2通道TVP5150,而GP0[0]为“1”时,则选通第3和第4通道TVP5150。

数/模转换电路芯片为编码器为SAA7121H,DM642的4个VP口已经均被TVP5150所使用,因此,SAA7121H只能与其中的的一TVP5150复用一个VP端口,这里选择VP0A端口。图3所示为视频输入输出接线图。

3.2 执行机构CPLD

CPLD(复杂可编程逻辑器件),是在传统的PAL、GAL基础上发展而来。凭借半导体工艺技术及CAD工具的发展,如今1片CPLD可以代替几十乃至上百片PAL,GAL,可提供十万门以上的可用门。与FPGA相比,CPLD比较适合计算机总线控制、地址译码、复杂状态机、定时/计数器、存储控制器、DMA控制器、CACHE控制器、图形控制器、数据压缩编码等I/O密集型应用,且具备无需外部配置ROM、时延可预测等特性。目前的CPLD普遍基于E2和FLASH电可擦技术,可实现100次以上擦写循环。考虑到该系统设计方案,选用了型号为CY37064P100的复杂可编程逻辑器件,工作电压为3.3 V。

3.3 外部存储器接口(EMIF)电路

数据存储器采用SDRAM有2个优点:一是速度高,由于同步存储,存取时间可达6~7 ns;二是单片的容量大,有利于减小整个图像处理系统的体积。注意并非所有的SDRAM器件都能够实现与TMS320DM642的无缝接口(glueless interface)。只有那些Precharge(Deactive)管脚对应为A10的SDRAM才能与TMS320DM642的EMIF完全兼容[4]。

其中SDRAM对应DM642上的CE0映射的地址空间,使用2片32位数据总线的同步动态RAM,高32位存储在1片RAM中,低32位存储在另一片RAM中,满足DM642 64位数据总线要求。SDRAM在CE0子空间的具体定位为:0x80000000H~0x81FFFFFFH。

系统的代码固化在FLASH中,FLASH在CE1子空间占据的具体空间定位为:0x90000000H~0x9007FFFFH。DM642只提供20根外部地址总线,所以CE1子空间最大寻址范围为1 M×8 b,SEED-VPM642板上CE1子空间除了分配给FLASH以外,还分配给状态/控制寄存器、UARTA、UARTB等资源使用,其中FLASH只占CE1子空间的前一半的寻址空间,即最大可寻址范围为512 k×8 b,而FLASH的设计容量为4 M×8 b,所以采用分页技术实现对FLASH的访问,即将整个4 M×8 b的FLASH分成8个512 k×8 b的页,而页地址PA21,PA20,PA19则由页地址寄存器提供(页地址寄存器位于CPLD中)。

TMS320DM642有多种上电自举方式,通过复位时AEA[22:21]引脚的状态来选择,有FLASH,HPI或PCI三种自举方式。该电路默认方式为EMIFA通过8 b的FLASH自举[5]。

3.4 其他DSP外围电路

时钟电路为TMS320DM642提供时钟。输入时钟CLKIN为50 MHz,CLKMODE[1:0]上拉或下拉为10,即片内PLL设置为×12,CPU内核频率为600 MHz。而片上外设总线、EDMA传输和L2存储器的工作频率为CPU内核的1/2,即300 MHz;片上定时器工作频率为75 MHz。

TMS320DM642的核(CORE)电压为1.4 V,I/O电压为3.3 V,因为需要2种电源,所以要考虑供电系统的配合问题。在加电过程中,应当保证内核电源先上电,最晚也应该与I/O电源一起加。关闭电源时,先关闭I/O电源,再关闭内核电源。

讲究供电次序的原因在于:如果仅CPU供电,I/O对芯片不会产生损害,只是没有输入、输出能力而已;如果反过来,周边I/O得到供电,而CPU内核没有加电,那么芯片缓冲/驱动部分的晶体管将在一个未知状态下工作,这是非常危险的。

正因为如此,电路中设计了复位电路,它不仅提供系统上电、工作电压异常时的自动复位及人工控制复位,而且也方便调试电路。

TMS320DM642的仿真接口为JTAG形式,能与各种形式的仿真器相连接。JTAG端口为整个系统的仿真调试提供了方便,借助于TI公司的CCS开发环境以及与JTAG端口相连的硬件仿真器C64xx XDS510 Emulator,可以实时监控TMS320DM632的内部工作状态。

4视频图像处理过程中图像数据的存放

在由内部数据RAM,片外数据RAM构成的DSP数据系统中,为了获得较快的处理速度,必须注意数据的存放位置。这里,针对视频图像处理算法的性质给出以下原则[4]:

(1) 帧内处理算法,处理时所用到的只是当前帧的一部分数据。需要存放的数据量很小,此时待处理以及处理过的视频数据可以同时存放于片上RAM;

(2) 帧间处理算法,涉及到的数据量超过2帧以上,则待处理的数据及处理过的数据均存于SDRAM上。片内RAM只存放运算的中间结果;

(3) 片上数据的存放应注意地址冲突问题。

5结语

该图像处理器方案具有处理速度快、实时性相对较好的特点。使过去因运算量太大而无法实现的算法,在高速DSP系统上就可以实现,并且该系统控制灵活,有HPI(PCI)以及通用异步串行接口,可以方便地与单片机连接。这样,许多系统级的控制工作就可由单片机来完成。目前,TMS320DM642 DSP芯片超强的运算性能正日益受到重视,它的发展前景不可估量。

参考文献

[1]张雪松,倪国强,周立伟.带有DSP芯片的新型实时数字图像处理系统[J].光学技术,1997,4(4):16 18.

[2]Downton A,Crookes D.Parallel Architectures for Image Pro-cessing[J].Electronics&Communication Engineering Journal,1998,10(3):139 151.

[3]李方慧,王飞,何佩琨.TMS320C6000系列DSPs原理与应用[M].北京:电子工业出版社,2003.

[4]任丽香.TMS320C6000DSPs的原理与应用[M].北京:电子工业出版社,2000.

[5]陆佩芸,宋莹,季晓勇.TMS320C6000 DSP系统的引导设计[J].微型机与应用,2004(3):9 11.

视频调理器 篇4

在当今信息化时代的浪潮中, 多媒体技术和通信技术的融合形成了多媒体通信技术, 数字视频处理以及传输已经成为多媒体领域的一个主要方面被广泛地研究。如进行实时视频监控, 视频电视会议, 视频聊天等, 需要进行数字视频的处理和传输。但是, 一直以来由于视频数据量大, 视频传输技术的应用受到很大制约。因此必须根据视频传输的特点采用合适的编码压缩算法, 才能达到较好的传输效果。

2003年3月, ITU-T/ISO[1]正式公布了H.264[2]视频压缩标准, 由于其相比以往标准的出色性能被人们称为新一代视频编码标准。具体讲, 与H.263或MPEG-4相比, 在同样质量下, 其码率能降低一半左右;或者说在同样码率下, 其信噪比明显提高。

H.264编码的实现有多种方法。在嵌入式系统中实现H.264编码有无可比拟的优越性。采用嵌入式系统代替模拟的和PC机系统。嵌入式系统体积小巧, 功耗较低, 运行稳定且性能强劲, 能够满足各种应用场合和应用领域的需要。目前的嵌入式视频系统中大都采用多媒体DSP处理器作为主要的视频处理器, 其所具有的图像处理性能是以往系统所无法企及的。

在上述视频技术发展的背景下, 本文将对视频系统中的核心技术——视频压缩编码技术进行研究, 基于TI公司最新的媒体处理器Davinci DSP, 对H.264视频编码进行优化。

2、测试平台和移植

这里我们选用开源代码x.264作为研究的代码, 原始的代码并不能直接在PC和DSP环境下运行, 需要进行移植。而如果一开始就移植在DSP平台上, 因为代码未经过优化, 视频编码的速度会非常的缓慢, 调试, 察看运行结果都不方便。所以先将原始代码移植到PC环境下的C语言平台上, 并且在C语言平台上进行C语言级别的优化, 然后移植到达芬奇DM6446的平台环境下, 再在该环境下进行系统级和汇编语言级别的优化。

首先原始代码中不同文件夹里有重名文件, 为了以后可以方便的移植到DSP平台, 将这些重名文件重新命名。

其次将其移植到VS2008平台上。x.264编码器适合在多个平台运行, 针对这些平台, 编码器的开发者对x.264分别进行了优化, 因此, x.264编码程序中包含了几个平台的汇编程序, 这些不同平台的汇编指令在VS2008上是不能运行的, 因此我的首要任务是把x.264编码程序中汇编指令从原来程序中剔除。

然后去掉代码中和MMX (Multimedia eXtensions) 、SSE (MMS的超级指令) 有关的语句。这些指令在DSP平台上并不需要。

最后去掉预编译头文件, 添加HAVE_STDINI_H和__X264__预处理器定义, 设置头文件和其他包含目录。

3、C语言级别优化

经过移植, 代码就可以在VS2008平台上进行运行了。但是未经优化, 即便在PC机上, 其运行速度还是较慢, 达不到要求。C语言优化主要是对代码算法改进, 调整代码结构等。下面我们从几个方面对其进行C语言优化。

3.1 代码精简

由于本文只针对x.264的基本档次级别, 所以只有I帧和P帧两种帧类型, 因此可以将和B帧有关的代码删除。

在帧内预测和帧间预测中, x.264是采用SATD作为判断依据, 由于SATD是残差进行哈达玛变换后所有元素的绝对值相加, 这样做有利于控制码率, 但是会导致计算量的增加;这里采用SAD作为判断依据, SAD是所有元素的绝对值相加, 中间减少了哈达玛变换。减少了运算量, 对最后视频编码效果也不会带来太大的影响。

率失真函数的作用主要是用来控制码率的大小, 在预测过程中, 采用率失真函数的话, 就必须在某一模式下计算残差值在某一个标准下的值, 然后再计算在这种模式下, 所耗费的代价值, 两者相加, 并且取其中结果最优的。而如果不采用率失真函数的话, 我们仅仅只在某一个模式下计算残差值在某一个标准下的值, 而不需要计算在这种模式下所需要的代价值。由于预测过程中经常需要进行多种模式的预测, 调用的次数比较多, 计算量很大, 所以, 我们可以剔除率失真函数。由于率失真函数得到的是最优解, 所以剔除率失真函数后会导致码率的增加, 但是图像的质量并没有下降很多。考虑到可以节省大量的计算量, 所以还是值得的。

在熵编码时, 虽然CABAC的性能比CAVLC要好, 但是CABAC的计算复杂度要比CAVLC要大, 对于基本档次来说, CAVLC已经能满足基本要求, 因此我们采用CAVLC。

其次, 尽量地将那些相对独立的程序模块化, 并调整程序的结构, 调整程序功能模块的实现顺序, 删除多余、重复的代码。

3.2 循环展开

这条优化在VS2008平台上看不出什么效果, 因为PC机的运行速度很快, 但是在DSP平台上就有比较明显的效果。

能使用一层循环的绝不使用双层循环甚至更深层次的循环。循环过程中应减少跳转操作, 如“if…else”操作, 这种分支操作会带来跳转语句, 跳转语句会打破流水, 使程序并行度下降。采用的方法是将判断语句放在循环之外, 或将判断的内容改为零或非零的判断, 这样编译器可以将判断条件作为执行条件, 从而避免跳转操作, 使程序并行度提高。由于H.264的代码是一帧一帧, 一块一块处理数据的, 这就必然带来大量的循环操作, 加之每个循环内部又要对帧或数据块进行一系列的分类判断, 使循环的效率非常低。我们将循环展开, 并且通过提前预测等方法减少循环类对帧或数据块的判断语句, 来提高代码运行的效率。

3.3 帧内预测改进

在帧内预测[3]中, H.264支持的方式为4种Intra16x16和9种Intra4x4帧内亮度预测模式以及4种色度预测模式。帧内预测的过程如图1所示:

这种帧内预测, 我们称之为完全搜索。它的预测过程是这样的:首先, 针对宏块进行预测, 把预测后的帧内残差按照某一个标准计算出最小的代价, 选择最小代价所对应的模式。其次, 我们分别用9种模式对4x4的块进行预测, 对于4x4块的每种模式采用与16x16块中同样的标准计算出最小代价。最后, 把16x16的最小代价与16个4x4块的最小代价和作比较, 并作出最佳模式的选择后保存相应的最佳模式。由上面的分析可知, 完全搜索方法的计算量是非常大的, 对于亮度块而言, 我们需要做4次16x16块的模式预测以及16x9次的4x4块的模式预测 (一般情况) , 对于帧内编码来说, 模式选择耗时占据了极大的比重, 因此我们必须对完全搜索方法进行一定的改变。可以利用提前终止来尽量减少对一些模式的计算。如图2是改变

后一个流程:如图2所示。

其中阈值的选择跟量化参数有关, 不同的量化参数, 阈值也相应变化。在本文中, 我们的QP选取28, 在该条件下, 进行大量实验分析表明, 阈值选取1500是比较合适的, 能够在质量和速度之间获得较好均衡。由于16x16块编码比特要比4x4块编码比特少, 如果16x16块预测后的SAD明显小于1500, 我们就只采用16x16预测模式, 而不再对4x4的模式进行选择计算。这种节省是比较可观的。

除此之外, 针对16x16的4种预测和4x4的9种预测模式, 我们也可以采用提前终止的方法。具体操作是选定一个阈值, 大于该阈值则认为这个模式为最佳, 退出循环。小于该阈值则继续进行下面的模式运算。

3.4 帧间预测改进

H.264利用帧间预测[4]来减少时间冗余, 一共用了7种不同的块尺寸来进行运动估计/补偿 (16x16, 16x8, 8x16, 8x8, 8x4, 4x8, 4x4) 。这些大小不同的块在宏块内部形成了一个两层的树结构, 第一层包括16x16, 16x8, 8x16, 第二层被称为P8x8类型。在P8x8类型中, 每一个8x8块可以被再分为更小的块, 例如8x8, 8x4, 4x8, 4x4。

对于帧间预测, 我们依然采取提前终止的方法。将宏块划分为两大部分, 16x16、16x8、8x16为一部分, 8x8、8x4、4x8为另一部分。首先, 我们需要计算16x16宏块的SAD, 如果小于阈值T1, 则选16x16, 大于阈值T1的话, 在计算8x8宏块SAD, 大于阈值T2, 则进行16x8, 8x16的运算, 小于阈值T2则进行8x4, 4x8, 4x4的运算。具体流程如图3。

在16x16大小的块中, P帧还存在一种SKIP模式, 它没有运动和残留信息可被编码。关于SKIP模式, 在原代码中, SKIP模式是首先要被判定的模式, 因为它的编码量最小, 而统计表明, 在对视频编码时, 各个模式所占用的比例相差很大。其中, 16x16模式的比例平均超过70%。源代码中关于SKIP模式判定是这样的, 依据算法, 只要一个宏块的1个亮度块和2个色度块中有一个不是SKIP, 那么这个宏块就不是SKIP。而根据实验, 亮度块为SKIP, 色度块为非SKIP模式的情况很少, 我们可以在不影响编码质量的前提下, 略去对色度块SKIP的判定。

3.5 数据类型及运算的修改

因为一般图像像素点数值大小为0-255, 这样的数据用unsigned char类型的数据存储即可, 很多函数比如DCT变换, SAD差值计算等针对像素的运算, 就可以将数据类型改为unsigned char型。浮点运算尽量用整型运算代替, 或者改为查表。有些乘除法可以改为移位运算, 移位运算比乘除运算效率要高很多, 尤其是在DSP等一些嵌入式系统中。

3.6 内联函数和函数指针重排

把经常调用的函数改为内联函数, 减少来回寻址的时间。这一条也是在DSP平台上能更好的体现出来。在一个是函数指针的重排, 重排有利于软件流水, 有利于并行执行, 可以减少数据读取所占用的时间。比如做4x4dct变换的函数sub4x4_dct (int 16_t dct[4][4], uint8_t*pix1, int i_pix1, uint8_t*pix2, int i_pix2) , 在DSP平台上, dct[4][4]的首地址存放在寄存器A4中, *pix1的地址存放在寄存器B4中, i_pix1的值存放在寄存器A6中, *pix2的地址存放在寄存器B6中, i_pix2的值存放在寄存器A8中。由于在B数据通路单元只有一个交叉通路, 所以在读入pix1和pix2数据的时候只能依次进行, 无法并行进行, 将接口改为sub4x4_dct (uint8_t*pix1, uint8_t*pix2, int i_pix1, int i_pix2, int16_t dct[4][4]) , 这样函数的接口中的参数*pix的地址放在寄存器A4中, *pix2的地址存放在寄存器B4中, i_pix1的值存放在寄存器A6中, i_pix2的值存放在寄存器B6中, dct[4][4]的首地址存放在寄存器A8中, 这样在读数据的时候, 就可以使得A和B数据通路单元分别进行自己的操作。这样的改进在DCT和SAD等函数中都可以使用, 和后面的汇编语言一起, 能够获得良好的并行效果。

3.7 量化函数和扫描函数合并

在源代码中, 各模块都是相对独立, 这样做虽然可以使代码流程清晰易懂, 但也会频繁的调用函数, 带来不必要的开支。一般来说, 量化以后的数据都要进行Zig Zag[5]扫描, 以方便后面的熵编码。源代码中量化函数和Z扫描是分开进行的, 我们这里将这两个函数合并, 量化完后直接Z扫描, 减少不必要的函数调用, 节约时间。

4、系统级优化

所谓的系统级优化, 是指合理配置系统资源, 来使程序运行达到一种良好的状态。前面C语言优化时, 我们使用的是VS2008的平台, 现在将前述代码移植到DSP上, 所使用的调试环境为CCS平台。

CCS平台本身就提供了很多系统优化的选项以供选择, 不同的选项针对不同的代码有不同的优化效果, 这需要根据自身代码情况合理的选择。经过反复测试, 本程序选取了下面几种优化选项:-03选项, -mh选项和-mt选项。

-03选项可以执行控制流程, 简化用寄存器分配变量, 执行交替循环, 排除未用的代码简化公式和表述, 体通信的蓬勃发展, DSP也越来越多的应用扩大对内联函数的调用, 排除未被调用的函数, 简化返回值没被使用的函数, 让小函数变成内联调用, 保存函数说明, 保存函数说明, 以便主函数被优化时知道被调用品中, 都会找到它的影子。近年来, 随着多媒函数的属性, 识别文件级别的变量的特性。

-mh选项, 去掉流水线的epilog, 减少程序的大小。效果明显, 但是有可能出现读取地址超出有效范围的问题, 所以要在数据段的开始和结尾处增加一些padding, 或者在分配内存时保证数组的前面和后面一段范围内也是有效的地址。

-mt选项, 更积极地安排存储器操作, 表示在程序中没有使用alaising, 这使得编译器可以进行比较好的优化。

除了系统提供的优化选项外, 存储器的配置优化也很关键。将当前帧、参考帧和当前帧的重构都放至片外存储器, 其他数据代码如程序代码、全局变量、vlc码表、各编码模块产生的中间数据等均放至片内, 同时通过profiler分析代码调用频率, 合理安排代码存放位置, 从而提高cache命中率。

合理布置程序代码段和数据段的内存布局也很重要。为防止有效代码、数据在缓冲存储器中相互排挤, 应尽量把顺序执行的代码、同时使用的数据放在相邻的物理空间内;若函数模块和数据包含在同一个循环中, 循环体的大小应尽量与Cache的容量相吻合, 以便能把整个循环体全部放入cache中;为了提高cache中数据的重复利用率, 把数据操作构成的一条数据处理链, 链中的下一级操作直接使用上一级操作留在cache中的数据。

5、汇编级别优化

对于嵌入式系统, 因为自身资源限制, 导致CPU的频率和PC机相比有一定差距。在嵌入式系统中, 汇编语言的运行效率比C语言高的特点能很好的体现出来。这里所考虑的汇编优化主要指线性汇编, 线性汇编语言是为了简化C6000汇编语言程序的开发而设计的。与标准汇编语言相比, 采用线性汇编语言进行编程不需要考虑并行指令的安排、指令延迟和寄存器的使用。

下面以SAD函数来说明线性汇编的方法。SAD的原理就是把当前点和预测点相减, 取绝对值后累加实现。循环体代码如下:

双重循环在DSP上运行的话非常的耗时, 加之这个SAD会依据块的大小来运算, 如4x4块或者16x16块等, 要想将循环展开, 使用汇编语言改写是个很好的选择。H.264中一个像素点的亮度或者色度值用8位存储, 而DM6446存储器是32位的, 可以将4个8位数据一次处理。利用C64x+的汇编指令, 如LDNW无边界调整的字读取指令一次将4个像素点的值读入寄存器中, 可以把当前宏块数值放入A2寄存器, 预测宏块数值放入B2寄存器, 使用不同的功能单元, 这两条读取指令可以并行执行。

SUBABS4指令执行A2寄存器与B2寄存器4个字节相减后取绝对值的操作, 结果放入A2寄存器中。

C64x+并没有提供一个寄存器中4个字节累加的指令, 我们可以借助DOTPU4点积指令。它将两个无符号数相乘后再相加。我们可以预先设定寄存器B0的值为十六进制常数0x01010101, 比如:

通过点积得到的结果就是我们需要的累加值, SAD的循环部分线性汇编如下所示:

6、测试结果

本文的测试结果由两方面组成, 一是在VS2008上进行C语言优化的结果, 还有一个是DSP的CCS平台上的系统级和汇编语言级优化结果。其实VS2008平台的结果用秒来表示视频编码的速度, 而CCS平台上则用CPU周期数来表示视频编码的速度。

在VS2008平台上, 测试结果是在剔除率失真函数以后进行比较的, 剔除率失真会造成码率的增加, 但是信噪比变化不是很大。选取不同的序列, QP统一设置为28的情况下, 结果如表1所示。

由此可见C语言的优化取得了较显著的成果, 剔除率失真函数以后所进行的优化工作可以使速度提高40%, 并且码率变化不是很大, 这在工程应用中是值得的。从结果来看, 上述优化过程对于大序列, 中低等运动量的优化效果较好, 满足一些实时监控系统的要求。

C语言优化到这个地步就可以为移植到DSP上减轻很多工作, 也可以使程序能够较好的在DSP上运行了, 在DSP的CCS平台上, 我们选用foreman这段原始视频, 格式为qcif, 帧数为90, 步长依然为28, 结果如表2所示:

由数据可见, 系统级和汇编优化后, 速度又提高了2.87倍左右。

7、结语

本文主要从三个方面, C语言级别, 系统级别和汇编语言级别对H.264的代码进行了优化, 使H.264视频代码的速度有了较大的提高。C语言级别主要是对一些函数参数, 数据的修改, 重点针对帧内预测和帧间预测做了改动。系统级别主要是通过合理的使用优化选项, 合理的放置数据和程序代码。汇编语言级别主要是通过将耗时较大的函数改写汇编语言。通过上述操作, 达到了对H.264视频编码的优化效果。同时, 对于像foreman这种有90帧的长视频, 如果一开始就在DSP上移植优化, 由于未经优化的代码运行速度非常慢, 大约几分钟甚至几十分钟只能编码一帧, 察看结果十分不方便, 需要大量等待时间, 所以先在PC机的平台上进行C语言级别的优化是个明智的选择, 可以方便随时察看结果, 进行调试。

摘要:随着信息化科技的发展, 多媒体技术越来越渗透到我们生活的方方面面。而其中视频技术是发展最为迅猛的技术之一, 在很多方面都有应用, 如实时监控, 视频会议等。最新的视频编码标准H.264, 相对于以前的标准, 在分层编码、多帧参考、帧内/帧间预测编码、变换编码等技术方面做了巨大的改进。因此, H.264基本档次编码器的移植和优化是非常有实用价值的。加之, 德州仪器公司推出的新型处理器达芬奇DM6446处理器是一款专门针对多媒体应用的处理器, 它将固定功能器件的高效率和可编程器件的灵活性结合在一起, 有着优良的性能。对H.264在达芬奇的平台上优化, 利用DM6446的硬件资源, 能够收到良好的优化效果。

关键词:多媒体通信,视频编码,H.264,帧内预测,帧间预测,整数变换,SAD

参考文献

[1]Thomas Wiegand&Gary Sullivan.Overview of the H.264/AVCvideo coding standard[J].IEEE Transactions on Circuits and Sys-tems for Video Technology, 2003, 13 (7) :560-575.

[2]Richardson I E G.H.264 and MPEG-4 video compression[M].UK:John Wiley&Sons Ltd, 2003.

[3]裴世保, 李厚强, 俞能海.一种快速的H.264/AVC帧内预测模式选择算法[J].计算机工程与应用, 2005, 3 (10) :71-73.

[4]Pan L J&Hoy S.Fast mode decision algorithm for H.264inter-prediction[J].Electronics Letters, 2007, 43 (24) :1351-1353.

视频调理器 篇5

日前,德州仪器(TI)宣布推出一款可支持全高清(HD)分辨率的最新DMVA1 IP网络摄像机片上系统(SoC)。通过为设计增加智能视频功能,该解决方案将掀起视频监控市场一轮重大的创新热潮。此前,视频分析系统的开发不仅成本高昂、极具挑战性,而且非常难以实现集成,但TI业界领先的最新DMVA1 SoC将改变这一局面。DMVA1的目标领域为视频监控市场,其通过集成TI的第一代视觉协处理器提供入门级的分析功能,从而使客户能够轻松部署众多智能分析功能,如人数统计、触发区(trip zone)、智能运动检测、摄像机篡改检测以及流媒体元数据(streaming metadata)等。此外,由于在同一芯片中紧密耦合了视觉协处理器与智能分析功能,客户能够将具有视频分析功能的IP网络摄像机的成本降低一个数量级。

作为TI专用发展规划中针对IP网络摄像机应用推出的新一代产品的一部分,DMVA1SoC将使视频分析成为该市场的事实特性,并将为安防客户的设计工作提供更多选择。为了简化实施方案,加速产品上市进程,客户可通过订购完整的IP网络摄像机参考设计评估DMVA1视频安全摄像机SoC。

上一篇:高校行政管理下一篇:龙舟文化