基于DSP的机载视频图像实时压缩与处理系统
帧中插入空数据。编帧完的数据64 位并行缓存到外围SDRAM 中。在FIFO 中断服务程序中, 启动一次DMA 传输, 将缓存在SDRAM 中的帧数据流传输到FIFO 中, 实现256 KB/ s 的恒定速率的数据传输。
需要注意的是原始图像和压缩码流在DSP 中的存储。视频端口、编码程序都要访问原始图像, 例如在某一时刻,编码程序访问当前帧图像, 而视频端口正在输入下一帧图像, 为了避免访问冲突, 原始图像在DSP 中采用三缓冲区进行管理。压缩码流由编码程序写入, 根据FIFO 状态恒定码率输出, 所以采用环式存储管理协调读写的步调。
2. 4 内存分配
DM642 片内只有256 KB 的存储空间, 因此当前帧、参考帧和当前帧的重建帧都必须放至片外存储器, 压缩码流若被主机读取, 也放至片外。其他数据如程序代码、全局变量、VLC码表、各编码模块产生的中间数据等均可放至片内。
由于CPU 访问片外的速度通常要比访问片内慢几十倍, 片外数据的传输通常成为程序运行时的瓶颈, 即使代码效率很高, 流水线也会因为等待数据而被严重阻塞。解决这一问题的有效方法是用EDMA 传送数据。程序是逐个宏块进行编码时, 在编码当前宏块的同时, EDMA 将下一个宏块的数据、用到的参考帧数据由片外传送至片内;当前宏块做完成运动补偿后, EDMA 将重建后的宏块由片内传送至片外。这样CPU 只对片内数据进行操作, 使得流水线可以顺利进行, 而压缩码流按逐个码字有时间间隔地写入, 可由CPU 直接写至片外。
3 基于DM642 的软件优化技术
为了提高代码的执行效率, 必须充分利用C64x CPU的VL IW 和流水线结构对其进行优化, 使程序无冲突地并行执行[ 6] 。MPEG 4 编码程序中包含大量的循环体, 例如计算量化、DCT、半像素插值、运动补偿和构建重建帧等。这些循环体代码并不复杂, 且执行次数频繁, 占据了编码的绝大部分时间, 因此循环体的优化是重点。本文所采取的代码优化为C 语言优化和编写线性汇编两个步骤,主要从消除数据相关性、数据打包和循环体的软件流水3个方面进行优化。
3. 1 针对C语言的优化
C 代码的优化主要依靠开发环境CCS 的编译器完成, 编程者需要合理选择编译选项, 并利用特定的关键字和指令向编译器提供优化信息 。例如关键字rest rict 用来消除数据间的相关性, 编译器从而可以安排语句的并行执行 ; 内联函数_ nasser t 有助于数据的打包处理; 宏指令# pragma MU ST _IT ERAT E 告诉编译器有关循环迭代次数的信息, 编码器会根据这一信息进行软件流水。
3. 2 用线性汇编改写关键代码
线性汇编是TMS320C6000 特有的一种编程语言, 介于高级语言和汇编语言之间。它可以指定指令用到的寄存器和功能单元, 更易于对数据的打包处理。
线性汇编代码的并行处理和软件流水由汇编优化器完成, 编程者需要熟悉C64x DSP 的CPU 结构和指令集, 认真设计代码并充分利用编译器的反馈信息合理修改代码, 才能写出高质量的线性汇编。本设计中程序主框架采用C 语言编写, 其它各关键部分的代码采用线性汇编实现。
4 结果分析
本压缩系统在对标准Foreman 序列、地面人群及道路车辆等视频序列进行压缩测试。对D1 分辨率视频序列能够实现25 帧/ 秒实时的压缩编码, 压缩码率为1. 8 Mb/ s, 解码图像视觉效果良好, 经编帧后输出250KB/ s 恒定基带码流。在图像传输中没有出现数据拥塞和丢失现象。有效满足了高清晰机载图像帧察的目的。
5 结束语
本文以TMS320DM642 芯片为中心, 详细介绍了机载图像实时压缩系统的设计及MPEG 4 实时编码器的优化。系统经测试实现了高分辨率图像的实时压缩和实时编帧传输, 满足了系统设计需求。本文采用MPEG 4Simlpe Profile 算法, 在算法方面还有一定的研究空间。
图像压缩 相关文章:
- 航空图像压缩系统的DSP设计及实现(07-05)
- 基于DSP的图像压缩无线传输系统设计 (03-04)
- 基于多DSP+FPGA的卫星遥感图像压缩系统设计(08-21)
- 独立式多分辨率VGA/DVI压缩存储系统(06-05)
- 一种基于JPEG2000的新型率控制方法(10-20)