ZHDA249 July   2026 TDA4VE-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
  5. 2了解 OpenVX 内核架构
    1. 2.1 OpenVX 节点执行流程
    2. 2.2 主机和目标内核
    3. 2.3 A72 目标执行模型
  6. 3创建自定义内核包
    1. 3.1 包结构
    2. 3.2 定义内核接口
  7. 4为 A72 内核开发定制 OpenVX 节点:阈值示例
    1. 4.1 实现主机内核
    2. 4.2 实现 A72 目标内核
    3. 4.3 访问 A72 内核上的图像缓冲区
    4. 4.4 实现阈值算法
    5. 4.5 注册内核包
  8. 5将自定义节点集成到 vision_apps 中
    1. 5.1 实现 app_custom_threshold 示例
    2. 5.2 执行日志示例
  9. 6总结
  10. 7参考资料

定义内核接口

自定义阈值包的公共接口分为 include/TI 下的三个头文件。

1) 聚合包头文件

tivx_custom_threshold.h 头文件为使用该包的应用程序提供了一个包含点。

#include <TI/tivx.h>
#include <TI/tivx_custom_threshold_kernels.h>
#include <TI/tivx_custom_threshold_nodes.h>

应用程序可以包含此头文件来访问内核包管理 API 和公共节点创建 API。

2) 内核定义和包 API

tivx_custom_threshold_kernels.h 头文件定义了主机和目标内核实现使用的模块名称和唯一内核名称。

#define TIVX_MODULE_NAME_CUSTOM_THRESHOLD "custom_threshold"
#define TIVX_KERNEL_CUSTOM_THRESHOLD_NAME "com.ti.custom.threshold"

模块名称在模块注册和加载过程中标识内核包。内核名称在主机内核、目标内核和应用程序创建或找到相应的 OpenVX 节点时定义自定义阈值内核。

公共头文件中的数字用户内核 ID 不是固定的,而是由主机内核在运行时使用 vxAllocateUserKernelId() 来分配。这避免了分配硬编码的内核枚举值,并允许 OpenVX 上下文提供可用的用户内核 ID。

同一头文件还定义了主机内核、目标内核和节点创建 API 共享的参数索引。

enum{
    TIVX_KERNEL_CUSTOM_THRESHOLD_INPUT_IDX = 0,
    TIVX_KERNEL_CUSTOM_THRESHOLD_THRESHOLD_IDX,
    TIVX_KERNEL_CUSTOM_THRESHOLD_OUTPUT_IDX,
    TIVX_KERNEL_CUSTOM_THRESHOLD_MAX_PARAMS
};

表 3-2 自定义阈值节点参数
索引参数方向OpenVX 类型说明
TIVX_KERNEL_CUSTOM_THRESHOLD_INPUT_IDX输入图像

输入

VX_TYPE_IMAGEU8 灰度源图像

TIVX_KERNEL_CUSTOM_THRESHOLD_THRESHOLD_IDX

阈值

输入

VX_TYPE_SCALAR

用于像素比较的 U8 标量

TIVX_KERNEL_CUSTOM_THRESHOLD_OUTPUT_IDX

输出图像

输出

VX_TYPE_IMAGE

U8 二进制输出图像

TIVX_KERNEL_CUSTOM_THRESHOLD_MAX_PARAMS

参数计数

-

-

节点参数总数

内核包头文件还声明用于加载和卸载自定义内核的 API。

void tivxCustomThresholdLoadKernels(vx_context context);
void tivxCustomThresholdUnLoadKernels(vx_context context);

这些函数负责协调主机内核模块和 A72 目标内核注册。该应用程序在创建 OpenVX 上下文后调用加载函数,并在释放上下文之前调用卸载函数。

A72 目标内核注册函数也在公共接口中声明。

void tivxRegisterCustomThresholdTargetA72Kernels(void);
void tivxUnRegisterCustomThresholdTargetA72Kernels(void);

这些函数注册和注销与 TIVX_TARGET_MPU_0 关联的目标内核实现。

3) 公共节点创建 API

Tivx_custom_threshold_nodes.h 头文件声明应用程序用于实例化自定义阈值节点的辅助函数。

VX_API_ENTRY vx_node VX_API_CALL
tivxCustomThresholdNode(
    vx_graph graph,
    vx_image input,
    vx_scalar threshold,
    vx_image output);

此函数接受 OpenVX 图形和三个节点参数,并返回 vx_node 对象。在内部,实现使用内核名称 TIVX_KERNEL_CUSTOM_THRESHOLD_NAME 创建节点,并将输入图像、阈值标量和输出图像与其相应的参数索引关联起来。