Android 多媒体系统集成的复杂性
随着多媒体内容的使用频次越来越高,消费者对于处理多媒体音频和视频流、以及运行基于图形的高级应用程序所具备的成熟技术,也提出高于以往的要求,这些驱动着智能手机、平板电脑和其他智能移动消费者产品的演进,促使这些设备不仅要内置复杂程度较高且功能越发强大的多媒体子系统,而且还要不断地提升能效。
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
- Android开发技巧:软硬件的巧妙整合(01-16)
- 基于Android的VoIP系统的设计与实现(03-28)
- 基于Android系统的影音播放器开发(03-25)
- Android的阿喀琉斯之踵(07-08)
- Android开发之“hello World”的实现 (07-23)
- 基于Android平台的即时通信系统客户端设计(09-24)