TIOVX User Guide
hwa_vpac_ldc.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (c) 2019-2021 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 #ifndef HWA_VPAC_LDC_H_
64 #define HWA_VPAC_LDC_H_
65 
66 #include <VX/vx.h>
67 #include <VX/vx_kernels.h>
68 
69 #ifdef __cplusplus
70 extern "C" {
71 #endif
72 
81 #define TIVX_KERNEL_VPAC_LDC_NAME "com.ti.hwa.vpac_ldc"
82 
86 #define TIVX_KERNEL_VPAC_LDC2_NAME "com.ti.hwa.vpac_ldc2"
87 
88 
89 /*********************************
90  * VPAC_LDC Control Commands
91  *********************************/
92 
99 #define TIVX_VPAC_LDC_CMD_SET_READ_BW_LIMIT_PARAMS (0x10000000u)
100 
111 #define TIVX_VPAC_LDC_CMD_SET_BIT_DEPTH_CONV_LUT_PARAMS (0x10000001u)
112 
127 #define TIVX_VPAC_LDC_CMD_GET_ERR_STATUS (0x10000002u)
128 
140 #define TIVX_VPAC_LDC_CMD_SET_LDC_PARAMS (0x10000003u)
141 
145 #define TIVX_VPAC_LDC_CMD_GET_PSA_STATUS (0x10000004u)
146 
162 #define TIVX_VPAC_LDC_CMD_SET_LDC_DCC_PARAMS (0x30000000u)
163 
164 /*********************************
165  * VPAC_LDC Defines
166  *********************************/
167 
175 #define TIVX_VPAC_LDC_ALIGN_LSB (0U)
176 
177 #define TIVX_VPAC_LDC_ALIGN_MSB (1U)
178 
180 #define TIVX_VPAC_LDC_INTERPOLATION_BICUBIC (0U)
181 
182 #define TIVX_VPAC_LDC_INTERPOLATION_BILINEAR (1U)
183 
185 #define TIVX_VPAC_LDC_MODE_LUMA_ONLY (0U)
186 
187 #define TIVX_VPAC_LDC_MODE_CHROMA_ONLY (1U)
188 
196 #define TIVX_VPAC_LDC_CALC_MESH_LINE_OFFSET(width, subsample_factor) \
197  ((((((width)/(subsample_factor))+1) + 15U) & ~15U) * (4U))
198 
200 #define TIVX_VPAC_LDC_BIT_DEPTH_CONV_LUT_SIZE (513u)
201 
204 #define TIVX_VPAC_LDC_PIX_BLK_OUTOFBOUND_ERR_STATUS (0x1u)
205 
207 #define TIVX_VPAC_LDC_MESH_BLK_OUTOFBOUND_ERR_STATUS (0x2u)
208 
209 #define TIVX_VPAC_LDC_PIX_MEM_OVF_ERR_STATUS (0x4u)
210 
211 #define TIVX_VPAC_LDC_MESH_MEM_OVF_ERR_STATUS (0x8u)
212 
213 #define TIVX_VPAC_LDC_PIX_FRM_OUTOFBOUND_ERR_STATUS (0x10u)
214 
215 #define TIVX_VPAC_LDC_SZ_OVF_ERR_STATUS (0x20u)
216 
217 #define TIVX_VPAC_LDC_SL2_WR_ERR_STATUS (0x80u)
218 
219 #define TIVX_VPAC_LDC_RD_ERR_STATUS (0x100u)
220 
221 #define TIVX_VPAC_LDC_WDTIMER_ERR (0x40000000U)
222 
223 #define TIVX_VPAC_LDC_SET_PARAMS_WARP_MATRIX_IDX (0u)
224 
225 #define TIVX_VPAC_LDC_DEF_BLOCK_WIDTH (64u)
226 #define TIVX_VPAC_LDC_DEF_BLOCK_HEIGHT (64u)
227 #define TIVX_VPAC_LDC_DEF_PIXEL_PAD (0u)
228 
229 /* Maximum number of outputs supported in LDC */
230 #define TIVX_VPAC_LDC_MAX_OUTPUT (2u)
231 
232 /*********************************
233  * VPAC_LDC STRUCTURES
234  *********************************/
235 
242 typedef struct {
244  uint32_t enable;
246  uint32_t out_block_width;
250  uint32_t pixel_pad;
252 
259 typedef struct {
261  uint32_t reg_width[3];
263  uint32_t reg_height[3];
267 
274 typedef struct {
275 
280 
285 
292 typedef struct {
298 
301  uint32_t init_x;
304  uint32_t init_y;
305 
317  uint32_t yc_mode;
318 
320  uint32_t dcc_camera_id;
321  #if defined(VPAC3) || defined(VPAC3L)
322 
327  uint32_t in_img0_yc_mode;
331  uint32_t in_img1_yc_mode;
332  #endif
333 
365  uint32_t enable_psa;
367 
368 
377 typedef struct {
393  uint32_t tag_count;
405 
415 typedef struct {
419  uint32_t input_bits;
423  uint32_t output_bits;
428 
434 typedef struct {
440  uint32_t psa_values[TIVX_VPAC_LDC_MAX_OUTPUT];
441 
447  uint64_t timestamp;
449 
450 /*********************************
451  * Function Prototypes
452  *********************************/
453 
459 
460 
466 
467 
561 VX_API_ENTRY vx_node VX_API_CALL tivxVpacLdcNode(vx_graph graph,
562  vx_user_data_object configuration,
563  vx_matrix warp_matrix,
564  vx_user_data_object region_prms,
565  vx_user_data_object mesh_prms,
566  vx_image mesh_img,
567  vx_user_data_object dcc_db,
568  vx_image in_img,
569  vx_image out0_img,
570  vx_image out1_img);
685 VX_API_ENTRY vx_node VX_API_CALL tivxVpacLdcNode2(vx_graph graph,
686  vx_user_data_object configuration,
687  vx_matrix warp_matrix,
688  vx_user_data_object region_prms,
689  vx_user_data_object mesh_prms,
690  vx_image mesh_img,
691  vx_user_data_object dcc_db,
692  vx_image in0_img,
693  vx_image out0_img,
694  vx_image out1_img,
695  vx_image in1_img,
696  vx_image out2_img,
697  vx_image out3_img);
706 
715 
724 
734 
743 
744 #ifdef __cplusplus
745 }
746 #endif
747 
748 #endif /* HWA_VPAC_LDC_H_ */
749 
750 
struct _vx_image * vx_image
The region_params data structure used by the TIVX_KERNEL_VPAC_LDC kernel.
Definition: hwa_vpac_ldc.h:242
The remap params structure used by the TIVX_KERNEL_VPAC_LDC kernel. Passed as argument to TIVX_VPAC_L...
Definition: hwa_vpac_ldc.h:415
#define TIVX_VPAC_LDC_BIT_DEPTH_CONV_LUT_SIZE
Definition: hwa_vpac_ldc.h:200
void tivx_vpac_ldc_region_params_init(tivx_vpac_ldc_region_params_t *prms)
Function to initialize LDC Region parameters.
uint32_t luma_interpolation_type
Definition: hwa_vpac_ldc.h:297
void tivxUnRegisterHwaTargetVpacLdcKernels(void)
Function to un-register HWA Kernels on the vpac_ldc Target.
VX_API_ENTRY vx_node VX_API_CALL tivxVpacLdcNode2(vx_graph graph, vx_user_data_object configuration, vx_matrix warp_matrix, vx_user_data_object region_prms, vx_user_data_object mesh_prms, vx_image mesh_img, vx_user_data_object dcc_db, vx_image in0_img, vx_image out0_img, vx_image out1_img, vx_image in1_img, vx_image out2_img, vx_image out3_img)
[Graph] Creates a VPAC_LDC Node. This node takes at most 2 single plane inputs and generate at most 4...
void tivx_vpac_ldc_mesh_params_init(tivx_vpac_ldc_mesh_params_t *prms)
Function to initialize LDC Mesh parameters.
The configuration data structure used by the TIVX_KERNEL_VPAC_LDC kernel.
Definition: hwa_vpac_ldc.h:292
void tivx_vpac_ldc_bandwidth_params_init(tivx_vpac_ldc_bandwidth_params_t *prms)
Function to initialize Bandwidth limiter parameters.
The alternative region_params data structure used by the TIVX_KERNEL_VPAC_LDC kernel.
Definition: hwa_vpac_ldc.h:259
Structure to hold PSA timestamp data.
Definition: hwa_vpac_ldc.h:434
struct _vx_user_data_object * vx_user_data_object
The User Data Object. User Data Object is a strongly-typed container for other data structures...
uint64_t timestamp
Timestamp value.
Definition: hwa_vpac_ldc.h:447
struct _vx_graph * vx_graph
struct _vx_node * vx_node
void tivx_vpac_ldc_multi_region_params_init(tivx_vpac_ldc_multi_region_params_t *prms)
Function to initialize LDC Multi Region parameters.
VX_API_ENTRY vx_node VX_API_CALL tivxVpacLdcNode(vx_graph graph, vx_user_data_object configuration, vx_matrix warp_matrix, vx_user_data_object region_prms, vx_user_data_object mesh_prms, vx_image mesh_img, vx_user_data_object dcc_db, vx_image in_img, vx_image out0_img, vx_image out1_img)
[Graph] Creates a VPAC_LDC Node.
The bandwidth params structure used by the TIVX_KERNEL_VPAC_LDC kernel. Passed as argument to TIVX_VP...
Definition: hwa_vpac_ldc.h:377
struct _vx_matrix * vx_matrix
void tivxRegisterHwaTargetVpacLdcKernels(void)
Function to register HWA Kernels on the vpac_ldc Target.
vx_status(* VX_API_CALL)(vx_reference *ref)
Callback type used to register release callbacks from object derived from references.
Definition: vx_reference.h:56
The mesh data structure in the configuration data structure used by the TIVX_KERNEL_VPAC_LDC kernel...
Definition: hwa_vpac_ldc.h:274
void tivx_vpac_ldc_params_init(tivx_vpac_ldc_params_t *prms)
Function to initialize LDC parameters with the default values.