ZHDA249 July 2026 TDA4VE-Q1
主机内核定义了暴露给应用的 OpenVX 用户内核。与执行实际图像处理的目标内核不同,主机内核负责描述 OpenVX 框架的内核接口。这包括定义内核名称、参数类型、验证回调、初始化回调和支持的执行目标。
主机内核实现位于以下源文件中。
vision_apps/kernels/custom_threshold/host/vx_custom_threshold_host.c
该文件中的主要函数是 tivxAddKernelCustomThreshold(),它执行自定义内核的完整注册。注册过程包括四个主要步骤:
• 创建 OpenVX 用户内核。
• 定义所需的输入和输出参数。
• 注册支持的执行目标。
• 完成内核注册。
/* Create the OpenVX user kernel and associate the callback functions */
kernel = vxAddUserKernel(context, TIVX_KERNEL_CUSTOM_THRESHOLD_NAME, kernel_id,
tivxAddKernelCustomThresholdValidate, tivxAddKernelCustomThresholdInitialize, NULL);
/* Define the input image parameter */
vxAddParameterToKernel(kernel, 0, VX_INPUT, VX_TYPE_IMAGE, VX_PARAMETER_STATE_REQUIRED);
/* Define the input threshold value */
vxAddParameterToKernel(kernel, 1, VX_INPUT, VX_TYPE_SCALAR, VX_PARAMETER_STATE_REQUIRED);
/* Define the output image parameter */
vxAddParameterToKernel(kernel, 2, VX_OUTPUT, VX_TYPE_IMAGE, VX_PARAMETER_STATE_REQUIRED);
/* Register the kernel for execution on the A72 target */
tivxAddKernelTarget(kernel, TIVX_TARGET_MPU_0);
/* Complete the kernel registration */
vxFinalizeKernel(kernel);vxAddUserKernel() 创建一个新的 OpenVX 用户定义内核,并将其与将由框架调用的回调函数相关联。在本例中,验证回调会验证提供的参数是否满足内核要求,而初始化回调在执行图形之前配置有效的映像区域。
对 vxAddParameterToKernel() 的三个调用定义了暴露给应用的内核接口。该阈值示例需要一个输入图像、一个标量阈值和一个输出图像。为每个参数分配一个索引,该索引必须与创建节点时使用的参数顺序相匹配。
调用 tivxAddKernelTarget() 指定该内核在 A72 内核 (TIVX_TARGET_MPU_0) 上执行。如果有多个实现可用,则可以注册其他目标。
最后,vxFinalizeKernel() 完成注册过程,并使内核可用于图形验证和执行。
在图形验证期间,OpenVX 框架会调用验证回调,以在执行图形之前验证参数配置。验证回调会检查输入图像格式和标量类型是否符合内核要求。它还配置输出映像的元数据,以便框架可以在执行图形之前分配正确的图像对象。简化实现如下所示。
/* Query the input image format */
vxQueryImage(input, VX_IMAGE_FORMAT, &format, sizeof(format));
/* Query the scalar type */
vxQueryScalar(threshold, VX_SCALAR_TYPE, &type, sizeof(type));
/* Configure the output image metadata */
vxSetMetaFormatAttribute(meta, VX_IMAGE_WIDTH, &width, sizeof(width));
vxSetMetaFormatAttribute(meta, VX_IMAGE_HEIGHT, &height, sizeof(height));
vxSetMetaFormatAttribute(meta, VX_IMAGE_FORMAT, &format, sizeof(format));初始化回调在成功验证后和开始执行图形之前执行。对于此阈值示例,回调配置有效矩形,以便输出映像与输入映像具有相同的有效区域。该操作会在不更改图像尺寸的情况下执行一对一像素变换,因此无需额外的初始化。