本资源的原文使用英文撰写。 为方便起见,TI 提供了译文;由于翻译过程中可能使用了自动化工具,TI 不保证译文的准确性。 为确认准确性,请务必访问 ti.com 参考最新的英文版本(控制文档)。
本应用手册针对使用 AM62A 处理器时的多媒体性能提供了各种基准 [1]。本文中的多媒体是指对视频流进行编码和解码以及对静态图像进行编码的能力。AM62A 中的硬件加速器能够进行 H.264/265 编码/解码和 MJPEG 编码。还介绍了示例用例,并对典型用例负载进行了系统分析。
Other TMs
在当今快速发展的数字化环境中,物联网应用的边缘有多种技术正在融合。基于摄像头和视频的应用现在可以执行智能边缘处理,例如检测人员、目标物体或事件,同时计算和功耗显著降低。然后,这些经过处理的数据可以无缝地流式传输到一个中心点,例如可视门铃、无人机和安防摄像头等监控应用。对于这些类型的应用,出色的编码/解码能力以及支持多种配置(例如多流和多分辨率编码/解码)的能力非常重要。本应用手册展示了如何使用 AM62A 处理器来应对这些用例。其 H.264 和 H.265 编码和解码功能允许对高清视频内容进行无缝压缩和解压缩,确保对实时流式传输和视频监控等应用进行高效的数据处理。要以上所有目标,解决方案需要具备低功耗和小尺寸特性,从而更大限度地延长电池寿命。本应用手册主要介绍 AM62A 器件的多媒体功能 [2]。本文档简要介绍了 AM62A,并描述了用于访问多媒体加速器的软件框架。接下来,提供了系统设计人员关心的典型基准,例如延时和 DDR 带宽消耗。最后,两个系统示例使用案例展示了系统流程以及资源负载。这些示例应用已经在 AM62A 入门套件 [3] 上进行了测试。
AM62A Edge AI 微处理器如图 2-1 所示。AM62A 简化方框图是一款面向分析应用而设计的异构处理器。不同的硬件加速器针对不同的任务进行了优化,从而能够针对不同的视觉和多媒体应用优化功耗和成本以及占用空间
AM62A 中来自多媒体环境的主要处理和计算子系统如下所示:
AM62A 中的编解码器硬件 IP 块支持 H.264 和 H2.65 编码/解码功能。表 3-1 说明了编码器/解码器块的一些高级规格。
最大分辨率 | 8192x 8192 |
---|---|
最小分辨率 | 256x128 |
时钟速率 | 400MHz |
约束条件 | 图片宽度和高度都是 8 的倍数 |
并发编码/解码流 | 取决于分辨率和帧速率 4 个 1920x1080 @ 30fps 编码流 + 4 个解码流 |
H.264 编码 | H.264 Baseline/Constrained Baseline/ Main/High Profiles Level @ L5.2 |
H.265 编码 | H.265 Main 和 Main Still Picture Profile @ L5.1 High Tier |
H.264 解码 | H.264 Baseline/Constrained Baseline/ Main/High Profiles Level @ L5.2 |
H.265 解码 | H.265 Main 和 Main Still Picture Profile @ L5.1 High Tier |
AM62A 中的 JPEG 硬件 IP 块是一种有状态且可扩展的高性能静态图像编码器。它能够对 YUV420/YUV422 原始图片数据进行实时编码,使其转换为完全压缩图像 (jpeg) 或压缩图像序列 (MJPEG)。
表 4-1 展示了 MJPEG 编码器的一些高级规格。
最大分辨率 |
8k x 8k |
时钟速率 |
250MHz |
编码率 |
4 字节/周期(YUV422 中为 2 个像素/周期,YUV420 中为 2.66 个像素/周期) |
特性支持 |
JPEG 基线配置文件 配置压缩比 两个量化表 |
表 4-2 列出了理论吞吐量。测得的吞吐量通常在 80% 左右,对于 YUV 4:2:2 格式,测得的吞吐量为 416MP/s。
颜色二次采样 | 吞吐量 |
---|---|
YUV 4:2:0 | 250x2.66= 666MP/s |
YUV 4:2:2 | 250x2 = 500MP/s |
JPEG 编码单个流 1080p@30FPS 的硬件和软件延时(考虑生成标头、比特流)测量结果约为 8.04ms。
有关 JPEG 编码器的详细信息可在 [6] 中找到。
GStreamer 是一个开源框架,它简化了媒体播放器和捕获编码器等多媒体应用的开发。它通过使用标准接口封装了现有的多媒体软件元件(例如编解码器和硬件加速器),并为各种应用提供了统一的框架。值得注意的是,新的 GStreamer 功能正在不断添加,核心库也得到了 GStreamer 社区成员的积极支持。有关 GStreamer 框架的附加信息,请访问 GStreamer 工程网站 [4]。
GStreamer 的模块化性质有利于添加新功能,并能够实现应用开发和测试的灵活性。处理节点通过具有多个接收端和/或源端焊盘的 Gstreamer 插件来实现。许多插件通常作为 ARM 软件实现运行,但对于更复杂的 SOC,某些函数在硬件加速 IP 上的执行效果更好。用于 AM62A 视觉处理的 GStreamer 插件可在 [5] 中找到。
Video4Linux 版本 2 (V4L2) 是一种开源框架,它提供了一个媒体接口来连接所有基于 Linux 的应用。V4L2 是一组器件驱动程序和 API,用于支持 Linux 系统上的实时视频捕捉和视频存储器到存储器操作。
分别使用编码器和解码器硬件的视频编码和解码作为 V4L2 驱动程序启用。V4L2 通过一个实现 V4L2 节点 ioctls 的薄层与编码器和解码器驱动器集成,并将 V4L2 数据结构转换为编码器/解码器可理解的数据结构。
使用 GStreamer 作为多媒体框架的一个好处是内核库已在 ARM Linux 上构建并运行。Gstreamer 插件是在具有 ARM 和多媒体硬件加速器的 TI 嵌入式处理器上启用额外硬件功能所需的唯一元件。开源 GStreamer 插件为 GStreamer 流水线提供了一些元素,可以通过 V4L2 GStreamer 插件使用硬件加速视频解码。表 4-3 中提供了 AM62A Processor SDK 中的 GStreamer 插件和比特流格式支持。
GStreamer 插件支持 | 支持的比特流格式 | |
---|---|---|
编码器 | v4l2h264enc v4l2h265enc |
V4L2_PIX_FMT_H264 V4L2_PIX_FMT_HEVC |
解码器 | v4l2h264dec v4l2h265dec |
V4L2_PIX_FMT_H264 V4L2_PIX_FMT_HEVC |
如前一节所述,在用户空间级别,TI 使用 GStreamer 这种多媒体应用开源框架。Gstreamer 库又与 Video for Linux(V4L2 插件)连接,后者处理特定于底层硬件加速器的所有详细信息。
具体来说,对于 VPU,基于 GStreamer 的 V4L2 插件与 V4L2 编解码器内核驱动器接口连接。而 V4L2 驱动器则通过处理器间通信 (IPC) 与编码器/解码器上运行的固件进行通信。同样,JPEG 驱动程序也基于 Video4Linux 2 (V4L2) API,负责配置 JPEG 编码器硬件,并在生成压缩图像后生成 JPEG 图像标头。驱动程序是使用 V4L2 的 M2M 框架实现的,该框架是存储器到存储器器件的框架,用于从存储器中获取数据、执行一些处理并将处理后的数据写回存储器。用于利用编码/解码和 JPEG 编码功能的总体软件驱动程序架构如图 5-1 所示。