面向英特尔® 架构平台实现实时端到端 H.265/HEVC 解决方案





5.00/5 (4投票s)
本文将研究 HEVC 编解码器的特性并优化基于 CPU 的软件视频转码技术,以提供最佳视频质量和最灵活的编程模型。
目录
1. 摘要
2. 简介
2.1 视频编解码器和 H.265/HEVC
2.2 HEVC 性能问题
2.3 H.265/HEVC 研究的当前解决方案
3. 基于 IA 平台的优化实时解决方案
3.1 基于英特尔® 至强™ 处理器的实时 HEVC 编码器解决方案
3.1.1 针对 HEVC 编码功能的英特尔 SIMD 矢量化调优
3.1.2 线程并发和核心可扩展性调优
3.1.3 使用 SMT/HT 进行进一步调优
3.2 基于英特尔® 酷睿™ 处理器的平台上的高性能 H.265/HEVC 解码器
3.2.1 Strongene HEVC 解码器的优化与性能分析
3.2.2 英特尔 SSE 优化 Strongene HEVC 解码器与开源替代方案的比较以及未来的优化机会
3.3 在基于英特尔® 凌动™ 处理器的平台上优化 H.265/HEVC 解码器
3.3.1 通过 YASM 和英特尔® C++ 编译器进行优化
3.3.2 使用英特尔® 流式 SIMD 扩展(英特尔® SSE)指令进行优化
3.3.3 通过英特尔® 线程构建模块(英特尔® TBB)工具进行优化
3.3.4 H.265/HEVC 解码器性能比较
4. 总结
5. 其他相关文章
参考
1. 摘要
国际电信联盟 (ITU) 发布了新的视频编解码标准:高效率视频编码 (HEVC)/H.265,声称比目前的 H.264/MPEG-4 标准效率高约 50%。然而,H.265 算法和数据结构的复杂性是 H.264 的 4 倍以上。这意味着基于 H.265 的编解码器将比其前身需要更多的计算资源/能力。在本文中,我们将研究 HEVC 编解码器的特性并优化基于 CPU 的软件视频转码技术,以提供最佳视频质量和最灵活的编程模型。我们的端到端解决方案可以最大限度地发挥英特尔® 架构 (IA) 平台在 HEVC 编解码器方面的能力,并实现实时性能。
2. 简介
视频编码标准主要通过开发众所周知的 ITU-T 和 ISO/IEC 标准而演进。ITU-T 制定了 H.261 和 H.263,ISO/IEC 制定了 MPEG-1 和 MPEG-4 Visual,这两个组织联合制定了 H.262/MPEG-2 Video 和 H.264/MPEG-4 高级视频编码 (AVC) 标准[1]。
H.265/HEVC(高效视频编码)于去年推出,是 ISO/IEC 和 ITU-T 开发的最新视频编解码标准,旨在最大限度地提高压缩能力并减少数据丢失。H.265/HEVC 将压缩比比以前的 H.264/AVC 标准提高了一倍,但主观质量相同。HEVC 技术帮助在线视频提供商以更少的带宽提供高质量视频,使其成为下一个视频编解码器革命。
2.1 视频编解码器和 H.265/HEVC
HEVC 提出了几种新的视频编码语法架构和算法,以获得高效的编码标准[1][2]
a) 随机访问和比特流拼接功能
新设计支持特殊功能以实现随机访问和比特流拼接。在 H.264/MPEG-4 AVC 中,比特流必须始终以 IDR 访问单元开始,但在 HEVC 中,支持随机访问。
b) 编码树单元结构
一幅图像被分割成编码树单元 (CTU),每个 CTU 包含亮度编码树块 (CTB) 和色度 CTB。L 的值可以等于 16、32 或 64,具体由序列参数集 (SPS) 中指定的编码语法元素确定。CTU 包含一个四叉树语法,允许根据 CTB 覆盖区域的信号特性将编码块 (CB) 分割成选定的适当大小。所有以前的视频编码标准都只使用 16×16 亮度样本的固定阵列大小,但 HEVC 支持可变大小的 CTB,根据编码器在内存和计算要求方面的需求进行选择。
c) 变换块和单元的树结构分区
CB 可以递归地分割成变换块 (TB)。分区由残差四叉树发出信号。与以前的标准相比,HEVC 设计允许 TB 跨越多个预测块 (PB) 以进行帧间预测编码单元 (CU),从而最大限度地提高四叉树结构 TB 分区的潜在编码效率优势。
d) 帧内预测
定义了 33 种不同方向的方向预测,适用于从 4×4 到 32×32 的(正方形)变换块 (TB) 大小。可能的预测方向是所有 360 度方向。HEVC 支持各种帧内预测编码方法,称为 Intra_Angular、Intra_Planar 和 Intra_DC。
这种高级编码标准要求客户端设备和后端转码服务器都具有极高的处理能力。
2.2 HEVC 性能问题
当前的 HEVC 测试模型 (HM) 项目[6]仅实现了该标准的主要功能;实际性能仍远未达到生产和实际部署水平。该项目的两个主要缺点是
- 无并行方案
- 矢量化调优不佳
此 HEVC 编码器在服务器端消耗的 CPU 资源比 H.264 多 100 倍以上,在客户端消耗的 CPU 资源多 10 倍以上。
2.3 H.265/HEVC 研究的当前解决方案
H.265/HEVC 编解码器引起了全球许多团体/机构的兴趣,以优化性能并实现实际部署。一些开源项目包括:
- OpenHEVC(兼容 HM10.0,解码器优化)
https://github.com/OpenHEVC/openHEVC - x265(兼容 HM,并行和 SIMD 优化)
http://code.google.com/p/x265/
https://bitbucket.org/multicoreware/x265/wiki/Home
我们在基于英特尔® 至强® 处理器的平台(E5-2680 @ 2.70GHz,8*2 物理核心,代号 Sandy Bridge)上运行 720p 24 FPS 视频,以评估 x.265 编码器的性能。此编解码器的实现者在优化原始标准的任务并行和数据并行方面做了大量工作;然而,根据我们的基准测试,它在具有 32 个逻辑核心(SMT ON)的系统中只能使用 6 个核心。因此,它无法最大限度地利用当前多核平台上的计算资源。
在 x.265 项目中,英特尔® SSE 指令被用于矢量化调优,这贡献了超过 70% 的性能提升。通过进一步的英特尔® C 编译器编译优化,我们在 IA 平台上获得了 2 倍的加速1。然而,这里的编码器性能与实时编码器部署之间仍然存在巨大差距,特别是对于高清 1080p 视频。
在中国,超过 20 家多媒体 ISV 正在寻求可用的 HEVC 解决方案和平台,以节省在线视频服务成本并保持高质量。
3. 基于 IA 平台的优化实时解决方案
Strongene 是一家专注于内核视频编码技术的中国公司。它提供先进的 H.265/HEVC 编码器/解码器编解码器,已被迅雷在线视频服务采用。其编码器/解码器解决方案已与开源 FFMPEG 集成供 ISV 使用。我们与 Strongene 合作,利用新的基于 IA 平台的平台技术,在基于英特尔® 至强® 处理器、英特尔® 酷睿™ 处理器和英特尔® 凌动™ 处理器的平台上优化 H.265/HEVC 编码器和解码器,以实现实时、端到端的 HEVC 编解码器解决方案。
3.1 基于英特尔® 至强™ 处理器的实时 HEVC 编码器解决方案
我们的视频编码应用程序是一种标准的 CPU 和内存密集型工作负载,它要求服务器平台具备高能力,例如核心计算效率、可靠性和稳定性。H.265/HEVC 编解码器的计算复杂性是以前 H.264/MPEG 的 4 倍。它对后端服务器平台提出了前所未有的处理要求。在本节中,我们将介绍帮助 Strongene HEVC 编解码器达到 1080p 实时编码标准的主要基于 IA 的技术。
3.1.1 针对 HEVC 编码功能的英特尔 SIMD 矢量化调优
大多数耗时的视频和图像处理功能是基于块的数据密集型计算,可以使用英特尔® SIMD(单指令多数据)矢量化指令进行优化。英特尔 SIMD 指令在一个 CPU 周期内处理多组数据,这大大提高了数据吞吐量和执行效率。英特尔 SIMD 已获得广泛支持,从 MMX、英特尔® SSE、英特尔® 高级矢量扩展(英特尔® AVX)演进到适用于不同 x86 平台世代的英特尔® 高级矢量扩展 2(英特尔® AVX2)。
在 Strongene 编码编解码器中,从分析数据观察,所有主要的“热点”功能都可以使用英特尔 SSE 指令进行矢量化,例如低复杂度、运动补偿帧插值;免转置整数变换;蝶形哈达玛变换;以及内存冗余最少的 SAD/SSD 计算。我们在基于英特尔至强处理器的平台上启用了英特尔 SSE 指令,如图 6 所示。
凭借这些英特尔 SIMD 编程模型和范例,Strongene 重写了编码编解码器中的所有热点功能,以获得最大的性能提升。图 7 是我们在标准 1080p HEVC 编码场景中的分析数据,显示 60% 的热点功能正在英特尔 SIMD 指令中运行。
具有 256 位整数计算的英特尔 AVX2 指令将使之前的 128 位英特尔 SSE 代码的性能翻倍。英特尔 AVX2 将在定于 2014 年推出的基于英特尔至强处理器(代号 Haswell)的平台中得到支持。我们以常见的 64*64 块 SAD 计算为例,测试英特尔 AVX2 的内在性能
表 1. 英特尔® SSE 和英特尔® AVX2 实现结果
CPU 周期 | 原始 | 英特尔® SSE | 英特尔® AVX2 |
运行 1 | 98877 | 977 | 679 |
运行 2 | 98463 | 1092 | 690 |
运行 3 | 98152 | 978 | 679 |
运行 4 | 98003 | 943 | 679 |
运行 5 | 98118 | 954 | 678 |
平均值 | 98322.6 | 988.8 | 681 |
加速 | 1.00 | 99.44 | 144.38 |
如表 1 所示,在此函数中,英特尔 SSE 和英特尔 AVX2 指令可以将性能提升 100 倍,而英特尔 AVX2 代码在英特尔 SSE 的基础上进一步提供了超过 40% 的性能提升2。我们可以期待在即将发布的 Haswell 平台上将英特尔 SSE 代码升级到英特尔 AVX2 后,性能会进一步提升。
3.1.2 线程并发和核心可扩展性调优
正如我们在第 2.3 节中看到的,当前大多数实现都没有利用多核平台上的所有核心。基于最新的英特尔至强多核架构,明确了 HEVC、基于 CTB 的算法之间的并行依赖关系后,Strongene 建议用帧间波前 (IFW) 并行框架取代原始的 OWF (Overlapped Wave-Front) 和 WPP (Wave-front Parallel Processing) 方法,然后开发三级线程管理方案,以保证 IFW 能够充分利用所有 CPU 核心来加速 HEVC 编码过程。凭借这种新的并行框架,在 Ivy Bridge 平台(英特尔至强处理器 E5-2697 @2.70GHz,12*2 物理核心,SMT OFF)上,Strongene 编解码器可以利用 18-24 个物理核心的计算资源,实现了相当不错的线程并发性。
凭借新的 WHP 并行框架以及在任务级别和数据级别上完全实现的英特尔 SIMD 指令,Strongene 编码编解码器在 x86 处理器上针对 1080p 视频序列实现了巨大的性能加速,成功地利用了所有核心的计算能力,如图 8 所示。
3.1.3 使用 SMT/HT 进行进一步调优
同步多线程 (SMT),也称为超线程 (HT) 技术,在所有基于 IA 的平台中都得到广泛支持。它允许操作系统为每个物理核心寻址两个虚拟或逻辑核心,并在可能的情况下在它们之间共享资源。超线程的主要功能是减少管道上依赖指令的数量。当 CPU 核心以高水平完全运行时,它提供了性能优势,但并非所有应用程序都能受益,例如那些未充分利用所有核心的应用程序。在这些情况下,SMT 技术会引入任务/线程切换开销。因此,我们在 Strongene 编码编解码器平台中关闭了 SMT,并在 Ivy Bridge 平台(英特尔至强处理器 E5-2697 v2)上获得了 HEVC 1080p 视频实时编码标准,如以下表格中黄色突出显示的部分所示。
表 2. Strongene HEVC 在英特尔® 至强® 处理器平台上的编码性能3
平台 | 分辨率 | 比特率 (kbps) | 帧率 (FPS) | CPU 使用率 | 编码模式 | SMT |
WSM E7-8837 @2.67GHz (8*8c) |
720p | 800 | 8.2 | 15c | 超快 | 关 |
1600 | 2.6 | 18c | 超慢 | 关 | ||
1080p | 1500 | 3.6 | 27c | 超快 | 关 | |
3000 | 1.4 | 23c | 超慢 | 关 | ||
4k | 5000 | 1.2 | 19c | 超快 | 关 | |
10000 | 0.5 | 21c | 超慢 | 关 | ||
IVY E5-2697 v2 @2.70GHz (2*12c) |
720p | 1000 | 11 | 40% 14c | 超慢 | 开 |
720p | 1000 | 46 | 60% 16c | 超快 | 开 | |
1080p | 1500 | 21 | 70% 16c | 超快 | 开 | |
1080p | 1500 | 25 | 80% 18c | 超快 | 关 | |
IVB E7-4890 @2.80GHz (4*15c) |
1080p | 2000 | 22 | 19c | 超快 | 开 |
1080p | 8000 | 6.11 | 15c | 超慢 | 开 | |
4k | 8000 | 7.02 | 29c | 超快 | 开 | |
4k | 8000 | 3.28 | 23c | 超慢 | 开 |
在取得了巨大的性能提升后,我们进一步评估了 Strongene HEVC 编码编解码器在 Ivy Bridge 平台上的能力,重点关注带宽和质量问题。
表 3. H.264 和 H.265 编解码器性能比较
文件: BQTerrance_1920x1080_60.yuv 分辨率: 1920x1080 大小:1869MB,622080 kbps 平台: E5-2697 v2 @2.70GHz,RAM 64GB DDR3-1867,QPI 8.0 GT/s 操作系统/软件:Red Hat 6.4,内核 2.6.32,gcc v4.4.7,ffmpeg v2.0.1,Lentoid HEVC Encoder r2096 linux |
编解码器 | 大小(字节) | 比特率 (kbps) | PSNR_Y/U/V (db) |
H.264 | 12254696 | 4078.1 | 32.311/39.369/42.043 | |
H.265 | 6215615 | 2064.28 | 34.016/39.822/42.141 |
从表 3 中我们可以看到,H.265/HEVC 编解码器在保持相同视频质量的同时节省了 50% 的带宽4。
3.2 基于英特尔® 酷睿™ 处理器的平台上的高性能 H.265/HEVC 解码器
Strongene HEVC/H.265 解码器是一款优化的 H.265 解码器,它以相对较低的计算要求提供良好的性能。Strongene HEVC 解码器的高效率是通过完全并行化的架构设计和波前并行处理 (WPP) 实现的。此外,英特尔酷睿处理器平台上可用的英特尔 SIMD 指令,如英特尔 SSE2、英特尔 SSSE3 和英特尔 SSE4,也被用于加速各种解码块并释放底层英特尔架构的强大能力。凭借这些功能的优势,Strongene HEVC 解码器能够使用主流 CPU 实现实时 4K 解码,并为 1080p 视频流提供高达 200 FPS 的解码速率。
3.2.1 Strongene HEVC 解码器的优化与性能分析
Strongene HEVC 解码器中的多线程优化通过 WPP 和帧层并行实现。WPP 是 HEVC 中引入的一项功能,通过将一个切片分成几行编码树单元 (CTU),然后将每行分配给一个线程来实现并行处理(每行可以在前一行中用于参考的 CTU 解码后进行处理)。Strongene HEVC 解码器中实现的帧层并行利用了 HEVC 标准中引入的层次结构,即 B 帧可以被其他 B 帧引用以构建层次引用架构。例如,如果图片组 (GOP) 等于 8,则序列可以编码如下:
在这种情况下,B1 在第一阶段使用 2 个 P 帧作为参考。在第二阶段,两个 B2 帧使用一个 P 帧和一个 B1 帧作为参考。因此,这两个 B2 帧可以并行处理。在第三阶段,四个 B3 帧使用一个 P 帧和一个 B2 帧,或者一个 B1 帧和一个 B2 帧作为参考。结果,四个 B3 帧也可以并行处理。如果使用更大的 GOP,给定 HEVC 解码器中的线程数量足以支持 B 帧并发解码,则可以进一步改进帧层并行。Strongene HEVC 解码器组织良好,通过多线程解码和 WPP 实现最大程度的并行,以提高解码速度。
这是 Strongene HEVC 解码器在 Sandy Bridge 平台上5进行英特尔 SSE 优化之前(表 4)和之后(表 5)的最大解码帧率,在启用不同线程数的 1080p 和 4K 序列上运行。
表 4. Strongene HEVC 解码器在英特尔 SSE 优化之前 (Lentoid C) 在启用不同线程数的 1080p 和 4K 视频流上的解码速率
1080p 1.2Mbps | 4K 5.6Mbps | |||
无渲染解码速率 (帧/秒) |
平均 CPU 利用率 |
无渲染解码速率 (帧/秒) |
平均 CPU 利用率 |
|
1 线程 | 25.33 | 25% | 6.85 | 25% |
2 线程 | 43.03 | 49% | 11.8 | 47% |
4 线程 | 51.79 | 93% | 14.13 | 86% |
8 线程 | 53.1 | 98% | 15.03 | 99% |
表 5. Strongene HEVC 解码器在英特尔 SSE 优化之后 (v2.0.1.14) 在启用不同线程数的 1080p 和 4K 视频流上的解码速率
1080p 1.2Mbps | 4K 5.6Mbps | |||
无渲染解码速率 (帧/秒) |
平均 CPU 利用率 |
无渲染解码速率 (帧/秒) |
平均 CPU 利用率 |
|
1 线程 | 75 | 25% | 21 | 25% |
2 线程 | 120 | 45% | 33 | 40% |
4 线程 | 140 | 70% | 36 | 63% |
8 线程 | 154 | 98% | 40 | 96% |
从以上数据可以看出,在 Sandy Bridge 平台上进行英特尔 SSE 优化后,1080p 流的性能提升约 3 倍,4K 流的性能提升约 2.6 倍5。此外,Strongene HEVC 解码器中的多线程设计与单线程模式相比,显著提高了性能:如果同时解码线程数从 1 增加到 8,解码帧率将提高约 2 倍。就整体性能而言,它表明即使在双核 Sandy Bridge 移动平台上,经过英特尔 SSE 优化的 Strongene HEVC 解码器也能够实时解码 4K 流,且 CPU 利用率低于 40%,这无疑是业界可用的最佳 HEVC 软件解码器之一。对于比特率在 1Mbps 到 3Mbps 之间(互联网上 1080p 视频流的通用比特率设置)的 1080p 流,可以在不到 20% 的 CPU 利用率下实现实时解码。
3.2.2 英特尔 SSE 优化 Strongene HEVC 解码器与开源替代方案的比较以及未来的优化机会
可以通过与一些著名的开源实现(如 HM 和 FFMPEG)进行比较,进一步检验 Strongene HEVC 解码器的性能。在以下图表中,通过使用不同分辨率、帧率和比特率的视频流,比较了不同 HEVC 解码器的解码速率。
HM10.0:HEVC 参考解码器 HM10.0
FFMPEG:FFMPEG 2.1 HEVC 解码器在单线程上运行
FFMPEG 4 线程:FFMPEG 2.1 HEVC 解码器在 4 个线程上运行
Lentoid C:Strongene HEVC 解码器在 SSE 优化之前在单线程上运行
Lentoid SIMD:Strongene HEVC 解码器在 SSE 优化之后在单线程上运行 (v2.0.1.16)
Lentoid SIMD 4 线程:Strongene HEVC 解码器在 SSE 优化之后在 4 个线程上运行 (v2.0.1.16)
关于不同类别视频的性能数据,经过英特尔 SSE 优化的 Strongene HEVC 解码器能够实现比 HM10 解码器快约 10 倍的速度提升6。对于较低比特率的流,性能提升甚至更大。然而,当比特率增加时,英特尔 SSE 优化的加速比(Lentoid SIMD 4 线程/Lentoid C)会下降,原因是英特尔 SIMD 指令在可并行化的模块(如运动补偿)上更有效,而不是在不可并行化的模块(CABAC、IDCT 和去块效应)上。如果我们查看英特尔 VTune™ Amplifier XE 在英特尔 SSE 优化前后的热点功能,可以更详细地解释这一现象
在图 16 中,我们发现 Lentoid C 解码器中的大多数热点都在运动补偿 (MC) 模块中,因为 MC 必须为每个 CTB 完成,并且需要大量的计算资源。然而,MC 可以在 CTB 级别并行化,因此在英特尔 SSE 优化后可以实现最高的加速比
随着比特率的增加,为了解码和处理视频数据,更多的计算资源花费在 CABAC、IDCT 和去块效应上,这导致这些模块的英特尔 SSE 加速比降低。这就是为什么在英特尔 SSE 优化后,热点功能从 MC 转移到 IDCT 和去块效应模块,如图 17 所示。
此外,从 VTune 的 CPU 并发性来看,当在 8 线程上运行英特尔 SSE 优化的解码器处理 4K 5.6Mbps 流时,至少有 3 个逻辑 CPU 运行了 74% 的解码时间,只有 1 或 2 个逻辑 CPU 运行了 26% 的时间,这是由于 B 帧之间的工作负载不平衡造成的。
对于热点分析,所有前五个热点函数实际上都是计算密集型而非内存密集型,这意味着这些函数可以通过英特尔 AVX 和英特尔 AVX2 指令进一步优化。
3.3 在基于英特尔® 凌动™ 处理器的平台上优化 H.265/HEVC 解码器
观看视频是移动设备的主要用途。多媒体处理是计算密集型的,对电池续航时间和用户体验影响很大。移动设备上的 LCD 分辨率已经从 480p 提高到 720p,现在达到了 1080p。终端用户希望观看高质量视频,但对于优酷、爱奇艺和乐视等在线视频提供商来说,购买网络带宽每年都变得越来越昂贵。
2013 年,英特尔推出了新的第四代英特尔凌动处理器平台(代号 Bay Trail),采用 22 纳米 Silvermont 架构。该架构的详细信息如下所示:
我们使用英特尔 VTune 工具调试 Strongene H.265/HEVC 解码器。然后我们使用接下来的三个小节中解释的工具集对其进行了优化。我们在基于英特尔凌动处理器的平台上获得了极高的解码速度和较低的 CPU 占用率。
3.3.1 通过 YASM 和英特尔® C++ 编译器进行优化
我们没有使用默认的 Android* 编译器编译开源 FFMPEG 中的优化 ASM 汇编代码,而是使用了 YASM 和英特尔® C++ 编译器。
YASM 是在“新”BSD 许可证下对 NASM 汇编程序的完整重写,它可以重用 x86 平台的英特尔 SIMD 优化 ASM 汇编代码。开发人员可以从 http://yasm.tortall.net 下载并安装 YASM 编译器。要使用它,请在编译 FFMPEG 之前修改 configure.sh 文件以启用 YASM 和 ASM 选项,如下所示:
我们还鼓励 ISV 使用英特尔 C++ 编译器编译本地代码。
3.3.2 使用英特尔® 流式 SIMD 扩展(英特尔® SSE)指令进行优化
通过英特尔 VTune 工具进行调试,我们发现 Strongene 编解码器仅使用 C 代码实现 YUV2RGB,导致性能不佳。
基于英特尔凌动处理器的平台支持英特尔 SSE 指令代码,其中包括 MMX、MMXEXT、英特尔 SSE、英特尔 SSE2、英特尔 SSE3、英特尔 SSSE3 和英特尔 SSE4。在开源 FFMPEG 中启用英特尔 SSE 代码可以大大提高 YUV2RGB 性能。
我们使用 MMX EXT 代码在 FFMPEG 中打开英特尔 SSSE3 编译器选项,如下面的代码片段所示。
Bay Trail 平台可以支持英特尔 SSE 4.1 指令,这些指令被用于优化 H.265/HEVC 解码器以获得更好的性能。
3.3.3 通过英特尔® 线程构建模块(英特尔® TBB)工具进行优化
当我们运行 VTune 工具时,我们发现 Strongene 编解码器创建了四个线程。然而,最快的线程必须等待最慢的线程,从而造成空闲核心。
如果单独使用,英特尔 SSE 只能在单个核心上工作。将英特尔 TBB 与英特尔 SSE 一起使用可以使代码在多核上运行,从而提高性能。
我们修改了多线程代码以执行多任务,然后使用英特尔 TBB 将任务分配给空闲核心,以充分利用多核。
英特尔 TBB 可从 http://threadingbuildingblocks.org/download 下载。
通过英特尔 TBB 优化可将性能提升高达 2.6 倍7。
3.3.4 H.265/HEVC 解码器性能比较
还启用了 OpenGL* 进行渲染,因为经过测试,我们发现通过 YASM 和 英特尔 C++ 编译器 的优化将性能提高了 1.5 倍,与 C 代码相比,通过 英特尔 SSE 的优化将性能提高了 6 倍,通过 英特尔® TBB 的优化将性能提高了 2.6 倍8。
我们使用英特尔® 图形性能分析器(英特尔® GPA)测试播放视频时的刷新率。在 Bay Trail 平板电脑上使用优化后的 H.265/HEVC 解码器进行测试时,播放 HEVC 1080p 视频时刷新率可达 90 FPS(帧/秒),而 Clover Trail+ 平板电脑可达 40 FPS。
如果我们将 Bay Trail 平板电脑的刷新率设置为 24 FPS,播放 1080p 视频时,CPU 负载小于 25%。因此,我们强烈向中国流行的在线视频提供商推荐 Strongene HEVC 解码器解决方案用于商业用途。
4. 总结
H.265/HEVC 很可能成为未来十年最流行的视频标准。许多媒体应用程序和产品目前正在寻求 HEVC 支持。在本文中,我们在英特尔平台上使用新的 IA 平台技术实现了基于 CPU 的实时端到端 HEVC 解决方案。我们基于英特尔处理器的先进解决方案已部署在迅雷[4]在线视频服务和产品中,必将加速 H.265/HEVC 技术的生产和部署。
5. 其他相关文章
- http://software.intel.com/en-us/articles/optimizing-h265hevc-decoder-on-intel-atom-processor-based-platforms
- http://software.intel.com/en-us/articles/real-time-cpu-based-h265hevc-encoding-solution-with-intel-platform-technology-1
参考文献
[1] 高效视频编码 (HEVC) 标准概述,IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY,第 22 卷,第 12 期,2012 年 12 月。
[2] 高效视频编码 (HEVC) 文本规范草案 10,JCTVC-L1003_v34
[3] http://www.strongene.com/en/homepage.jsp
[4] http://yasm.tortall.net
[5] http://threadingbuildingblocks.org
[6] http://hevc.hhi.fraunhofer.de/
要了解更多关于安卓开发者的英特尔工具,请访问英特尔® 安卓开发者专区。