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参考资料

实现 A72 目标内核

当主机内核定义内核接口时,目标内核会在目标内核上实现自定义操作的实际执行。在本示例中,目标内核在 Arm Cortex-A72 内核上运行,负责接收输入和输出对象描述符、访问图像缓冲区、执行阈值操作,并将处理后的结果返回到 OpenVX 框架。

目标内核实现位于以下源文件中。

vision_apps/kernels/custom_threshold/a72/vx_custom_threshold_target.c

目标内核包含四个主要回调函数。

• 通过 TIOVX 框架注册目标内核。

• 在执行图形之前创建所需的任何资源。

• 处理每个节点的执行。

• 释放图形时删除资源。

目标内核是通过调用 tivxAddTargetKernel() 来注册,该调用将自定义内核与其回调函数相关联。

/* Register the Target Kernel on the A72 core */
vxAddTargetKernel( kernel_id, TIVX_TARGET_MPU_0,
        /* Create callback */
        tivxCustomThresholdCreate,
        /* Process callback */
        tivxCustomThresholdProcess,
        /* Delete callback */
        tivxCustomThresholdDelete,
        NULL, NULL);

注册会将自定义内核与 A72 执行目标 (TIVX_TARGET_MPU_0) 相关联,并指定将在节点生命周期期间调用的回调函数。

成功验证图形后,将执行一次 Create 回调。它通常用于分配资源,初始化内部数据结构或准备内核所需的硬件资源。由于阈值示例仅执行基于 CPU 的简单映像处理,因此不需要额外资源,回调执行极少的初始化。

Process 回调包含应用特定的图像处理算法。在每次图形执行过程中,OpenVX 框架使用与节点参数相对应的对象描述符来调用此回调。回调将共享存储器地址转换为 CPU 可访问的指针,将图像缓冲区映射到 A72 地址空间,执行图像处理,最后取消映射缓冲区,然后再将控制返回到框架。

释放图形时调用 Delete 回调。它负责释放由 Create 回调分配的任何资源。由于本例中不分配持久资源,因此回调只是成功返回。

Process 回调是目标内核实现的核心。以下各节介绍了如何在 A72 内核上访问图像缓冲区,以及如何实现阈值操作。