264编码器的DSP移植与优化

2024-03-16 00:38
文章标签 优化 移植 编码器 dsp 264

本文主要是介绍264编码器的DSP移植与优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前,H.264编码器的实现版本主要有:JMT264X264。其中JMH.264官方源码,实现H.264所有特征,但其程序结构冗长,只考虑引入各种新特性以提高编码性能,忽略编码复杂度,其复杂度极高,不宜实用;T264编码器编码输出标准的264码流,解码器只能解T264编码器生成的码流;X264是编码器注重实用,在不明显降低编码性能的前提下,努力降低编码的计算复杂度。这里,用X264编码器对DSP平台移植、优化。X264程序在DSP平台上实现及优化主要有:程序简化、代码移植、代码优化。

程序简化

X264编码器除支持H.264的基本档次外,还包含主要档次的某些功能选项以及其他功能模块,代码尺寸较大,因此需要将不必要的功能模块删除,以减小代码尺寸。主要做以下删减:删除X264程序中的解码部分,以及基本档次功能之外的CABACBslice部分;X264程序是基于X86PC平台,包含了SSEMMX等。PC平台使用的优化技术,在DSP平台下无效:针对DSP平台特点,调整删减后的代码文件结构。

代码移植

TI公司的DSP开发工具CCS具有自己的ANSI C编译器和优化器,并有自己的语法规则和定义,经过上一步简化后得到纯C版本的X264编码器需要经过修改才能够在CCS下应用于具体的DSP。主要包括:①Visual c++CCS对于变量和结构体的“重复定义”问题的不同处理,需更改头文件中变量和结构体定义的位置;②用功能相同的库函数代替CCS中没有的库函数,如strncasecmp;③数据格式的不同,用long代替CCS中没有的_int64格式;④按照CCSC语言的规则定义数组;⑤修改系统配置参数的读取方式;⑥编写针对TMS320DM6446存储结构的CMD文件。如此,X264便可以在CCS下编译通过并运行。

代码优化

C版本的X264程序并没有利用DM6446的资源和并行机制,代码运行速度极低。因此必须对代码进行优化,提高处理性能。X264代码优化有以下3个层次:项目级优化、算法级优化和指令级优化:

(1)项目级优化项目级优化主要是对CCS提供的各种编译参数进行选择、搭配、调整,如本文使用的选项-o3-pm等;利用CCS编译器提供的优化功能,改善循环及多重循环体性能,进行软件流水,提高软件的并行性;改写不适合编译器优化的语句,使CCS能够对程序进行更好的优化。

(2)算法级优化进行算法级优化时。应使VC环境下的纯C版本与CCS下的版本同步更新,VC版本运行正确,既可以保证算法理论上的正确,又可以加快工作速度并减少问题的产生。该算法优化工作主要有以下几点:①运动估算法的选择:X264编码器提供3种可选的整像素运动估算法:X264_ME_ESA(全搜索法)X264_ME_HEX(六边形搜索法)X264_ME_DIA(小菱形搜索法)。在VC环境下使用纯C版本代码对同一视频序列使用3种不同的搜索方法进行编码。对比3种搜索方法在编码速度、峰值信噪比(PSNR)、码率方面的性能。对比之下X264_ME_ESA算法的峰值信噪比最高,X264_ME_HEX次之,X264_ME_DIA最低,但相互之间的质量差别并不大,码率差别也很小,但编码速度却有明显差距,X264_ME_DIA较前两者在编码速度上有明显的优势。经比较,选择使用X264_ME_DIA运动估计算法。②帧内预测模式的改进:在X264的帧内预测流程中加入提前终止模式选择的条件,改进算法的流程。进行16×16宏块帧内模式搜索时,在当前模式的开销小于已搜索过的模式的最小开销的一半时,终止16×16帧内预测模式选择,以当前模式为最佳16×16帧内预测模式。对4×4块也加入相同的条件,并且若当前4×4块帧内预测模式的预测开销比相应的最佳16×16块帧内预测模式的开销的1/16还要小,则终止4×4块的帧内预测模式选择,以当前预测模式作为最佳4×4块的帧内预测模式。改进后的帧内预测主体流程如图3所示,灰色部分为加入的判定条件。

帧间预测模式的改进:将当前的16×16宏块划分为48×8宏块,分别预测其运动矢量,然后以左右相邻、上下相邻的28×8块的运动矢量的差值和阈值相比较为依据,判定是否进行16×88×16等分块模式的预测,最后选择开销最小的划分模式为最佳帧间划分模式。

(3)指令级优化 DM6446一个时钟周期内可并行运行8条指令,一次可存取64位数据,内部拥有6432位通用寄存器,并且支持对寄存器中的48位字节或216位字节分别进行运算处理,这些使得DM6446具有很强的并行运算能力。视频图像的像素尺寸一般是4的倍数,X264中像素的值是用8位或16位数据按矩阵形式有规律的存储,这种数据存储结构与DM6446的并行处理方式很契合。因此对X264程序进行指令优化充分发挥DM6446的并行运算能力,是提高编码器速度的关键。主要分为以下两部分:①使用内联函数优化;C6000编译器提供了许多内联函数intrinsics,它们是汇编指令映射的在线函数,不宜用C语言实现其功能的汇编指令都有对应的intrinsics函数。这样就可在C语言结构中直接使用内联函数实现对多个数据的并行运算操作。如:未使用内联函数优化前X264程序调用一次双线性内插函数只能计算一个亚像素点的值,而使用内联函数_mem4_avgu4等进行优化后,一次可以计算4个亚像素点的值,大大提高了运算速度。②使用线性汇编语言优化:由于线性汇编不需要考虑寄存器分配、指令延迟、并行指令安排等因素。因此可以利用CCS提供的profile分析工具将使用频率高、耗时多的函数抽取出来,根据事先已知的数据间的相关性等信息,在程序中直接改写函数汇编,人工优化。涉及的算法有:SADSSD的计算;DCT变换;反DCT变换、亚像素搜索等

这篇关于264编码器的DSP移植与优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813789

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、