VX_API_ENTRY vx_status VX_API_CALL vxAllocateUserKernelId(vx_context context, vx_enum * pKernelEnumId) { vx_status status = VX_ERROR_INVALID_REFERENCE; if ((vxIsValidContext(context) == vx_true_e) && pKernelEnumId) { status = VX_ERROR_NO_RESOURCES; if(context->next_dynamic_user_kernel_id <= VX_KERNEL_MASK) { *pKernelEnumId = VX_KERNEL_BASE(VX_ID_USER,0) + context->next_dynamic_user_kernel_id++; status = VX_SUCCESS; } } return status; }
//////// // User kernel should have a unique enumerations and name for user kernel: // USER_LIBRARY_EXAMPLE - library ID for user kernels in this example // USER_KERNEL_TENSOR_COS - enumeration for "app.userkernels.tensor_cos" kernel // // TODO:******** // 1. Define USER_LIBRARY_EXAMPLE // 2. Define USER_KERNEL_TENSOR_COS using VX_KERNEL_BASE() macro enum user_library_e { USER_LIBRARY_EXAMPLE = 1, }; enum user_kernel_e { USER_KERNEL_TENSOR_COS = VX_KERNEL_BASE( VX_ID_DEFAULT, USER_LIBRARY_EXAMPLE ) + 0x001, }; //////// // The node creation interface for the "app.userkernels.tensor_cos" kernel. // This user kernel example expects parameters in the following order: // parameter #0 -- input tensor of format VX_TYPE_INT16 // parameter #1 -- output tensor of format VX_TYPE_INT16 // // TODO STEP 01:******** // 1. Use vxGetKernelByEnum API to get a kernel object from USER_KERNEL_TENSOR_COS. // Note that you need to use vxGetContext API to get the context from a graph object. // 2. Use vxCreateGenericNode API to create a node from the kernel object. // 3. Use vxSetParameterByIndex API to set node arguments. // 4. Release the kernel object that are not needed any more. // 5. Use ERROR_CHECK_OBJECT and ERROR_CHECK_STATUS macros for error detection.