系统级抽象有助于加速嵌入式视频产品上市进程
2009-03-11
作者:J.B. Fowler
摘 要:数字视频技术正从便携式摄像机与安全监控系统等专用应用领域向各种消费类电子产品快速推广,向传统视频开发技术提出了巨大挑战。过去,这些传统技术需要熟悉最新编码/解码(编解码器)标准并能为高性能信号处理平台编写汇编代码的专家手工编写大量代码。
信号处理技术制造商推出了将处理器、开发工具、软件以及系统专业技术高度集成的开发环境,使设计人员能够在高系统级别的抽象环境下开发视频应用,从而解决这一繁琐而复杂的难题。这使设计人员能集中精力开发应用功能,通过简单调用应用编程接口(API)就能实施视频、音频、语音和影像技术,以处理诸如实施特定编解码器引擎以及匹配屏幕分辨率等细节。
关键词:DSP数字信号处理器;video视频;coding/decoding编码/解码; codec编解码器
新一代视频应用
随着实施数字视频的成本不断下降,更多嵌入式开发人员开始在各种产品中集成音、视频技术。图1显示了机顶盒(STB)作为家庭安全集成监控系统的功能,它使得家庭用户能在电视屏幕上查看访客情况。同时,传统与非传统视频应用的质量也在不断提高。为了可智能化地调整对比度与聚焦,TI正在开发计算性能更高的算法。高灵活性的处理选项也使用户能通过包括黑白、彩色、红外、热感等在内的各种设置捕获影像。此外,也正在开发智能摄像头,它仅当镜头框中的所有人都睁眼时才捕获影像。
传统的编解码器实施方法
日益广泛的视频使用与复杂性不断提高的新型视频应用使人们开始重视传统视频开发方法的局限性问题。传统方法的最大障碍之一就是需要对编解码器算法进行手工编码之后,才能压缩数据流进行传输存储,也才能解压缩用于查看和编辑。目前,编解码器标准非常复杂,并在不断地演进发展,以增强视频质量和降低带宽占用。
因此,工程师往往需要很多人月的工作才能完成嵌入式视频应用的实施。通常,编解码器先采用C/C++等较高级语言开发,然后再将部分代码用汇编语言重写,从而根据硬件实施优化性能与功耗。上述编程工作的第二阶段需要熟练掌握特定硬件平台的大量专业技能。
诸如MPEG 2等前代编解码器已稳定成型,但MPEG 4与H.264等最新的高效编解码器仍在不断改进,因此必须在产品开发过程中和未来升级中考虑到编解码器变动的可能性。此外,新型编解码器也提供了更丰富的工具套件(toolset),能够为开发人员在设置视频流时提供更多的选择。例如,有的编解码器视频流可允许使用隔行扫描规范,而有的则不行。
硬件考虑事项
编解码器通常运行于专用集成电路(ASIC)或数字信号处理器(DSP)上。ASIC是针对特定应用而设计定制的,因此功耗通常较低,外形尺寸也相对较小。使用ASIC的不利因素在于,工程设计仅适用于特定应用,因此成本较高。而且如果要根据不断发展的编解码器标准进行实施更改,成本也会比较高。新编解码器的实施通常需要增加ASIC器件的裸片大小。
DSP则能提供全面的软件可编程性,其中包括现场再编程功能,以使用户在推出MPEG 2产品之后还能再让其升级产品支持H.264视频编解码器。此外,DSP还有助于简化可支持多种编解码器产品的开发,而且还能根据标准的变化实时更新编解码器。此外,还可将DSP集成在片上系统(SoC)中,与通用处理器(GPP)和加速器等更多功能结合在一起,从而有助于减少组件数。
应用领域的问题
数字视频实施只是当今大量数创新型应用的一部分,通常运行于GPP之上的应用则构成另一部分,可提供用户界面并实现产品差异化的特定性能。此类应用的重要角色之一就是实现软硬件的统一。例如,在编解码器与视频端口之间提供视频缓存。此外,应用还需要诸如Linux或Windows CE等操作系统来处理以太网协议栈、无线协议栈、输入/输出设备驱动器等。
通过软件实现硬件抽象
新一代视频产品的开发人员必须快速向市场推出具备高级特性的产品,才能确保在竞争中脱颖而出。为了实现上述目标,他们必须尽可能地集中优势资源用于应用本身的开发工作,而不应被视频实施的具体细节所干扰。
视频硬件开发人员为了满足上述要求,推出了包含软硬件、工具以及支持等在内的集成式环境,大幅简化数字视频技术的实施。这种环境提供了一个开放式平台以供众多企业开发和集成可构成数字视频系统的不同组件,从而降低视频系统的复杂性。这些高性能信号处理平台目前包含生产就绪型软件(如硬件驱动器、手工优化的编解码器)以及管理网络上音视频同步和流媒体的应用代码等。
新架构提供的API使开发人员能专注于应用开发工作,而无需为视频实施问题浪费过多时间,也不必进行DSP编程。通过将硬件实施细节与硬件在应用中的使用相分离,开发人员可非常便捷地将应用移植到新平台与新操作系统上,一般只需更改API之后的驱动器即可。
编写应用程序的开发人员只需调用标准函数库就能实现各种视频、影像、话音与音频编解码器以及其他视频和音频功能。例如,图2显示了设计人员在无需考虑实际编解码器实施细节的情况下通过ProcessVideo等函数调用接入视频流的情况。
API本身由硬件制造商提供,并已针对硬件实施进行了优化。如果换用新的硬件,则只需替换驱动程序,而无需更改应用代码。如果标准发生更改或者发布了新标准,则硬件制造商可以更新编解码器,这样应用开发人员只需下载新的软件库即可,而不必重新编写代码。这种方案有助于大幅降低视频开发的成本并缩短产品的上市进程。
访问任何来源的视频
上述方案的主要优势在于无需对应用代码做出重大更改即能访问各种来源的视频流。例如,可用下列代码来访问硬盘驱动器等ATA外设中的视频,而且只要对这段代码范例稍做修改,就能访问任何来源的视频。
InitPeripherals()
InitEthernet();
InitUSB();
InitATA();
InitDisplay();
InitH264Decoder();
OpenCodec()
OpenH264Channel();
StartDecode(ATA.Address,H264.Channel,
Display.Address);
通过API,开发人员能根据视频引擎来配置硬件,以确保特殊应用能够满足复杂节目的要求(如影像尺寸、单位像素位(bpp)等),此外还能管理帧缓冲器与内置屏幕显示功能等。
更改显示尺寸
下列代码范例显示,打开并配置视频流之后即可轻松更改显示尺寸。这段代码使机顶盒能使用相同的代码与家庭影院监视器直接相连,并将内容下载至个人视频播放器。
InitPeripherals()
//Display driver is passed arguments to move away from default values
InitDisplay(QCIF | CIF | D1 | 720p | 1080i);
新系统级抽象方案可显著简化高级视频特性的实施。图3所示的代码显示,可用这种方案来实施时移技术,以便将实时视频存储至磁盘上,而不必立即播放,这样用户即便暂时没时间收看也可以看重播,从而不会错过任何节目。
I/O层驱动程序
上述各种特性背后的复杂细节均由通用 API 访问低层驱动程序完成,因而对开发人员而言是完全透明的。采用界面熟悉、获广泛支持的Linux驱动程序可简化视频技术在嵌入式应用中的集成工作。使用Linux社区非常熟悉的API,如捕获侧(capture side)上的 Video for Linux Two(V4L2)API与通用FBDev API等,能够简化从PC开发环境向嵌入式SoC环境的升级。
在无需使用任何汇编语言编程的情况下,可以以最佳方式实施硬件产品的计算资源,可以执行各种复杂操作,包括优化使用DSP资源和基于硬件的加速引擎,通过信号链模式使用增强型直接存储器存取外设以提高数据传输效率,并通过中断和小片任务模式(Interrupt vs.Tasklet)中的分组处理来灵活满足不同应用要求等。
总之,新型设计方法使开发人员能够通过API实现全面的视频功能,而不必考虑视频处理的细节问题。可轻松对视频处理的低级别细节进行修改,以满足编解码器或硬件更改的要求,而毋需更改上层应用代码。这种方案消除了对 DSP进行编程的麻烦,使开发团队能将大部分精力集中于应用本身的开发上。此外,新方案还有助于以更低的成本大幅缩短集成领先视频功能的产品的上市时间,同时减少未来产品维护与升级所需的时间和成本。