Android 是目前市场上使用最广泛的移动设备操作系统。根据市场分析组织 IDC 在 2014 年底发布的报告 ,Android 在智能 OS 业务方面占据主导地位,以 2014 年来看,搭载Android平台的设备出货量约为 10 亿台,所占的市场份额大于 80%;而未来几年,其领先地位将继续维持。Android 在平板电脑市场也占据主导地位,2014 年在全球的出货量超过 1.5 亿台设备,所占市场份额大约在 65% - 70% 之间。
基于此,本文将详述 Android 多媒体系统开发过程中面临的一些集成问题,这些问题会给移动设备制造商和开发商带来严峻的挑战,尤其是集成来自多个供应商的组件和技术时,这些挑战将更加突现;另外,并将探讨 ARM 知识产权(IP)和技术如何大幅简化 OEM 和系统集成商的流程,进而加快产品开发速度、显著降低风险。
Android 多媒体系统
Android 及其多媒体系统的发展是一个复杂度不断提高、持续演变的过程。自从 十年前 Android 被推出以来,迄今已整合了许多新功能和优化,如通过 Wi-Fi 传输至 TV 的移动显示器传输、新的视频编解码器等。上述所有功能的新增对于系统开发人员意义深远,因为他们在每次发布全新 OS 时,需要完成大量软件驱动程序的工作。图 1 显示了 Android 自 2009 年以来提供的新功能时间线。在此期间,ARM 除了支持将这些驱动程序部署至数百种不同的设备之外,还为九种不同版本的 Android 系统(从 éclair 至 Lollipop)以及八代 ARM Mali 图形处理器硬件提供了驱动程序的支持。
图 1 – Android 多媒体框架的演变
依据图 2(此图实际是简化示意图)所示,Android OS 已经非常复杂了。当然,Android 的持续演变带来了更多的挑战。图 2 显示了 OS 常用用户空间组件与用于提供 Android 用户体验的基础软件驱动程序、内核组件和硬件之间的交互。
图 2 - Android 多媒体子系统概览
如果使用了来自不同供应商的多媒体组件,则会产生额外的复杂性,导致的结果是,首先需要将三个或更多个软件驱动程序单独集成至平台,然后再开始着手相互集成,以便实现较好的系统性能。然而,如果集成的过程不太理想,或者不同的组件无法使用相同标准的接口相互通信,则会导致功能平台运行较慢、耗费过多的功率,最糟的情况则可能会同时出现这两者。
集成的细微差异
基于与 Android 设备制造商的长期密切合作,ARM 经历了大量常见的集成挑战,尤其是在“零拷贝zero-copy”多媒体管线(media pipeline)方面。尽管面临的挑战非常多,但依然有一些潜在的解决方案可以应对。传统的零拷贝多媒体管线主要目的是消除复制开销,然而当两个或多个多媒体处理硬件设备在内存中共享同一缓冲区空间时,就会出现问题,并且也会以一些非常不同的方式进行通信。软件驱动程序需要选择数据在缓冲区中的存储方式,如像素格式,并确保在 GPU 完成写入之前,显示器不会读取缓冲区。与组件相互通信的潜在集成问题有关的关键领域包括内存分配协商、像素格式协商和同步。
● 内存分配协商对于系统集成设计商来说是一个关键的领域,它可以决定系统图形缓冲区的内存分配位置和方式。分配内存时需要考虑到访问内存的底层硬件具备的多项限制。有多个重要问题有待解决,例如,所有组件是否都带有系统 MMU(内存管理单元)?如果不是,那么执行某些分配时需要将部分内存分配为连续的物理内存,以确保所有组件均可以读取该内存。适用于所有目标组件的理想内存对齐方式是指什么?例如,不同的硬件对于它想要如何在内存中对齐该内存的像素有不同的限制。如果缺乏对系统中每个组件的这种了解,在处理图形缓冲区时则可能会出现部分内存访问非常低效。基础物理地址宽度是另一个问题,即系统集成设计商可能拥有传统的 32 位内部显示管线,不能处理较大的内存块(例如,可以通过 ARMv8 64 位架构处理的内存块)。
是否存在某些组件无法访问的特定内存区域?或者它们必须访问的特定区域?Gralloc 模块由 Android 的编译引擎用来分配和管理适用于 2D 和 3D 图形用途的内存。ARM 提供的 Gralloc 库可以理解 ARM 多媒体处理器的所有系统限制,并且能够与 Android 内核的 ION 分配程序(一个统一的共享内存系统)配合运行,确保可以针对系统中的每个处理器执行最合适且高效的内存分配。软件驱动程序由 ARM 多媒体处理器用于实施标准 Linux DMA 缓冲区内存共享功能。如果所有驱动程序使用同一接口,则同一分配可以由一个处理器写入并由另一个处理器读取,从而为平台上的所有图形和视频内容提供零拷贝路径,确保仍能够维持尽可能低的内存带宽开销。
● 像素格式协商是需要在系统集成期间关注的第二个领域。务必确保多媒体 IP 解决方案中的每个组件(不论是视频、GPU 还是显示)实际上均能够理解来自其他组件的图形输出格式,以及确保每个组件生成的内容均能够以某种格式被其他组件读取。例如,尽管视频处理器可能能够以五种不同的 YUV 格式写出视频帧,如果显示处理器不支持其中的任何格式,则只能使用 GPU 功能在显示器上合成视频。或者,如果显示处理器不理解带有预乘 Alpha 值(大多数 Android 用户界面所使用的)的像素格式,则显示处理器将成为美化过的帧缓冲区控制器。最后,即便组件能够完全理解 32 位 RGBA 像素格式,出于某些未知的原因,显示的应用程序仍将出现反转的颜色。这会导致在开发过程中浪费大量时间,因为不仅需要追踪哪个组件在排序方面(比如 32 位像素格式的红色和蓝色组分)与其他一切不一致,而且还需要研究如何对它们进行反转。
● 同步是第三个领域,此处旨在尽可能异步运行以减少排队和延迟。主要问题在于,当系统中存在零拷贝路径、并且两个或多个设备正在直接使用同一个内存时,这些组件之间的同步将变得极为重要。例如,如果显示处理器在 GPU 或视频处理器完成写入之前便开始从缓冲区中进行读取,则会导致屏幕出现奇怪的伪像。在较早的 Android 版本(Jellybean 之前)中,渲染流水线中的每个组件通过执行以下一系列步骤处理和控制 Android 用户空间的同步:处理软件驱动程序中的命令;在硬件中执行其任务;等待任务在驱动程序中完成;以及将责任传递给管线的下一阶段。尽管这会使组件之间的同步方法变得简单容易,但也会造成管线出现暂停间隙,从而使流畅视觉内容之间出现差异并且中断最终用户体验。但是,一种全新同步化方法 Android Fences 已添加至平台;只要软件驱动程序支持它们,则允许在管线的每个阶段针对其组件执行 CPU 端处理和排队工作,即便前一阶段尚未在硬件中完成。这将大幅缩短一个硬件完成与下一个硬件开始之间的间隔。然而,要充分利用 Android Fences 的优势,还需要渲染管线中的每个组件均支持它们。如果所有组件均支持 Android Fences,但其中一个组件出现漏洞,则会出现问题。如果三个或更多个不同供应商提供的软件驱动程序均支持 Android Fences,但其中一个出现漏洞,则很难进行追踪、并且需要与多个供应商一起执行三项单独的调查。同时还有可能出现此种情况:只有当某个供应商的组件使用标准接口与其他供应商的组件进行通信时,该漏洞才会显现出来。
ARM 多媒体技术
如上所述,Android 多媒体子系统开发过程中遇到的基本问题是,从多个供应商采购组件和解决方案(无论是包含内部开发的部件还是由诸如半导体供应商之类的外部公司提供),这意味着将对产品质量和/或开发进度产生影响。而可以向 OEM、系统集成商和硅片供应商提供显著帮助的解决方案即为 ARM 的预集成多媒体堆栈。自开发首款移动电话以来,ARM 一直致力于与其合作伙伴合作,一同开发可以在固定功耗预算范围内、持续扩展移动设备功能的技术。因此,ARM 在多媒体 IP 以及处理因集成高度复杂的视频和图形技术而产生的系统级问题方面具有丰富的经验。ARM 产品的核心在于,可以在图形、视频和显示处理器内核、系统级 SoC 优化技术领域提供广泛的多媒体技术组合。
● ARM Mali GPU 系列是指一系列广泛的产品,可以进行扩展以便为移动细分市场内外的各类设备提供丰富的消费者体验,适合高端和主流市场,包括:
ARM Mali-T820:提供多功能和效率的最佳组合,可以向下一代主流移动设备交付丰富的用户界面和卓越的内容,并采用尽可能小的硅片面积维持最佳性能的 ARM 特色产品;
ARM Mali-T830:其每个着色器内核的计算能力高于 Mali-T820,能够为主流移动设备的消费者带来诸如高级 3D 游戏等更复杂的内容;
ARM Mali-T860:可从一个内核扩展至十六个内核,经过优化,能够为高端移动设备市场带来具备卓越性能效率的复杂图形和计算内容;
全新Mali-T880,旨在为温度受限的移动和消费者平台带来高端复杂的用例,能效较之前一代提高了 40%。附加的算术能力和可扩展性支持可支持类似游戏机的高级游戏体验。
Mali-T860 和 Mali-T880 均本地支持 10 位 YUV,为最佳 4K 内容提供令人惊叹的视觉表现,并且与 Mali-V550 视频处理器和 Mali-DP550 显示处理器的配置相得益彰。
● ARM Mali-V550 视频处理器是下一代低带宽、多核、多重编解码的编码器/解码器,提供 IP 业界首个适用于 HEVC(高效率视频编码)编解码器(包含 8 位和 10 位 HEVC 解码和 8 位 HEVC 编码)的单核视频编码/解码解决方案。它可以在单核上集成编码和解码功能,并且能够在多个编解码器上最大程度地重复使用,确保设备交付高级别的硅晶片面积效率。
● ARM Mali-DP550 显示处理器是最新一代的 ARM 显示技术,其增强功能可以将合成、缩放、旋转以及图像后处理等任务从 GPU 或 CPU 卸载到专用处理器,省去了写出到内存的必要,进而节省功率。该设备的硅片面积非常小、能耗低,额外支持多达七层的合成,同时还集成了 ARM 的节能技术。
系统级优化技术
与此同时,有数项系统级优化技术可供系统集成商使用,并且能够为 ARM 的多媒体处理器组合提供补充。这些技术包括ARM 帧缓冲压缩(ARM Frame Buffer Compression, AFBC)、智能消除(Transaction Elimination)、智能合成(Smart Composition)以及动作搜索消除技术(Motion Search Elimination)。
● ARM 帧缓冲压缩(AFBC)是一项无损图像压缩协议和格式,可以解决在移动设备的散热限制内,构建愈加复杂的设计时所面临的困难。基本上,它最大限度地减少了 SoC 内不同 IP 块之间的数据传输量,并且可以降低在整个系统内传输空间协调图像数据所产生的整体系统级带宽和电力成本。其无损压缩率在业界处于领先地位,典型情况下可高出 50%,而算上限制性的最坏情况比率,通常情况下高出 80%。AFBC 提供低至 4x4 块级别的细粒度随机访问,该随机访问支持在 SoC 设计内的其他 IP 块中应用 AFBC。在 Android 多媒体系统环境中,AFBC 通过集成至显示、视频和 GPU 驱动程序的私有接口在 ARM Gralloc 驱动程序中启用。
AFBC 可用于所有 ARM Mali 视频处理器、 显示处理器、以及 Mali-T760 及更高版本的图形处理器,并且还作为可授权的单独 IP 块与 SoC 中的其他多媒体块一同使用。
● 智能消除(TE)是 ARM Mali GPU 架构一项重要的带宽节约功能,可在 SoC 系统级别上显著节省能源。在执行 TE 时,GPU 将当前帧缓冲与之前渲染的帧相比较,仅对改动过的部分进行局部更新,因而大大减少了每一帧需要传输到外部内存的数据量。这一比较是在每区块基础上执行的,运用循环冗余检查(CRC) 签名来判断区块的改动情况。CRC 签名一致的区块完全相同,因此消除它们对生成的图像没有任何影响。无论帧缓冲的精度要求是什么,TE 都可以供各应用程序用于 GPU 支持的所有帧缓冲格式。TE 是一项非常有效的技术,即便对于“第一人称射击游戏”而言也是如此。然而,由于在用户界面和休闲游戏等许多其他常用图形应用程序中,两个连续帧之间的帧缓冲大部分保持不变,因此 TE 带来的帧缓冲带宽节约最高可达 99%。和 Android 多媒体系统集成中的 AFBC 一样,“智能消除”可通过 ARM Gralloc 驱动程序启用,并且与 GPU 驱动程序集成。
● 智能合成(SC)是另一项旨在降低带宽的技术,同时可以在帧合成期间读入纹理。该技术可以将标准 Android 用户界面纹理读取带宽降低 50% 以上。通过在最后帧合成之前分析帧,SC 将确定是否存在要渲染帧的给定部分原因,或者它是否可以重复使用之前渲染和合成的部分。如果可以重复使用这一部分的帧,则无需重新从内存中读取并重新进行合成,因此将节约更多读取带宽和计算量。在 Android 多媒体系统环境中,“智能合成”将显示为 EGL 扩展 (EGL_KHR_partial_update),供 Android 内的 ‘SurfaceFlinger’ 和 ‘HWUI’ 组件使用(见图 2)。
● 动作搜索消除技术(MSE)既是智能消除的扩展,也是一项可在 Mali-DP550 显示处理器和 Mali-V550 视频处理器中实施的新功能。该技术旨在解决一种不断增长的需求:将音频/视频数据从移动电话、平板电脑和其他消费者设备无线传输至电视屏等大屏幕。发送和接收设备均必须支持使用诸如 H.264 视频编解码器等算法执行视频流压缩。在典型用例下,显示处理器并不会将帧缓冲传输至显示面板,而是将其写入内存,随后视频编解码器将读取该内存以对帧进行编码,并通过 Wi-Fi 网络发送压缩的帧。显示处理器和视频处理器均维护每个区块的 CRC 签名,当显示处理器写出帧缓冲时,视频处理器可以为签名匹配的区块消除运作搜索。运作估算是视频管线中最消耗资源的部分,因此跳过所选区块的搜索将降低 Wi-Fi 传输的延迟以及带宽消耗,进而降低 SoC 的整体功耗。同 AFBC 和智能消除一样,动作搜索消除技术也通过 ARM Gralloc 启用,这有利于将 CRC 数据从 Mali-V550 视频处理器的 Android 视频驱动程序传输至 Mali-DP550 显示处理器的 HWComposer 驱动程序。
Android 对于优化集成的期望
ARM 提供一整套现有的图形、显示和视频处理器驱动程序,可以通过预先集成和优化来实现联合操作。根据一致的设计和验证方法,如果设计中实施了基于 ARM Cortex CPU 以及 ARM CoreLinkTM 互连、ARM Mali GPU、视频和显示处理器的 SoC,将能够针对每个处理器使用一同高效运行的 Android 软件驱动程序。
图 3 - ARM 的 Android 多媒体子系统解决方案
适用于 Android 的 ARM 多媒体堆栈(见图 3)将消除集成和优化来自不同供应商的处理器时面临的挑战,并简化支持常规 Android 更新的任务。利用 ARM 预先优化的软件,OEM 和硅片供应商可以关注其解决方案的差异化,并加快产品入市步伐。尽管 Android 多媒体系统集成绝对称不上简单,此种方法仍不失为开发人员面临诸多问题时的可能解决方案,并且将大幅简化流程、压缩开发时间、降低风险以及加速产品上市时程。