TIOVX User Guide
phase_rgb_target_kernel.c
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 
90 #include <TI/tivx.h>
91 #include <VX/vx.h>
92 #include <TI/tivx_target_kernel.h>
93 #include <vx_tutorial_kernels.h>
94 #include <tivx_kernels_common_utils.h>
95 #include <tivx_kernels_target_utils.h>
96 
98 #define PHASE_RGB_IN0_IMG_IDX (0u)
99 
101 #define PHASE_RGB_OUT0_IMG_IDX (1u)
102 
104 #define PHASE_RGB_MAX_PARAMS (2u)
105 
110 
120  tivx_target_kernel_instance kernel, tivx_obj_desc_t *obj_desc[],
121  uint16_t num_params, void *priv_arg)
122 {
123  vx_status status = (vx_status)VX_SUCCESS;
124  tivx_obj_desc_image_t *src_desc, *dst_desc;
125 
126  if ((num_params != PHASE_RGB_MAX_PARAMS)
127  || (NULL == obj_desc[PHASE_RGB_IN0_IMG_IDX])
128  || (NULL == obj_desc[PHASE_RGB_OUT0_IMG_IDX])
129  )
130  {
131  status = (vx_status)VX_FAILURE;
132  }
133  else
134  {
135  void *src_desc_target_ptr;
136  void *dst_desc_target_ptr;
137 
138  /* Get the Src and Dst descriptors */
139  src_desc = (tivx_obj_desc_image_t *)obj_desc[PHASE_RGB_IN0_IMG_IDX];
140  dst_desc = (tivx_obj_desc_image_t *)obj_desc[PHASE_RGB_OUT0_IMG_IDX];
141 
142  /* Get the target pointer from the shared pointer for all
143  buffers */
144  src_desc_target_ptr = tivxMemShared2TargetPtr(&src_desc->mem_ptr[0]);
145  dst_desc_target_ptr = tivxMemShared2TargetPtr(&dst_desc->mem_ptr[0]);
146 
147  /* Map all buffers, which invalidates the cache */
148  tivxCheckStatus(&status, tivxMemBufferMap(src_desc_target_ptr,
149  src_desc->mem_size[0], (vx_enum)VX_MEMORY_TYPE_HOST,
151  tivxCheckStatus(&status, tivxMemBufferMap(dst_desc_target_ptr,
152  dst_desc->mem_size[0], (vx_enum)VX_MEMORY_TYPE_HOST,
154 
155  /* Run function for complete image, ROI is ignored in this example */
156  {
157  vx_uint32 x, y, width, height;
158  vx_uint8 *in_data_ptr, *out_data_ptr;
159  vx_uint8 *in_pixel, *out_pixel;
160 
161  in_data_ptr = src_desc_target_ptr;
162  out_data_ptr = dst_desc_target_ptr;
163 
164  width = dst_desc->imagepatch_addr[0U].dim_x;
165  height = dst_desc->imagepatch_addr[0U].dim_y;
166 
167  for(y=0; y<height; y++)
168  {
169  in_pixel = in_data_ptr;
170  out_pixel = out_data_ptr;
171 
172  for(x=0; x<width; x++)
173  {
174  if(in_pixel[0]<64)
175  {
176  out_pixel[0] = 0xFF;
177  out_pixel[1] = 0x00;
178  out_pixel[2] = 0x00;
179  }
180  else
181  if(in_pixel[0]<128)
182  {
183  out_pixel[0] = 0x00;
184  out_pixel[1] = 0xFF;
185  out_pixel[2] = 0x00;
186  }
187  else
188  if(in_pixel[0]<192)
189  {
190  out_pixel[0] = 0x00;
191  out_pixel[1] = 0x00;
192  out_pixel[2] = 0xFF;
193  }
194  else
195  {
196  out_pixel[0] = 0xFF;
197  out_pixel[1] = 0xFF;
198  out_pixel[2] = 0xFF;
199  }
200  in_pixel++;
201  out_pixel += 3;
202  }
203  in_data_ptr += src_desc->imagepatch_addr[0U].stride_y;
204  out_data_ptr += dst_desc->imagepatch_addr[0U].stride_y;
205  }
206  }
207 
208  tivxCheckStatus(&status, tivxMemBufferUnmap(src_desc_target_ptr,
209  src_desc->mem_size[0], (vx_enum)VX_MEMORY_TYPE_HOST,
211  tivxCheckStatus(&status, tivxMemBufferUnmap(dst_desc_target_ptr,
212  dst_desc->mem_size[0], (vx_enum)VX_MEMORY_TYPE_HOST,
214 
215  }
216 
217  return (status);
218 }
219 
228 vx_status VX_CALLBACK vxTutotrialPhaseRgbCreate(tivx_target_kernel_instance kernel, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
229 {
230  vx_status status = (vx_status)VX_SUCCESS;
231 
232  return status;
233 }
234 
243 vx_status VX_CALLBACK vxTutotrialPhaseRgbDelete(tivx_target_kernel_instance kernel, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
244 {
245  vx_status status = (vx_status)VX_SUCCESS;
246 
247  return status;
248 }
249 
260  uint32_t replicated_node_idx, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
261 {
262  vx_status status = (vx_status)VX_SUCCESS;
263 
264  return status;
265 }
266 
272 {
273  char target_name[TIVX_TARGET_MAX_NAME];
274 
276  {
277 
294  target_name,
299  NULL);
301  }
302 }
303 
309 {
310  vx_status status = (vx_status)VX_SUCCESS;
311 
323  if ((vx_status)VX_SUCCESS == status)
324  {
326  }
327 }
328 
Image object descriptor as placed in shared memory.
Object descriptor.
#define TIVX_TUTORIAL_KERNEL_PHASE_RGB_NAME
Converts Phase output to RGB image.
uint8_t vx_uint8
#define PHASE_RGB_OUT0_IMG_IDX
Index of output image in parameter list.
VX_MEMORY_TYPE_HOST
Interface to TI extension APIs.
vx_status VX_CALLBACK vxTutotrialPhaseRgbDelete(tivx_target_kernel_instance kernel, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
Target kernel delete function.
int32_t vx_enum
#define PHASE_RGB_IN0_IMG_IDX
Index of input image in parameter list.
vx_imagepatch_addressing_t imagepatch_addr[TIVX_IMAGE_MAX_PLANES]
image plane addressing parameters
struct _tivx_target_kernel * tivx_target_kernel
Handle to kernel on a target.
VX_SUCCESS
vx_status tivxKernelsTargetUtilsAssignTargetNameDsp(char *target_name)
Function to assign platform-specific DSP target name.
tivx_shared_mem_ptr_t mem_ptr[TIVX_IMAGE_MAX_PLANES]
image plane buffer addresses
vx_enum vx_status
struct _tivx_target_kernel_instance * tivx_target_kernel_instance
Handle to instance of kernel on a target.
volatile uint32_t mem_size[TIVX_IMAGE_MAX_PLANES]
image plane buffer size
vx_status VX_CALLBACK vxTutotrialPhaseRgb(tivx_target_kernel_instance kernel, tivx_obj_desc_t *obj_desc[], uint16_t num_params, void *priv_arg)
Target kernel run function.
VX_WRITE_ONLY
VX_API_ENTRY tivx_target_kernel VX_API_CALL tivxAddTargetKernelByName(const char *kernel_name, const char *target_name, tivx_target_kernel_f process_func, tivx_target_kernel_f create_func, tivx_target_kernel_f delete_func, tivx_target_kernel_control_f control_func, void *priv_arg)
Allows users to add native kernels implementation to specific targets.
VX_READ_ONLY
#define TIVX_TARGET_MAX_NAME
Max possible name of a target.
Definition: tivx.h:93
void vxTutorialRemoveTargetKernelPhaseRgb(void)
Remove target kernel from TIOVX framework.
VX_FAILURE
#define VX_CALLBACK
static tivx_target_kernel phase_rgb_target_kernel
Target kernel handle [static global].
Interface to kernel APIs on target.
vx_status VX_CALLBACK vxTutotrialPhaseRgbCreate(tivx_target_kernel_instance kernel, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
Target kernel create function.
uint32_t vx_uint32
vx_status tivxMemBufferMap(void *host_ptr, uint32_t size, vx_enum mem_type, vx_enum maptype)
Map an allocated buffer address.
vx_status VX_CALLBACK vxTutotrialPhaseRgbControl(tivx_target_kernel_instance kernel, uint32_t replicated_node_idx, tivx_obj_desc_t *param_obj_desc[], uint16_t num_params, void *priv_arg)
Target kernel control function.
void * tivxMemShared2TargetPtr(const tivx_shared_mem_ptr_t *shared_ptr)
Convert shared pointer to target pointer.
VX_API_ENTRY vx_status VX_API_CALL tivxRemoveTargetKernel(tivx_target_kernel target_kernel)
Allows users to remove native kernels implementation to specific targets.
#define PHASE_RGB_MAX_PARAMS
Total number of parameters for this function.
vx_status tivxMemBufferUnmap(void *host_ptr, uint32_t size, vx_enum mem_type, vx_enum maptype)
UnMap a buffer address.
void vxTutorialAddTargetKernelPhaseRgb(void)
Add target kernel to TIOVX framework.
static void tivxCheckStatus(vx_status *status, vx_status status_temp)
Function to set the status variable equal to status_temp if the status_temp variable is not VX_SUCCES...