数字视频技术正由摄影机与保全系统等专用应用领域快速扩展到各种消费性电子产品,这对于传统的视讯开发方法造成极大的挑战。长久以来,这些开发方法皆需要熟悉最新编码/译码 (编译码器) 标准并能为高效能讯号处理平台撰写汇编程序码的专家手动撰写大量程序代码。
为解决此方面的难题,讯号处理技术制造商推出将处理器、开发工具、软件及系统专业技术高度整合的开发环境,让设计人员能够在高系统层级的抽象环境下开发视讯应用。这使得设计人员能专注于开发应用功能,以及透过应用程序设计界面 (API) 的简单呼叫便能执行视讯、音频、语音及图像处理技术,以处理特定编译码器引擎执行及调整屏幕分辨率等细节。
新一代视讯应用
随着数字视频执行的成本不断下降,愈来愈多的嵌入式开发人员开始在各种产品中整合音频及视讯技术。例如,图 1 显示机顶盒 (STB) 如何整合住家保全系统的功能,以便家庭用户从电视屏幕监视访客。同时,传统与非传统视讯应用的质量也不断提升。为了有效调整对比度与焦距,目前正在开发更有效的算法。弹性的处理选项也能让用户透过黑白、彩色、红外线、热感应等各种设定来撷取影像。此外,目前也已开发智能型摄影机,可在镜头里的所有人都睁眼时才撷取影像。
《图一 将机顶盒整合于住家保全系统的范例,可用以监视进出前门的访客,并在电视屏幕上显示通知。》
|
传统的编译码器执行方法
逐渐广泛使用的视讯与复杂性不断提高的新型视讯应用突显出传统视讯开发方法本身的局限性。传统方法其中一个最大的障碍就是需要对编译码器算法进行手动编码,才能压缩数字串流进行传输或储存,并予以解压缩进行检视和编辑。目前的编译码器标准相当复杂,且仍然不断演进,以增强视讯质量和降低带宽占用。
因此,工程人员一般需要许多人月(man-months)的时间才能完成嵌入式视讯应用的执行。通常,编译码器是先以 C/C++ 等高级语言开发,然后以汇编语言重新撰写其中部分的程序代码,以根据硬件执行以优化其效能与功耗。上述程序设计工作的第二阶段需熟练掌握特定硬件平台的大量专业技能。
虽然 MPEG2 等旧型编译码器已稳定成型,但 MPEG4 与 H.264 等最新的高效编译码器仍然持续演进,因此必须在产品开发过程中及未来升级时考虑编译码器更改的可能性。此外,新型编译码器也提供多样化的工具组,可为开发人员在设定视讯串流时提供更多选择。例如,某些编译码器视讯串流允许使用隔行扫描,而某些则不允许。
硬件考虑
编译码器通常是在特殊应用集成电路 (ASIC) 或数字信号处理器 (DSP) 上执行。ASIC 为针对各个应用的客制化设计,因此通常功耗较低,外型尺寸也相对较小。使用 ASIC 的缺点是工程设计仅适用于特定应用,因此成本较高,而且若要根据不断发展的编译码器标准进行更改,成本也会较高。新编译码器的执行通常需要增加 ASIC 装置的芯片大小。
DSP 则能提供全面的软件程序设计功能,其中包括现场重新程序设计功能,以便用户在推出 MPEG 2 产品之后能够将其升级到 H.264 视讯编译码器。此外,DSP 也有助于简化可支持多种编译码器产品的开发,并能根据标准的变化实时更新编译码器。此外,也可将 DSP整合于单芯片系统 (SoC) 中,与一般用途处理器 (GPP) 及加速器等其他功能相互结合,以降低组件数。
应用方面
数字视频执行只是目前大多数创新应用的一部分。而如今的应用,通常于 GPP 上运作的,并可提供让其在同一个产品类别中实现产品差异化的用户接口及特定功能。应用的其中一个重要角色就是实现软硬件的整合,例如,在编译码器与视频端口之间提供视讯缓冲。此外,应用也需要 Linux 或 Windows CE 等操作系统,以处理以太网络通讯堆栈、无线通信堆栈、输入/输出设备驱动程序等。
透过软件进行硬件抽象
新一代视讯产品的开发人员需要让进阶功能的产品快速上市,以确保在竞争中保持领先。为达成上述目标,必须将资源尽可能专注于应用本身,而不应受视讯执行的细节所干扰。
为满足上述要求,视讯硬件开发人员推出了涵盖软硬件、工具及支持的整合式环境,以大幅简化数字视频技术的执行。此类环境可提供由多家公司开发且整合数字视频系统组件的开放式平台,以降低视讯系统的复杂性。这些高效能讯号处理平台目前包含生产就绪的软件,如硬件驱动程序、手动优化的编译码器,及管理网络上音频视讯同步与串流的应用程序代码。
新架构提供的 API 使开发人员能专注于应用开发工作,而无需为视讯执行问题浪费过多时间,也不需要进行 DSP 程序设计。将硬件执行细节与硬件在应用方面的使用相互分离后,开发人员便能迅速将应用移植至新平台与新操作系统,这一般只需更改 API 之后的驱动程序即可。
撰写应用程序的开发人员只需呼叫标准链接库函数便能执行各种视讯、图像处理、语音与音频编译码器及其他视讯和音频功能。图二中的范例显示开发人员如何以 ProcessVideo() 等函数呼叫以存取视讯串流,而不需要顾虑实际编译码器执行的细节问题。
《图二 显示开发人员如何使用 API 架构呼叫标准链接库函数已进行视讯执行、图像处理及语音编译码器,以简化开发过程。》 |
API 本身由硬件制造商提供,并针对硬件执行进行优化。若换用新的硬件,则只需更换新的驱动程序即可,而无需更改应用程序代码。若标准发生更改或发布新标准,则硬件制造商可更新编译码器,应用开发人员便只需下载新的软件库,而不需要重新撰写程序代码。此种做法有助于大幅降低视讯开发的成本,并可缩短产品的上市时程。
存取任何来源的视讯
上述做法的主要优势在于不需要对应用程序代码做出重大更改,便能够存取各种来源的视讯串流。例如,使用下列程序代码即可存取硬盘等 ATA 外围的视讯,而只要将这段范例程序代码(如图三)略做修改,便能存取任何来源的视讯。
《图三 范例程序代码》 |
透过 API,开发人员可根据视讯引擎来配置硬件,以确保特殊应用能够满足复杂的程序设计要求,例如影像尺寸、单位像素位等,此外也能够管理北桥缓冲存储器与内建屏幕显示功能等。
更改显示尺寸
下列范例程序代码(如图四)显示如何在开启及配置视讯串流后轻松更改显示尺寸。这段程序代码能让机顶盒使用相同的程序代码直接连接家庭剧院显示器,并将内容下载至个人视讯播放器。
《图四 例程序代码》 |
新的系统层级抽象做法可显著简化进阶视讯功能的执行。图五中的程序代码显示如何以此种做法来运行时间转移(time-shifting),以便在不立即播放的情况下,将实时视讯储存于磁盘中,让用户能暂停播放,而不错过任何节目。
《图五 这段程序代码显示系统层级抽象做法如何以运行时间转移来管理机顶盒播放,以便将实时视讯储存于磁盘中,而无需立即播放,进而提升用户的体验。》 |
输入/输出层驱动程序
上述各种功能背后的复杂细节皆由透过通用 API 存取的低阶驱动程序所完成,因此对于开发人员而言为完全透明。采用一般熟悉且受到广泛支持的 Linux 驱动程序可简化视讯技术于嵌入式应用中的整合工作。使用 Linux 社群相当熟悉的 API,例如撷取端的 Video for Linux Two (V4L2) API 与通用 FBDev API 等,能简化从 PC 开发环境到嵌入式 SOC 环境的转移。
此外,硬件装置的运算资源在无需使用任何汇编程序设计的情况下,也能以最佳方式执行。其中包括各种复杂操作,例如 DSP 资源使用优化及以硬件为基础的加速引擎、透过讯号链模式使用增强型直接内存访问外围以提高数据传输效率,以及透过中断模式和小型任务模式中的封包处理来弹性满足不同应用要求。
概括来说,新型设计法能使开发人员透过 API 实现全面性的视讯功能,而无需顾虑视讯处理的细节问题。视讯处理的低阶特定细节修改相当简易,可满足编译码器或硬件更改的要求,而不需要更改上层应用程序代码。这种做法省去对 DSP 进行程序设计的手续,能使开发团队将大部分心力投入于应用本身的开发。此外,此种新做法也有助于以较低的成本使整合先进视讯功能的产品快速上市,同时降低未来产品维护与改进所需的时间和成本。
---本文作者为德州仪器DSP系统部门视讯系统应用工程师---