Libav

出自龙芯梦兰知识库

(重定向自Gst-plugins-ffmpeg
跳转到: 导航, 搜索

目录

使用龙芯 3A 向量指令优化 MPEG-4、H.264 解码器

龙芯 3A 架构

龙芯 3A 所使用的 GS464 高性能处理器核在兼容 MIPS64r2 ISA 的同时,还实现了针对多媒体等应用的向量扩展指令,这些指令对视频编码、解码应用性能的提升有很大的帮助。

龙芯 3A 处理器复用了 64 位的浮点寄存器作为向量寄存器,实现了 64 位向量访存的向量扩展指令。使用这些向量指令可以一次完成 8 个字节宽度的数据操作。这样的结构和指令集设计,使得龙芯 3A 适合用于实现较大规模同类型数据的相同运算,例如矩阵乘法运算、FFT、IDCT 等等。

龙芯 3A 处理器扩展实现的这些向量指令的使用方法多数与 x86 系列处理器的 MMX/MMX2 相同。 在 MMX2 中向量寄存器可以有 128 位宽,这种情况下会不兼容,在实际过程中仅遇到了 psllq 指令,当 COUNT 小于 63 时等价于 dsll 指令。

libav

libav 是著名的开源编/解码ffmpeg的后继,许多开源项目都直接或间接的使用了它,如 MPlayer2、GStreamer等等。

libav框架可方便的针对不同的目标平台重载编、解码器中的方法,目前已经有实现的是 x86、ARM、Sparc 平台,其中 x86 平台是相对最完善的。在 MIPS 平台中除了在数学运算中有针对龙芯 2F 处理器的优化,其它还不支持。

在 libav 中增加龙芯 3A 处理器的支持,主要分为以下几个步骤:

  1. 修改 configure 配置程序文件,增加龙芯体系结构相关的配置选项。
  2. 在与 x86、ARM 等架构同级的目录中新建 loongson 目录,用于存放龙芯相关的文件。
  3. 修改 mips 架构目录中的 Makefile 文件,增加针对龙芯架设的文件。
  4. 增加针对 mips 架构的初始化函数,重载编、解码器的方法。

针对龙芯 3A 处理器优化 libav

从LOonux 3.4.0开始,集成了多线程解码版本的libav,能够利用多核进行计算。在此基础上,进一步合并嵌入式汇编优化,能够流畅进行720P的H264和MPEG4解码。 libav 编、解码器在龙芯 3A 平台上的优化主要是使用龙芯 3A 处理器扩展的向量指令实现热点函数。其中,热点函数由 OProfile 性能分析工具来找出。针对热点函数,逐个优化。这种代码级别的优化主要有如下几种方法:

在优化过程中可经常使用 OProfile 进行热点函数分析,准确找出优化目标,针对性的优化。

正确性验证

在完成一个特定功能的优化后,可通过播放使用到该功能的样片来验证是否存在严重的逻辑错误,如有严重的错误通常表现为访存错误、视频画面错误。在上述方法通过的情况下可跑一下 libav 自己的测试例程,如通过了基本就没有什么问题了。libav 解码器集的框架是可以替换解码器的特定功能函数的,基于这点可以在完成一个特定功能的函数时进行测试,以更方便的定位问题代码。

龙芯 3A 扩展指令

个人工具
名字空间
变换
动作
导航
工具箱