ZHCAB26 September 2020 DRA710 , DRA712 , DRA714 , DRA716 , DRA718 , DRA722 , DRA724 , DRA725 , DRA726 , DRA745 , DRA746 , DRA74P , DRA750 , DRA756 , DRA75P , DRA76P , DRA77P , DRA780 , DRA781 , DRA782 , DRA783 , DRA785 , DRA786 , DRA787 , DRA788 , DRA790 , DRA791 , DRA793 , DRA797 , TDA2EG-17 , TDA2HF , TDA2HG , TDA2HV , TDA2LF , TDA2P-ABZ , TDA2P-ACD , TDA2SA , TDA2SG , TDA2SX
Other TMs
越来越多的客户考虑使用在单个 Jacinto/TDA 中支持信息娱乐功能以及 RVC 或动画的系统。最近,需要实时解码 H264 流的系统引入了基于以太网的 RVC,同时,部分客户要求播放带有启动动画的标识视频。
只有 Jacinto/TDA 具有 IVA-HD 硬件实例,因此使用两种不同的软件框架和编解码器驱动器来控制 IVA-HD,但这会发生资源冲突。
假设有一个支持这些功能的系统,如图 1-1 所示:
考虑到快速启动的要求,大多数客户选择 VISION SDK 框架来开发 RVC 或动画。具有链接和链概念的 VISION SDK 设计用于实现任何用例。
当视频数据(通常为 h264)通过 NullSource 链接从引导分区读取为视频文件或从以太网帧中提取为原始流时,NullSource 链接或 Autosar 链接会将这些流发送到解码链接进行解码。如图 1-2 所示,解码链接会通过 VISION SDK 编解码器(它位于 M4 内核中,用于配置 IVA-HD 硬件模块来实现解码)调用驱动器,然后将解码帧发送到下一个链接。
默认情况下,TI PSDKLA 将开源 gstreamer 框架用于任何多媒体播放器用例。TI 提供了 gstreamer 插件:ducatiH264 和 ducaitiMJPEG。这些插件可以在 gstreamer 流水线中工作,以处理多媒体文件。如图 1-3 所示,gstreamer 会调用 ducatiH264 插件,以在 M4 内核上配置 IPUMM(编解码器),从而与 IVAHD 进行通信来解码 H.264 帧。解码插件会调用位于 M4 内核上的 TI IPUMM 驱动器,从而控制 IVA-HD 硬件模块,以实现解码/编码。然后,将帧发送到下一个插件。
如果 A 和 B 用例同时发生,则将有一个用例失败,因为单个 IVA-HD 硬件实例无法同时由 M4 上的解码链接和 IPUMM 控制。实际上,同时需要 M4 具有解码链接和 IPUMM 支持功能以在 A15 上解码的任何用例都将失败。
共享 IVA-HD 硬件要求只能在 M4 中调用驱动器。PSDKLA 和 VSION SDK 都有自己的框架组件和编解码器。它们不兼容。更好的方法是使用一个框架和编解码器,并使其与其他框架和编解码器兼容。
IPUMM 和 VISION SDK 解码链接在同一个内核上运行。如图 2-1 所示,框架组件支持多实例,因此 IVA-HD 可以被两个实体控制,gstreamer 解码插件和解码链接都可以调用框架组件。
对于 PSDKLA + VISION-SDK 架构,我们通常使用早期启动晚期附加模式。图 3-1 显示了启动流程。
对于 PSDKLA,IVA-HD 的时钟和电源由内核控制。对于 VISOIN-SDK,使用 IPU 配置 IVA-HD。使用以下启动流程可解决资源冲突。
对于一般用例,IVA-HD 时钟和电源在内核中配置。通常在解决方案中,在 u-boot 中配置了 IVAHD DPLL。
如果在 u-boot 中配置了 IVA-HD,您必须删除内核 IVA-HD 配置。否则,内核会将 IVA-HD 复位。
Linux 使用 IPUMM 在 PSDKLA 中解码。解码/编码链接位于 VISION-SDK 中,用于 RVC/动画解码。因此,必须在 M4 中支持 IPUMM 和解码链接,这应该在 cfg.mk 中配置
例如,在 J6 EVM 中:sdk/vision_sdk/apps/configs/tda2xx_evm_linux_all/cfg.mk IVAHD_INCLUDE 旨在支持解码/编码链接。IPUMM_INCLUDE 旨在支持 IPUMM。参考代码如下所示:
# Both IVAHD_INCLUDE & IPUMM_INCLUDE should not be set to "yes"
# Only one should be enabled to avoid IVA-HD resource conflict
IPUMM_INCLUDE=yes
IVAHD_INCLUDE=yes
比较 PSDKLA 和 VISION SDK 中的驱动器,如表 3-1 所示。它表明框架组件和代码不兼容。
类型 | PSDKLA | VISION SDK | 兼容性 |
---|---|---|---|
编解码器引擎 | 是 | 否 | / |
框架组件 | 是 | 是 | 不兼容 |
编解码器 | 是 (IPUMM) | 是 (1) | 不兼容 |
ivahd_h264enc_02_00_09_01_production/
ivahd_h264vdec_02_00_17_01_production/
ivahd_hdvicp20api_01_00_00_23_production/
ivahd_jpegvdec_01_00_13_01_production/
ivahd_jpegvenc_01_00_16_01_production/
若要设置编解码器引擎和 IPUMM,请参阅 VisionSDK_Linux_UserGuide.pdf:“2.4.2.2 可选组件 ipumm、编解码器引擎和框架组件”来设置编解码器引擎和 IPUMM。
该文档位于以下路径中:PROCESSOR_SDK_VISION_xx_xx_xx_xx/vision_sdk/docs/Linux/VisionSDK_Linux_UserGuide.pdf。
根据 VisionSDK_Linux_UserGuide.pdf(位于以下路径:PROCESSOR_SDK_VISION_xx_xx_xx_xx/vision_sdk/docs/Linux/VisionSDK_Linux_UserGuide.pdf),已知与 VSDK 一同打包的框架组件版本是用于 IVA-HD 分析的补丁版本,该补丁版本不能与 IPUMM 一同使用。
这些解决方案使用 PSDKLA 框架组件。此框架组件不能与 VISION SDK 编解码器一同使用,只能与 IPUMM 一同使用。因此,在 VISION SDK 中将编解码器更改为 IPUMM。
若要安装 PSDKLA 的新框架组件并替换 VISION SDK 版本,请参阅位于以下路径的 VisionSDK_Linux_UserGuide:PROCESSOR_SDK_VISION_xx_xx_xx_xx/vision_sdk/docs/Linux/VisionSDK_Linux_UserGuide.pdf。
PSDKLA 使用 IPUMM 编解码器。但是,VISION SDK 使用以下编解码器:
在 VISION SDK 中,IPUMM 编解码器用于替换 VISION SDK 代码。主要修改如下所示:
----------------------------- build/tools_path.mk ---------------------------
- hdvicplib_PATH ?= $(TI_SW_ROOT)/codecs/ivahd_hdvicp20api_01_00_00_23_production
- jpegvenc_PATH ?= $(TI_SW_ROOT)/codecs/ivahd_jpegvenc_01_00_16_01_production
- jpegvdec_PATH ?= $(TI_SW_ROOT)/codecs/ivahd_jpegvdec_01_00_13_01_production
- h264venc_PATH ?= $(TI_SW_ROOT)/codecs/ivahd_h264enc_02_00_09_01_production
- h264vdec_PATH ?= $(TI_SW_ROOT)/codecs/ivahd_h264vdec_02_00_17_01_production
+hdvicplib_PATH ?= $(mm_PATH)/extrel/ti/ivahd_codecs
+jpegvenc_PATH ?= $(mm_PATH)/extrel/ti/ivahd_codecs
+jpegvdec_PATH ?= $(mm_PATH)/extrel/ti/ivahd_codecs
+h264venc_PATH ?= $(mm_PATH)/extrel/ti/ivahd_codecs
+h264vdec_PATH ?= $(mm_PATH)/extrel/ti/ivahd_codecs
根据用例,解码链接需要首先启动。因此,在 M4 中配置了 IVA-HD:
sdk/links_fw/src/rtos/links_ipu/iva/codec_utils/src/hdvicp2_config.c:icont_boot[]
从 IPUMM 中删除配置:
sdk/ti_components/codecs/ipumm
--- a/src/ti/framework/dce/ivahd.c
void ivahd_init(uint32_t chipset_id)
···
- ivahd_boot();
DEBUG("RMAN_register() for HDVICP is successful")