基于基于DSP和和FPGA的视频编码器的视频编码器
随着宽带Internet的快速发展和电子设备计算能力的迅速提高,在Internet上实时传输高清晰度视频信息成为可能,
以Internet为传输媒介的视频会议、视频监控、Internet电视台等视频应用方兴未艾。
随着宽带Internet的快速发展和电子设备计算能力的迅速提高,在Internet上实时传输高清晰度视频信息成为可能,以Internet为传
输媒介的视频会议、视频监控、Internet电视台等视频应用方兴未艾。这些应用的一个共同特点是,都需要一个高性能的实时视
频编码器,特别是高分辨率的视频应用给视频编码器的计算能力提出了很高的要求。例如,一幅720×576的4∶2∶2视频格式的画面,
包含有3240个16×16的YUV宏块(MacroBlock,即MB)。如果该视频帧按照P帧或者B帧进行压缩,那么每一个YUV宏块都要进行
运动估计、运动补偿、DCT(Discrete Cosine Transform)/反DCT变换、量化/反量化和VLC(Variable Length Coding)等环节的
运算。如果进行实时压缩(每秒钟压缩25帧)的话,大致需要316~5GIPS(Instruction persecond)的计算能力。
目前,单一的CPU/DSP一般还不具备这样的计算能力。为了解决高清晰画面的实时视频压缩问题,本文提出了DSP和
FPGA(Field Pro-grammable Gate Array)协同设计方案。使用FPGA完成视频采集、YUV(视频亮度Y、色度分量
UV)分离、数据I/O(Input/Output)等所有周边功能,使用高性能的DSP进行视频压缩编码,因而在视频编码器内DSP和FPGA能够
进行流水操作,有效地提高了编码器的性能。
为了降低算法的计算复杂度,本文提出了基于宏块空间复杂度的宏块编码类型判别算法(MTJBSC)。在标准MPEG24视频运动估
计算法中,判别宏块的编码类型是通过计算当前宏块内像素值方差和参考宏块与当前宏块之间的方差来实现的,因此计算量很
大。MTJBSC算法首先计算出当前宏块的空间负责度(MBC),然后通过比较当前宏块的MBC与SAD(Sum of Absolute
Difference)值来判断当前宏块的编码类型,大大降低了算法的计算复杂度。
1 硬件设计方案
基于TI公司的图像开发工具包(Imaging Developer Kit,即IDK)[2]架构,设计了视频编码器的硬件平台。从整体上来讲,视频编码器
的硬件实现由DSP和FPGA两个模块组成,其逻辑框图如图1所示。由于视频压缩编码计算量很大,为了尽可能提高视频压缩帧
率,由DSP专门负责视频压缩编码,而视频采集、YUV转换和编码器I/O接口等其它功能则交由FPGA模块来实现。
如图1所示,用户控制命令(例如视频压缩模式)由FPGA模块首先截获,然后FPGA模块向DSP模块产生外部中断,DSP在响应中断
时读取存储在FPGA中的用户控制命令字,然后DSP解析命令字,并根据用户要求的视频格式、帧图像分辨率和视频压缩码流速
率进行视频压缩编码。
模拟视频信号经视频解码器转换为裸视频数据流,该数据流(或从数字摄像机直接获得的数据流)经FPGA预处理后送入帧存中。
DSP读取帧存中的数据进行压缩编码,压缩后的视频数据送入FIFO中,最后FIFO中的数据通过串口送给信道编码器。
FPGA模块的逻辑框图见图2。如图2所示,视频解码器首先将模拟视频信号量化为复合的YUV数据,然后经FPGA进行YUV分离
(和滤波)后送到帧存(图1中的SDRAM1)中,C6201使用DMA通道(异步方式)通过FPGA读取帧存中的YUV数据进行压缩编码。帧
存(SDRAM1)在刷新(refresh)或缺页(pagemiss)时会引起DMA读等待,为了平滑这种等待引起的DMA读数据的抖动,设计时在
FPGA的内部实现了一个高速FIFO。视频帧存采用了乒乓结构,将8M字节SDRAM分为两个4M字节的地址空间(每一个地址空间
可以容纳一帧YUV视频数据(720×576×115字节)),一个地址空间用于存储当前正在采集的视频数据,另一个地址空间用于DSP的
数据读取。在压缩CCIR601格式的视频图像(每秒25帧)时,由于DSP的处理速度(大约每秒10帧)慢于视频采集的速度,所以FPGA