H.264算法的DSP移植与优化

摘要:在TMS320DM643平台上实现H.264基档次编码器的移植与优化显得格外实用和必要。基于对DSP平台的结构特性和H.264的计算复杂度分析,主要从核心算法、数据传输和存储器/Cache使用几方面对H.264编码器进行了优化。实验结果表明,对于CIF格式的视频序列,优化后的H.264编码器能够达到每秒高于24帧的编码速度,满足了视频处理对于实时性的要求。
关键词:H.264编码;TMS320DM643;算法优化

0 引言
    针对视频通信中传输带宽或存储容量与视频质量的矛盾,ITU-T的VCEG和ISO/IEC的MPEG联合制定了低码率视频压缩标准H.264。相对于以往的标准,H.264除了增强了网络适应能力外,大幅度提高了压缩编码效率,在相同的码率下能够获得更高的主客观质量。2003年5月,H.264/AVC标准正式推出,正式名称为H.264 MPEG-4 part 10 AVC(Advanced Video Coding),以下简称为H.264标准。

1 编码器
    H.264仍采用图像预测和变换编码相结合的编码结构,编码器采用的仍是变换和预测的混合编码法。输入的帧或场以宏块为单位被编码器处理。首先,按帧内或帧间预测编码的方法进行处理。如果采用帧内预测编码,其预测值PRED是由当前片中前面己编码的参考图像经运动补偿(MC)后得出,与解码所需的一些边信息(如预测模式量化参数、运动矢量等)一起组成一个压缩后的码流,经NAL(网络自适应层)供传输和存储用。为了提供进一步预测用的参考图像,编码器必须有重建图像的功能。因此必须使残差图像经反量化、反变换后得到。为了去除编码解码环路中产生的噪声,为了提高参考帧的图像质量,从而提高压缩图像性能,设置了一个环路滤波器。即重建图像可用作参考图像。
1.1 视频编码的硬件结构
    H.264视频编码器硬件结构如图1所示。FLASH模块用于存放程序,EEPROM用于存放编码系统的初始化配置信息和系统MAC层地址。片内SRAM用于缓存当前正在处理的宏块数据,以及一些频繁调用的数据段和程序段。外接存储器SDRAM主要用于存储原始帧、参考帧和重建帧的源数据。片内、片外存储器之间的数据传输借助EDMA在后台操作,这样可并行处理数据传输和运算操作,提高效率。


1.2 DSP芯片简介
    DM643的EDMA可在64个独立的通路上,提供超过2GB/s的I/O带宽。此外,运用两级片内高速缓存Cache和64位外部存储器接口(EMIF),可方便地实现与同步/异步存储器的无缝连接。DM643还集成了多种新型的片内外设,以适应于媒体数字化处理和网络通信的应用:(1)三个可配置的视频端口,提供和通用视频A/D和D/A芯片的无缝接口;(2)压控晶体振荡器插值控制端口,用于与MPEG-2传输流接口时的系统时钟恢复;(3)管理数据输入输出模块,用于列举系统中的物理层设备并监视它们的连接状态。

1.3 H.264编码算法的主要特征
    H.264编码算法进行了一系列的改进和扩展,明显改善编码效率的特征如下:
    (1)网络适配层NAL:传统的视频编码编完的视频码流在任何应用领域下都是统一的码流模式,视频码流仅有视频编码层。(2)自适应块大小编码模式:H.264允许使用16×16、16×8、8×16、8×8、8×4、4×8、4×4等子块预测和编码模式,采用更小块和自适应编码的方式,使预测残差的数据量减少,进一步降低了码率。(3)多帧运动补偿技术:传统的视频压缩编码采用一个或两个解码帧作为当前预测的参考帧。

2 算法优化
    如上所述,运动估计,整数余弦变换/反整数余弦变换,量化是H.264编码器中最耗时的部分。因此,这3项是优化的主要对象。
2.1 运动估计
    视频序列图像在时间上存在很强的相关性,采用运动估计和运动补偿技术可以消除时间冗余以提高编码效率。运动估计粗略分为全局运动估计、基于像素点运动估计、基于块运动估计和基于区域地运动估计。
    H.264标准采用块运动估计匹配算法,它包含匹配原则(主要有MAD、MSE和NCCF三类),搜索范围,搜索方案等。但是搜索算法是影响块匹配算法性能的主要因素。在整像素的运动估计中,采用了基于菱形搜索算法。
2.2 CPU与缓存之间的数据传输
    DM643有一个两级(Level2)高性能Cache结构,它们都有16 kB的独立存储器,并且均可以被存入两级Cache中。两级Cache可以被设置为Cache,SRAM或者Cache,SRAM的一部分。CPU与Cache之间的数据读取过程如图3所示。

2.3 ICT/反ICT和量化
    原始的ICT/IICT和量化算法不能够充分发挥DSP的并行优势,以至于8个功能单元在编码的过程中都处于闲置状态,存储器中的数据被频繁重复的访问也导致了DSP运行效率的降低。在图4所示中,提出对于ICT/IICT和量化部分的算法图例,一个宏块中所有基于4×4块的IC-T/IICT变换都能够同时执行,这充分利用了DSP的8个功能单元。实验结果表明,经量化后,计算一个ICT/HCT的4×4块仅仅需要12个平均周期。这一优化不但提高了算法的速度又显著地降低了码流大小,使视频信号的实时处理成为可能。



3 实验结果分析
    在600 MHz的TMS320DM643平台上,通过开发软件CCS载入开源代码X264构架对CIF格式的5个视频序列(Akiyo,News,Foreman,Footba-ll,Mobile)进行了相关实验。在这5个视频序列中,Akiyo和News序列有较低的运动级别,背景变化画面人物运动幅度不大,而Foreman和Fo-otball有高的运动级别,运动剧烈有场景切换,最后一种Mobile序列则有复杂的背景。表1列出了在量化步长(QP)为25的情况下,原始H.264编码器和优化后的H.264编码器之间的对比结果。从中可以看出,原始的编码器的编码速度是2~3 f/s,而优化后的编码速度是前者的10倍多。



4 总结
    本系统采用TMS320DM643作为的核心处理器,这款DSP芯片主要是为实现低功耗、高性能而专门设计的定点DSP芯片。它具有高度灵活的可操作性和高速的处理能力,先进的多总线结构,主要应用在通信、数据采集等系统中,特别在实时性方面效果最佳。
    本设计借助开源代码X264在CCS开发平台进行试验,测试了编码优化前后的帧率等各种性能,旨在寻求更高效的视屏编码算法。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-linux-eclipse配置

转载于:https://www.cnblogs.com/sheying/p/8327517.html

n皇后问题java_经典n皇后问题java代码实现

问题描述:在n*n的二维表格,把n个皇后在表格上,要求同一行、同一列或同一斜线上不能有2个以上的皇后。例如八皇后有92种解决方案,五皇后有10种解决方案。public class TestQueen {int n; //皇后的个数int num 0; // 记录方案数int…

nagios监控服务器的搭建

nagios 概述: 开源的免费的网络监视工具。 监控: windows, Linux,Unix,交换机和路由器。报警。 Nagios是插件式的结构,它本身没有任何监控功能,所有的监控都是通过插件进行的,因此其是高度模块化和富于弹性的。Nagios…

BZOJ1031: [JSOI2007]字符加密Cipher

1031: [JSOI2007]字符加密Cipher Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7882 Solved: 3425[Submit][Status][Discuss]Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考。一天,他突然想出了一种他认为是终极的加密办法&#…

LoadRunner远程监测Centos服务性能配置过程

由于公司的需要,经过一段时间的探索,参考了很多业内人士的文档,终于完成LoadRunner远程监测centos服务器的配置过程。 首先监测所需要服务是否存,如果存在就不必要安装,如果不存在,需要安装对应的服务。 监…

day 68 增删改查 语法

1 普通正则 2 分组正则 url(r/blog/(\d)/(\d),views.blog) blog(request,arq1,arq2) 按照位置传参 3 分组命名 url(r/blog/(?P<year>\d)/(?P<month>\d),views.blog) blog(request,year,month) 4 用name 指定别名 url(r/blog/(?P<year>\d)/(?P…

编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器

Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多&#xff0c;因此&#xff0c;在编写之前可能也会铺垫得更多一些。当然&#xff0c;本系列旨在“写出”一个编译器&#xff0c;所以理论方面只会简单介绍 tao 语言所涉及的部分。之前的几章中&#xff0c;我纯…

Spring-data-jpa常用方法

转载于:https://www.cnblogs.com/summary-2017/p/7904926.html

Java线程生命周期

当你需要使用Java线程在多线程环境下进行编程时&#xff0c;理解Java的线程周期与线程的状态是非常重要的。通过实现Runnale接口或者继承Thread类&#xff0c;我们可以创建线程&#xff0c;为了启动一个线程&#xff0c;我们需要创建一个Thread对象&#xff0c;并且调用它的sta…

转,JSON解析2

JSON 使用讲解 这篇文章讲解了&#xff0c;JSON的介绍以及使用GSON解析。今天&#xff0c;我们就在Android项目中使用两种方式解析JSON数据。如果你对JSON&#xff0c;还不熟悉&#xff0c;那么请看JSON 使用讲解。 一.搭建服务以及制造JSON数据。 1.服务器选择的Tomcat&#x…

js顺序加载

2019独角兽企业重金招聘Python工程师标准>>> js想要顺序加载&#xff0c;分开js代码块&#xff0c;jsp页面在加载的时候&#xff0c;是顺序加载&#xff0c;遇到<script></script>代码块&#xff0c;先加载完成&#xff0c;然后继续往下&#xff0c;遇到…

2-05 使用固态存储SSD或PCIe卡

在大量并发的情况下&#xff0c;才能体现固态磁盘的吞吐量&#xff0c;在大并发下提供良好随机io的性能&#xff0c;这正是关系型数据库所需要的&#xff0c;相对应机械磁盘&#xff0c;固态磁盘更容易损坏&#xff08;第三点是固态磁盘的缺点&#xff09;&#xff0c;由于固态…

面试问题汇总 精选 分析 解答 职业规划 part 3

《剑指Offer——名企面试官精讲典型编程题》已经出版 非常感谢博客上的读者&#xff0c;是大家的关心、支持和鼓励让我有信心写完这本书并最终出版发行&#xff08; china-pub互动网、 亚马逊卓越网、 淘宝网、 京东网、 当当网上有售&#xff09;。网友们的鼓励让我在 博客上的…

java 分布式rpc框架_分布式RPC框架Apache Dubbo(一)

4 Dubbo快速入门Dubbo作为一个RPC框架&#xff0c;其最核心的功能就是要实现跨网络的远程调用。本小节就是要创建两个应用&#xff0c;一个作为服务的提供方&#xff0c;一个作为服务的消费方。通过Dubbo来实现服务消费方远程调用服务提供方的方法。4.1 服务提供方开发开发步骤…

轻松获知数据库事务

标题索引事务作用事务流程隔离级别实例验证事务作用事务是确保数据库系统数据的完整性的功能&#xff0c;如现在互联网行业支付业务&#xff0c;不管服务器出于什么原因异常中断&#xff0c;客户要么支付成功要么支付不成功&#xff0c;支付成功数据库金额即会发生变化&#xf…

Safari支不支持HTML5录音? 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。...

先放结论&#xff1a;Safari支不支持HTML5录音&#xff1f; ——据我调查&#xff0c;不支持。 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。 可是当使用Can I use查看兼容性的时候&#xff0c;我发现 不过这个是有历史原因的&#xff0c;我记得RTC是…

面试问题汇总 精选 分析 解答 职业规划 part 4

程序员做业余项目、记笔记和写博客的重要性【经典】 编程是一种创造过程&#xff0c;业余项目允许程序员在没有截止日期或各种限制的条件下&#xff0c;以探索形式编程。业余项目之所以重要&#xff0c;有以下几个原因。 探索新技术 每天都会不断有新技术出现&#xff0c;而…

NB-IOT连接移动onenet平台流程

1. 先创建账号&#xff0c;然后创建产品 2. 创建设备&#xff0c;用ATCGSN和ATCIMI查询NB-IOT的IMEI和IMSI填写上去。 3. 创建好的设备。 转载于:https://www.cnblogs.com/429512065qhq/p/8359247.html

java ejb jsp 架构_JavaEE架构

B/S 体系结构image.pngJava EE 经典架构image.pngJava EE 13规范JDBCimage.pngJDBC 对象与接口java.sql.DriverManager&#xff1a;用于管理JDBC驱动的服务类&#xff0c;当JDBC驱动加载至内存后&#xff0c;DriverManager会自动注册JDBC驱动&#xff0c;然后通过getConnection…

最大开源代码sourceforge 简介 及视音频方面常用的开源代码

所有的音视频凯源代码在这里&#xff1a;http://sourceforge.net/directory/audio-video/os:windows/&#xff0c;你可以下载分析&#xff0c;视频不懂请发邮件给我&#xff0c;帮你分析。 0.视频项目 0.1 VLC media player VLC 多媒体播放器&#xff08;最初为VideoLAN Clien…