数字信号处理

平台

DSP 设计支持

入门

系统级抽象有助于加速嵌入式视频产品上市进程

作者:J.B. Fowler,德州仪器 DSP 系统部视频系统应用工程师

数字视频技术正从便携式摄像机与安全监控系统等专用应用领域向各种消费类电子产品快速推广,这为传统视频开发技术提出了巨大挑战。过去,这些传统技术需要熟悉最新编码/解码(编解码器)标准并能为高性能信号处理平台编写汇编代码的专家手工编写大量代码。

信号处理技术制造商推出了将处理器、开发工具、软件以及系统专业技术高度集成的开发环境,使设计人员能够在高系统级别的抽象环境下开发视频应用,从而解决这一繁琐而复杂的难题。这使设计人员能集中精力开发应用功能,通过简单调用应用编程接口 (API) 就能实施视频、音频、语音和影像技术,以处理诸如实施特定编解码器引擎以及匹配屏幕分辨率等细节。

新一代视频应用


随着实施数字视频的成本不断下降,更多嵌入式开发人员开始在各种产品中集成音、视频技术。机顶盒(STB)作为集成家庭安全监控系统的功能,其使家庭用户能在电视屏幕上查看访客情况。同时,传统与非传统视频应用的质量也在不断提高。为了可智能化地调整对比度与聚焦,正在开发计算性能更高的算法。高灵活性的处理选项也使用户能通过包括黑白、彩色、红外、热感等在内的各种设置捕获影像。此外,我们也正在开发智能摄像头,以在镜头框中的所有人都睁眼时才捕获影像。

传统的编解码器实施方法


日益广泛的视频使用与复杂性不断提高的新型视频应用使人们开始重视传统视频开发方法的局限性问题。传统方法的最大障碍之一就是需要对编解码器算法进行手工编码,才能压缩数据流进行传输存储也才能解压缩用于查看和编辑。目前的编解码器标准非常复杂,而且还在不断演进发展,以增强视频质量和降低带宽占用。

正由于此,工程师往往需要很多人月 (man-month) 的时间才能完成嵌入式视频应用的实施。通常,编解码器先用采 C/C++ 等较高级语言开发,然后再将部分代码用汇编语言重写,从而根据硬件实施优化性能与功耗。上述编程工作的第二阶段需要熟练掌握特定硬件平台的大量专业技能。

诸如 MPEG2 等前代编解码器已稳定成型,但 MPEG4 与 H.264 等最新的高效编解码器仍在不断改进,因此我们必须在产品开发过程和未来升级中考虑到编解码器变动的可能性。此外,新型编解码器也提供了更丰富的工具套件 (toolset),能够为开发人员在设置视频流时提供更多选择。例如,有的编解码器视频流可允许使用隔行扫描规范,而有的则不行。

硬件考虑事项


编解码器通常运行于专用集成电路 (ASIC) 或数字信号处理器(DSP)上。ASIC是针对特定应用进行设计定制的,因此功耗通常较低,外形尺寸也相对较小。使用 ASIC 的不利因素在于,工程设计仅适用于特定应用,因此成本较高,而且如果要根据不断发展的编解码器标准进行实施更改的话,成本也会比较高。新编解码器的实施通常需要增加 ASIC 器件的裸 片大小。

DSP 则能提供全面的软件可编程性,其中包括现场再编程功能,以使用户在推出 MPEG 2 产品之后还能再让其升级支持 H.264 视频编解码器。此外,DSP 还有助于简化可支持多种编解码器产品的开发,而且还能根据标准的变化实时更新编解码器。此外,还可将 DSP集成在片上系统(SoC)中,与诸如通用处理器(GPP)和加速器等更多功能结合在一起,从而有助于减少组件数。

应用领域的问题


数字视频实施只是当今大多数创新型应用的一部分,通常运行于 GPP 之上的应用则构成另一部分,可提供用户界面并实现产品差异化的特定特性。应用的重要角色之一就是实现软硬件的统一,例如,在编解码器与视频端口之间提供视频缓存。此外,应用还需要诸如 Linux或Windows CE 等操作系统,因为必须通过操作系统来处理以太网协议栈、无线协议栈、输入/输出设备驱动器等。

通过软件实现硬件抽象


新一代视频产品的开发人员必须快速向市场推出具备高级特性的产品,才能确保在竞争中脱颖而出。为了实现上述目标,他们必须尽可能集中优势资源用于应用本身的开发工作,而不应被视频实施的具体细节所干扰。

视频硬件开发人员为了满足上述要求,推出了包含软硬件、工具以及支持等在内的集成式环境,能够大幅简化数字视频技术的实施。这种环境提供了一个开放式平台以供众多企业开发和集成可构成数字视频系统的不同组件,从而降低了视频系统的复杂性。这些高性能信号处理平台目前包含生产就绪型软件,如硬件驱动器、手工优化的编解码器,以及管理网络上音视频同步和流媒体的应用代码等。

新架构提供的 API 使开发人员能专注于应用开发工作,而无需为视频实施问题浪费过多时间,也不必进行 DSP 编程。通过将硬件实施细节与硬件在应用中的使用相分离,开发人员可非常便捷地将应用移植到新平台与新操作系统上,一般仅需更改 API 之后的驱动器即可。

编写应用程序的开发人员仅需调用标准函数库就能实施各种视频、影像、话音与音频编解码器以及其他视频和音频功能。

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);

新系统级抽象方案可显著简化高级视频特性的实施。我们可用这种方案来实施时移技术,以便将实时视频存储至磁盘上,而不必一定要立即播放,这样用户即便暂时没时间收看也可以看重播,从而不会错过任何节目。

I/O 层驱动程序


上述各种特性背后的复杂细节均由通用 API 访问低层驱动程序完成,因而对开发人员而言实际上是完全透明的。采用界面熟悉、获广泛支持的 Linux 驱动程序可简化视频技术在嵌入式应用中的集成工作。我们可使用 Linux 社区非常熟悉的 API,如捕获侧 (capture side) 上的 Video for Linux Two (V4L2) API 与通用 FBDev API 等,能够简化从 PC 开发环境向嵌入式 SOC 环境的升级。

我们能够在无需使用任何汇编语言编程的情况下以最佳方式实施硬件产品的计算资源。我们可以执行各种复杂操作,包括优化使用DSP资源和基于硬件的加速引擎,通过信号链模式使用增强型直接存储器存取外设以提高数据传输效率,并通过中断和小片任务模式(Interrupt vs. Tasklet)中的分组处理来灵活满足不同应用要求等。

总而言之,新型设计方法使开发人员能够通过 API 实现全面的视频功能,而不必考虑视频处理的细节问题。可轻松对视频处理的低级别细节进行修改,以满足编解码器或硬件更改的要求,而毋需更改上层应用代码。这种方案消除了对 DSP 进行编程的麻烦,以使开发团队能将大部分部力量集中于应用本身的开发上。此外,新方案还有助于以更低的费用大幅缩短集成领先视频功能的产品的上市时间,同时减少未来产品维护与升级所需的时间和成本。