TIOVX User Guide
tivx_kernels_host_utils.h
Go to the documentation of this file.
1 /*
2 *
3 * Copyright (c) 2017 Texas Instruments Incorporated
4 *
5 * All rights reserved not granted herein.
6 *
7 * Limited License.
8 *
9 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
10 * license under copyrights and patents it now or hereafter owns or controls to make,
11 * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
12 * terms herein. With respect to the foregoing patent license, such license is granted
13 * solely to the extent that any such patent is necessary to Utilize the software alone.
14 * The patent license shall not apply to any combinations which include this software,
15 * other than combinations with devices manufactured by or for TI ("TI Devices").
16 * No hardware patent is licensed hereunder.
17 *
18 * Redistributions must preserve existing copyright notices and reproduce this license
19 * (including the above copyright notice and the disclaimer and (if applicable) source
20 * code license limitations below) in the documentation and/or other materials provided
21 * with the distribution
22 *
23 * Redistribution and use in binary form, without modification, are permitted provided
24 * that the following conditions are met:
25 *
26 * * No reverse engineering, decompilation, or disassembly of this software is
27 * permitted with respect to any software provided in binary form.
28 *
29 * * any redistribution and use are licensed by TI for use only with TI Devices.
30 *
31 * * Nothing shall obligate TI to provide you with source code for the software
32 * licensed and provided to you in object code.
33 *
34 * If software source code is provided to you, modification and redistribution of the
35 * source code are permitted provided that the following conditions are met:
36 *
37 * * any redistribution and use of the source code, including any resulting derivative
38 * works, are licensed by TI for use only with TI Devices.
39 *
40 * * any redistribution and use of any object code compiled from the source code
41 * and any resulting derivative works, are licensed by TI for use only with TI Devices.
42 *
43 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
44 *
45 * may be used to endorse or promote products derived from this software without
46 * specific prior written permission.
47 *
48 * DISCLAIMER.
49 *
50 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
51 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
52 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53 * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
54 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
55 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
56 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
57 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
58 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
59 * OF THE POSSIBILITY OF SUCH DAMAGE.
60 *
61 */
62 
63 
64 #ifndef TIVX_KERNELS_HOST_UTILS_
65 #define TIVX_KERNELS_HOST_UTILS_
66 
67 #include <TI/tivx_debug.h>
68 #include <tivx_kernels_common_utils.h>
69 
70 #ifdef __cplusplus
71 extern "C" {
72 #endif
73 
79 typedef vx_status (*tivxHostKernel_Fxn) (vx_context context);
80 
81 typedef struct {
82  tivxHostKernel_Fxn add_kernel;
83  tivxHostKernel_Fxn remove_kernel;
84 } Tivx_Host_Kernel_List;
85 
90 vx_status tivxPublishKernels(vx_context context, const Tivx_Host_Kernel_List *kernel_list, uint32_t num_kernels);
91 
96 vx_status tivxUnPublishKernels(vx_context context, const Tivx_Host_Kernel_List *kernel_list, uint32_t num_kernels);
97 
98 
105 #define TIVX_KERNEL_COMMON_VALID_RECT_MAX_IMAGE (5u)
106 
107 typedef struct
108 {
112  vx_uint32 num_input_images;
113 
117  vx_uint32 num_output_images;
118 
120  vx_uint32 top_pad, bot_pad, right_pad, left_pad;
121 
123  vx_enum border_mode;
124 } tivxKernelValidRectParams;
125 
129 vx_status tivxKernelValidateParametersNotNull(const vx_reference *parameters, vx_uint8 maxParams);
130 
134 vx_status tivxKernelValidateInputSize(vx_uint32 inputWidth0, vx_uint32 inputWidth1,
135  vx_uint32 inputHeight0, vx_uint32 inputHeight1);
136 
140 vx_status tivxKernelValidatePossibleFormat(vx_df_image inputFormat, vx_df_image possibleFormat);
141 
145 vx_status tivxKernelValidateScalarType(vx_enum scalarType, vx_enum expectedScalarType);
146 
150 vx_status tivxKernelValidateOutputSize(vx_uint32 expectedWidth, vx_uint32 outputWidth, vx_uint32 expectedHeight,
151  vx_uint32 outputHeight, vx_image outputImage);
152 
156 void tivxKernelSetMetas(vx_meta_format *metas, vx_uint8 maxParams, vx_df_image fmt, vx_uint32 width, vx_uint32 height);
157 
166 static inline void tivxKernelValidRectParams_init(
167  tivxKernelValidRectParams *prms);
168 
186 vx_status tivxKernelConfigValidRect(tivxKernelValidRectParams *prms);
187 
188 
202 
216 
222  tivxKernelValidRectParams *prms)
223 {
224  if (NULL != prms)
225  {
226  memset(prms, 0, sizeof(tivxKernelValidRectParams));
227  prms->border_mode = (vx_enum)VX_BORDER_UNDEFINED;
228  }
229 }
230 
231 #ifdef __cplusplus
232 }
233 #endif
234 
235 #endif
struct _vx_image * vx_image
uint8_t vx_uint8
#define TIVX_KERNEL_COMMON_VALID_RECT_MAX_IMAGE
Maximum number of images (input/output) supported in calculating valid rectangles.
int32_t vx_enum
vx_status tivxUnPublishKernels(vx_context context, const Tivx_Host_Kernel_List *kernel_list, uint32_t num_kernels)
Unpublishes the kernels list on the host side.
vx_enum vx_status
struct _vx_context * vx_context
struct _vx_meta_format * vx_meta_format
static void tivxKernelValidRectParams_init(tivxKernelValidRectParams *prms)
Function to initialize Valid Rect Parameter structure Currently the entire structure is memset to 0...
struct _vx_reference * vx_reference
The Internal Debugging API.
uint32_t vx_df_image
VX_BORDER_UNDEFINED
struct _vx_kernel * vx_kernel
void tivxKernelsHostUtilsAddKernelTargetMcu(vx_kernel kernel)
Function to add platform-specific R5F kernel target.
uint32_t vx_uint32
void tivxKernelsHostUtilsAddKernelTargetDsp(vx_kernel kernel)
Function to add platform-specific DSP kernel target.
vx_status tivxKernelConfigValidRect(tivxKernelValidRectParams *prms)
Function to calculate and configure valid region This API loops over all the input and output image&#39;s...
vx_status tivxPublishKernels(vx_context context, const Tivx_Host_Kernel_List *kernel_list, uint32_t num_kernels)
Publishes the kernels list on the host side.