This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TDA4VM: LDC dcc.config

Part Number: TDA4VM


Tool/software:

Hi Team,

I'm working on SDK v 08_02_00_05(Linux+RTOS).

I have a working single camera application, which accepts fisheye camera input and displays rectilinear output on monitor using LDC node.

This has been achieved by passing generated LUT as mesh image to LDC parameter.

I have generated xmls files using DCC tuning tool and executed the below code to generate C header file.

DCC_TOOL_PATH=../../../../../tools/dcc_tools/
OUT_PATH=../../../../include
DCC_BIN_DIR=../../dcc_bins
DCC_BIN_LINEAR_DIR=../../dcc_bins/linear

# Ensure required directories exist
mkdir -p "$DCC_BIN_DIR"
mkdir -p "$DCC_BIN_LINEAR_DIR"

# Remove old files
rm -f *.bin
rm -f $OUT_PATH/dcc_ldc_isx016.h

# Run DCC tool
$DCC_TOOL_PATH/dcc_gen_linux ISX016_mesh_ldc_dcc.xml

# Find the actual .bin file
BIN_FILE=$(ls cid42_*.bin 2>/dev/null | head -n 1)

if [ -z "$BIN_FILE" ]; then
    echo "Error: DCC binary not generated!"
    exit 1
fi

# Move and rename the binary file
cp "$BIN_FILE" "$DCC_BIN_DIR/isx016_dcc_ldc.bin"
cp "$BIN_FILE" "$DCC_BIN_LINEAR_DIR/"

# Convert to C header file
$DCC_TOOL_PATH/dcc_bin2c "$DCC_BIN_DIR/isx016_dcc_ldc.bin" "$OUT_PATH/dcc_ldc_isx016.h" dcc_ldc_isx016

# Cleanup
rm -f *.bin

Could you please let me know how to achieve the same using those without mesh image.

Also, Please confirm whether ldc)bj->dcc.config can be used on vehicle(integrated with cameras) standing in idle position only or even when vehicle is in moving state too? 

Regards,

Chaitanya Prakash Uppala

  • Hi Prakash,

       Refer this file to configure custom dcc params ($PSDKRA)/imaging/utils/iss/src/app_iss_common.c also refer this function configure_dcc_params() in app_ldc_module.c
      after generating the header file include that in app_iss_common.c
      enable this flag sensorObj->sensor_dcc_enabled=1 in application, then this function configure_dcc_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj) will load params in dcc_config.
     
     Yes you can, refer this fucntion appDccUpdatefromFS() inside app_iss_common.c to update dcc params during runtime.

    Regards,
    Gokul

  • Hi Gokul,

    after generating the header file include that in app_iss_common.c
      enable this flag sensorObj->sensor_dcc_enabled=1 in application, then this function configure_dcc_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj) will load params in dcc_config.

    I have taken care of these. When I ran application I'm facing seg fault. Please find the attached log.

    root@j7-evm:/opt/vision_apps# ./single_cam.out --cfg rci_od_cam.cfg 
    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=4) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
        47.145762 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
        47.152318 s:  VX_ZONE_INIT:Enabled
        47.152341 s:  VX_ZONE_ERROR:Enabled
        47.152352 s:  VX_ZONE_WARNING:Enabled
        47.158082 s:  VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
        47.158241 s:  VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!!
    Default param set! 
    Parsed user params! 
        47.162344 s: ISS: Enumerating sensors ... !!!
    [MCU2_0]     47.162596 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_ENUMERATE 
    [MCU2_0]     47.162872 s: write 0xfe to TCA6408 register 0x3 
    [MCU2_0]     47.262471 s: UB960 config start 
    [MCU2_0]     49.758735 s: End of UB960 config 
    [MCU2_0]     49.758802 s: UB960 config start 
        49.958964 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3
        49.958976 s: ISS: Enumerating sensors ... found 1 : AR0233-UB953_MARS
        49.958996 s: ISS: Enumerating sensors ... found 2 : AR0820-UB953_LI
        49.959002 s: ISS: Enumerating sensors ... found 3 : UB9xxx_RAW12_TESTPATTERN
        49.959007 s: ISS: Enumerating sensors ... found 4 : UB96x_UYVY_TESTPATTERN
        49.959012 s: ISS: Enumerating sensors ... found 5 : GW_AR0233_UYVY
        49.959016 s: ISS: Enumerating sensors ... found 6 : ISX016_UB913A_Q1
    7 sensor(s) found 
    Supported sensor list: 
    a : IMX390-UB953_D3 
    b : AR0233-UB953_MARS 
    c : AR0820-UB953_LI 
    d : UB9xxx_RAW12_TESTPATTERN 
    e : UB96x_UYVY_TESTPATTERN 
    f : GW_AR0233_UYVY 
    g : ISX016_UB913A_Q1 
    Select a sensor above or press '0' to autodetect the sensor 
    [MCU2_0]     49.958731 s: End of UB960 config 
    g
    Sensor selected : ISX016_UB913A_Q1
    Querying ISX016_UB913A_Q1 
        50.738770 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... !!!
        50.739235 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... Done !!!
    LDC Selection Yes(1)/No(0)
    Invalid selection 
    . Try again 
    LDC Selection Yes(1)/No(0)
    [MCU2_0]     50.738977 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_QUERY 
    [MCU2_0]     50.739047 s: Received Query for ISX016_UB913A_Q1 
    1
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    Invalid selection 
    . Try again 
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    1
    Sensor params queried! 
    Updated user params! 
    Creating context done!
    Kernel loading done!
        52.178699 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_PWRON ... !!!
        52.179223 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_CONFIG ... !!!
    [MCU2_0]     52.178906 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_PWRON 
    [MCU2_0]     52.178981 s: IM_SENSOR_CMD_PWRON : channel_mask = 0x1 
    [MCU2_0]     52.179053 s: ISX016_PowerOn : chId = 0x0 
    [MCU2_0]     52.179419 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_CONFIG 
    [MCU2_0]     52.179514 s: Application requested features = 0x158 
    [MCU2_0]  
    [MCU2_0]     52.179567 s: UB960 config start 
    [MCU2_0]     52.435565 s: End of UB960 config 
    [MCU2_0]     52.435631 s: UB960 config start 
    [MCU2_0]     52.691565 s: End of UB960 config 
    [MCU2_0]     52.691770 s: UB960 config start 
    [MCU2_0]     52.695564 s: End of UB960 config 
    [MCU2_0]     52.695613 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     52.903601 s:  End of UB953 config 
    [MCU2_0]     52.904497 s: Configuring camera # 0 
    [MCU2_0]     52.904690 s: UB960 config start 
    [MCU2_0]     52.908563 s: End of UB960 config 
    [MCU2_0]     52.908616 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     53.116610 s:  End of UB953 config 
    [MCU2_0]     53.116699 s:  Configuring ISX016 imager 0x50.. Please wait till it finishes 
        53.216704 s: ISS: Initializing sensor [ISX016_UB913A_Q1] ... Done !!!
    Sensor init done!
    Capture init done!
    app_init_color_conv() : ENTERING 
    app_init_color_conv() : EXITING 
    Color Conv init done!
    [LDC-MODULE] configure_dcc_params() : ENTERING
    sensorObj->sensor_dcc_enabled:1
    sensorObj->sensor_wdr_enabled:0
    [LDC-MODULE] configure_dcc_params() : dcc_buff_size = 22512 
    [LDC-MODULE] Error getting DCC buffer 
    [LDC-MODULE] configure_dcc_params() : Created DCC config object! 
    [LDC-MODULE] configure_dcc_params() : EXITING
    LDC init done!
    Display init done!
    [MCU2_0]     50.124751 s: IM_SENSOR_CMD_CONFIG returning status = 0 
    App Init Done! 
     app_create_graph() : ENTERING 
    Graph create done!
    Capture graph done!
    app_create_graph_color_conv() : ENTERING 
    Color convert node create started
    Color convert node create done 
    app_create_graph_color_conv() : EXITING 
    Color Conversion graph done!
    [LDC-MODULE] app_create_graph_ldc() : ENTERING 
    [LDC-MODULE] app_create_graph_ldc() : DCC config object is NOT NULL 
    after input_img
    Segmentation fault (core dumped)
    root@j7-evm:/opt/vision_apps#

    Also attching ldc_module.c file for reference. I didn't understand why retrieving output_img causing seg fault.

    /*
     *
     * Copyright (c) 2020 Texas Instruments Incorporated
     *
     * All rights reserved not granted herein.
     *
     * Limited License.
     *
     * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
     * license under copyrights and patents it now or hereafter owns or controls to make,
     * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
     * terms herein.  With respect to the foregoing patent license, such license is granted
     * solely to the extent that any such patent is necessary to Utilize the software alone.
     * The patent license shall not apply to any combinations which include this software,
     * other than combinations with devices manufactured by or for TI ("TI Devices").
     * No hardware patent is licensed hereunder.
     *
     * Redistributions must preserve existing copyright notices and reproduce this license
     * (including the above copyright notice and the disclaimer and (if applicable) source
     * code license limitations below) in the documentation and/or other materials provided
     * with the distribution
     *
     * Redistribution and use in binary form, without modification, are permitted provided
     * that the following conditions are met:
     *
     * *       No reverse engineering, decompilation, or disassembly of this software is
     * permitted with respect to any software provided in binary form.
     *
     * *       any redistribution and use are licensed by TI for use only with TI Devices.
     *
     * *       Nothing shall obligate TI to provide you with source code for the software
     * licensed and provided to you in object code.
     *
     * If software source code is provided to you, modification and redistribution of the
     * source code are permitted provided that the following conditions are met:
     *
     * *       any redistribution and use of the source code, including any resulting derivative
     * works, are licensed by TI for use only with TI Devices.
     *
     * *       any redistribution and use of any object code compiled from the source code
     * and any resulting derivative works, are licensed by TI for use only with TI Devices.
     *
     * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
     *
     * may be used to endorse or promote products derived from this software without
     * specific prior written permission.
     *
     * DISCLAIMER.
     *
     * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     * OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     */
    
    #include "rci_ldc_module.h"
    #include "ldc_lut_1920x1080.h"
    
    static uint8_t  g_ldc_lut[] = LDC_LUT_1920_1080;
    
    static vx_status configure_dcc_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj)
    {
        printf("[LDC-MODULE] configure_dcc_params() : ENTERING\n");
        sensorObj->sensor_dcc_enabled = 1;
        sensorObj->sensor_wdr_enabled = 0;
        printf("sensorObj->sensor_dcc_enabled:%d\n",sensorObj->sensor_dcc_enabled);
        vx_status status = VX_SUCCESS;
    
        if(sensorObj->sensor_dcc_enabled)
        {
            int32_t dcc_buff_size;
            uint8_t * dcc_buf;
            vx_map_id dcc_buf_map_id;
            printf("sensorObj->sensor_wdr_enabled:%d\n",sensorObj->sensor_wdr_enabled);
            dcc_buff_size = appIssGetDCCSizeLDC(sensorObj->sensor_name, sensorObj->sensor_wdr_enabled);
    
            printf("[LDC-MODULE] configure_dcc_params() : dcc_buff_size = %d \n", dcc_buff_size);
    
            if (dcc_buff_size > 0)
            {
                ldcObj->dcc_config = vxCreateUserDataObject(context, "dcc_ldc", dcc_buff_size, NULL );
                status = vxGetStatus((vx_reference)ldcObj->dcc_config);
    
                if(status == VX_SUCCESS)
                {
                    vxSetReferenceName((vx_reference)ldcObj->dcc_config, "ldc_node_dcc_config");
    
                    vxMapUserDataObject(
                            ldcObj->dcc_config, 0,
                            dcc_buff_size,
                            &dcc_buf_map_id,
                            (void **)&dcc_buf,
                            VX_WRITE_ONLY,
                            VX_MEMORY_TYPE_HOST, 0);
    
                    status = appIssGetDCCBuffLDC(sensorObj->sensor_name, sensorObj->sensor_wdr_enabled,  dcc_buf, dcc_buff_size);
                    if(status != VX_SUCCESS)
                    {
                        printf("[LDC-MODULE] Error getting DCC buffer \n");
                    }
                    vxUnmapUserDataObject(ldcObj->dcc_config, dcc_buf_map_id);
                    printf("[LDC-MODULE] configure_dcc_params() : Created DCC config object! \n");
                }
                else
                {
                    printf("[LDC-MODULE] Unable to create DCC config object! \n");
                }
            }
        }
        else
        {
            ldcObj->dcc_config = NULL;
            printf("[LDC-MODULE] configure_dcc_params() : Setting DCC config object to NULL! \n");
        }
    
        printf("[LDC-MODULE] configure_dcc_params() : EXITING\n");
        return status;
    }
    static vx_status configure_mesh_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj)
    {
        vx_status status = VX_SUCCESS;
    
        vx_uint32 table_width_ds, table_height_ds;
        vx_imagepatch_addressing_t image_addr;
        vx_rectangle_t rect;
    
        table_width_ds = (((ldcObj->table_width / (1 << ldcObj->ds_factor)) + 1u) + 15u) & (~15u);
        table_height_ds = ((ldcObj->table_height / (1 << ldcObj->ds_factor)) + 1u);
    
        /* Mesh Image */
        ldcObj->mesh_img = vxCreateImage(context, table_width_ds, table_height_ds, VX_DF_IMAGE_U32);
        status = vxGetStatus((vx_reference)ldcObj->mesh_img);
    
        if(status == VX_SUCCESS)
        {
            vxSetReferenceName((vx_reference)ldcObj->mesh_img, "ldc_node_mesh_img");
    
            /* Copy Mesh table */
            rect.start_x = 0;
            rect.start_y = 0;
            rect.end_x = table_width_ds;
            rect.end_y = table_height_ds;
    
            image_addr.dim_x = table_width_ds;
            image_addr.dim_y = table_height_ds;
            image_addr.stride_x = 4u;
            image_addr.stride_y = table_width_ds * 4u;
    
            status = vxCopyImagePatch(ldcObj->mesh_img,
                                    &rect, 0,
                                    &image_addr,
                                    g_ldc_lut,
                                    VX_WRITE_ONLY,
                                    VX_MEMORY_TYPE_HOST);
            if (status == VX_SUCCESS)
            {
                /* Mesh Parameters */
                memset(&ldcObj->mesh_params, 0, sizeof(tivx_vpac_ldc_mesh_params_t));
    
                tivx_vpac_ldc_mesh_params_init(&ldcObj->mesh_params);
    
                ldcObj->mesh_params.mesh_frame_width  = ldcObj->table_width;
                ldcObj->mesh_params.mesh_frame_height = ldcObj->table_height;
                ldcObj->mesh_params.subsample_factor  = ldcObj->ds_factor;
    
                ldcObj->mesh_config = vxCreateUserDataObject(context, "tivx_vpac_ldc_mesh_params_t", sizeof(tivx_vpac_ldc_mesh_params_t), NULL);
                status = vxGetStatus((vx_reference)ldcObj->mesh_config);
    
                if(status == VX_SUCCESS)
                {
                    vxSetReferenceName((vx_reference)ldcObj->mesh_config, "ldc_node_mesh_config");
    
                    status = vxCopyUserDataObject(ldcObj->mesh_config, 0,
                                        sizeof(tivx_vpac_ldc_mesh_params_t),
                                        &ldcObj->mesh_params,
                                        VX_WRITE_ONLY,
                                        VX_MEMORY_TYPE_HOST);
                    if(status != VX_SUCCESS)
                    {
                        printf("[LDC-MODULE] Unable to copy mesh params into buffer! \n");
                    }
                }
                else
                {
                    printf("[LDC-MODULE] Unable to create mesh config object! \n");
                }
            }
            else
            {
                printf("[LDC-MODULE] Unable to copy mesh image! \n");
            }
        }
        else
        {
            printf("[LDC-MODULE] Unable to create mesh image! \n");
        }
        
        return status;
    }
    
    static vx_status configure_region_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj)
    {
        vx_status status = VX_SUCCESS;
    
        /* Block Size parameters */
        ldcObj->region_params.out_block_width  = LDC_BLOCK_WIDTH;
        ldcObj->region_params.out_block_height = LDC_BLOCK_HEIGHT;
        ldcObj->region_params.pixel_pad        = LDC_PIXEL_PAD;
    
        ldcObj->region_config = vxCreateUserDataObject(context, "tivx_vpac_ldc_region_params_t", sizeof(tivx_vpac_ldc_region_params_t),  NULL);
        status = vxGetStatus((vx_reference)ldcObj->region_config);
    
        if(status == VX_SUCCESS)
        {
            vxSetReferenceName((vx_reference)ldcObj->region_config, "ldc_node_region_config");
    
            status = vxCopyUserDataObject(ldcObj->region_config, 0,
                                sizeof(tivx_vpac_ldc_region_params_t),
                                &ldcObj->region_params,
                                VX_WRITE_ONLY,
                                VX_MEMORY_TYPE_HOST);
            if(status != VX_SUCCESS)
            {
                printf("[LDC-MODULE] Unable to copy ldc region params to buffer! \n");
            }
        }
        else
        {
            printf("[LDC-MODULE] Unable to create region config object! \n");
        }
        
        return status;
    }
    
    static vx_status configure_ldc_params(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj)
    {
        vx_status status = VX_SUCCESS;
    
        /* LDC Configuration */
        tivx_vpac_ldc_params_init(&ldcObj->params);
        ldcObj->params.luma_interpolation_type = 1;
        ldcObj->params.dcc_camera_id = sensorObj->sensorParams.dccId;
    
        ldcObj->config = vxCreateUserDataObject(context, "tivx_vpac_ldc_params_t", sizeof(tivx_vpac_ldc_params_t), NULL);
        status = vxGetStatus((vx_reference)ldcObj->config);
    
        if(status == VX_SUCCESS)
        {
            vxSetReferenceName((vx_reference)ldcObj->config, "ldc_node_config");
    
            status = vxCopyUserDataObject(ldcObj->config, 0,
                                sizeof(tivx_vpac_ldc_params_t),
                                &ldcObj->params,
                                VX_WRITE_ONLY,
                                VX_MEMORY_TYPE_HOST);
            if(status != VX_SUCCESS)
            {
                printf("[LDC-MODULE] Unable to copy ldc config params into buffer! \n");
            }
        }
        else
        {
            printf("[LDC-MODULE] Unable to create ldc params object! \n");
        }
    
        return status;
    }
    
    static vx_status create_ldc_outputs(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj)
    {
        vx_status status = VX_SUCCESS;
    
        /* LDC Output image in NV12 format */
        vx_image output_img = vxCreateImage(context, ldcObj->table_width, ldcObj->table_height, VX_DF_IMAGE_NV12);
        status = vxGetStatus((vx_reference)output_img);
        if(status == VX_SUCCESS)
        {
            ldcObj->output_arr = vxCreateObjectArray(context, (vx_reference)output_img, sensorObj->num_cameras_enabled);
            vxReleaseImage(&output_img);
    
            status = vxGetStatus((vx_reference)ldcObj->output_arr);
            if(status != VX_SUCCESS)
            {
                printf("[LDC-MODULE] Unable to create output image array! \n");
            }
            else
            {
                vxSetReferenceName((vx_reference)ldcObj->output_arr, "ldc_node_output_arr");
            }
        }
        else
        {
            printf("[LDC-MODULE] Unable to create output image! \n");
        }
    
        if(ldcObj->en_out_ldc_write == 1)
        {
            char file_path[TIVX_FILEIO_FILE_PATH_LENGTH];
            char file_prefix[TIVX_FILEIO_FILE_PREFIX_LENGTH];
    
            strcpy(file_path, ldcObj->output_file_path);
            ldcObj->file_path   = vxCreateArray(context, VX_TYPE_UINT8, TIVX_FILEIO_FILE_PATH_LENGTH);
            status = vxGetStatus((vx_reference)ldcObj->file_path);
            if(status == VX_SUCCESS)
            {
                vxSetReferenceName((vx_reference)ldcObj->file_path, "ldc_write_node_file_path");
    
                vxAddArrayItems(ldcObj->file_path, TIVX_FILEIO_FILE_PATH_LENGTH, &file_path[0], 1);
            }
            else
            {
                printf("[LDC-MODULE] Unable to create file path object for writing outputs! \n");
            }
    
            strcpy(file_prefix, "ldc_output");
            ldcObj->file_prefix = vxCreateArray(context, VX_TYPE_UINT8, TIVX_FILEIO_FILE_PREFIX_LENGTH);
            status = vxGetStatus((vx_reference)ldcObj->file_prefix);
            if(status == VX_SUCCESS)
            {
                vxSetReferenceName((vx_reference)ldcObj->file_prefix, "ldc_write_node_file_prefix");
    
                vxAddArrayItems(ldcObj->file_prefix, TIVX_FILEIO_FILE_PREFIX_LENGTH, &file_prefix[0], 1);
            }
            else
            {
                printf("[LDC-MODULE] Unable to create file prefix object for writing outputs! \n");
            }
    
            ldcObj->write_cmd = vxCreateUserDataObject(context, "tivxFileIOWriteCmd", sizeof(tivxFileIOWriteCmd), NULL);
            status = vxGetStatus((vx_reference)ldcObj->write_cmd);
            if(status != VX_SUCCESS)
            {
                printf("[LDC-MODULE] Unable to create file write cmd object! \n");
            }
            else
            {
                vxSetReferenceName((vx_reference)ldcObj->write_cmd, "ldc_write_node_write_cmd");
            }
        }
        else
        {
            ldcObj->file_path   = NULL;
            ldcObj->file_prefix = NULL;
            ldcObj->write_node  = NULL;
            ldcObj->write_cmd   = NULL;
        }
    
        return status;
    }
    vx_status app_init_ldc(vx_context context, LDCObj *ldcObj, SensorObj *sensorObj, char *objName)
    {
        vx_status status = VX_SUCCESS;
    
        ldcObj->table_width  = LDC_TABLE_WIDTH;
        ldcObj->table_height = LDC_TABLE_HEIGHT;
        ldcObj->ds_factor    = LDC_DS_FACTOR;
    
        status = configure_dcc_params(context, ldcObj, sensorObj);
    
        if(status == VX_SUCCESS)
        {
            status = configure_mesh_params(context, ldcObj, sensorObj);
        }
    
        if(status == VX_SUCCESS)
        {
            status = configure_region_params(context, ldcObj, sensorObj);
        }
    
        if(status == VX_SUCCESS)
        {
            status = configure_ldc_params(context, ldcObj, sensorObj);
        }
    
        if(status == VX_SUCCESS)
        {
            status = create_ldc_outputs(context, ldcObj, sensorObj);
        }
    
        return (status);
    }
    
    void app_deinit_ldc(LDCObj *ldcObj)
    {
        vxReleaseUserDataObject(&ldcObj->config);
        vxReleaseUserDataObject(&ldcObj->region_config);
        vxReleaseUserDataObject(&ldcObj->mesh_config);
    
        vxReleaseImage(&ldcObj->mesh_img);
        vxReleaseObjectArray(&ldcObj->output_arr);
    
        if(ldcObj->dcc_config != NULL)
        {
            vxReleaseUserDataObject(&ldcObj->dcc_config);
        }
        if(ldcObj->en_out_ldc_write == 1)
        {
            vxReleaseArray(&ldcObj->file_path);
            vxReleaseArray(&ldcObj->file_prefix);
            vxReleaseUserDataObject(&ldcObj->write_cmd);
        }
    }
    
    void app_delete_ldc(LDCObj *ldcObj)
    {
        if(ldcObj->node != NULL)
        {
            vxReleaseNode(&ldcObj->node);
        }
        if(ldcObj->write_node != NULL)
        {
            vxReleaseNode(&ldcObj->write_node);
        }
    }
    
    vx_status app_create_graph_ldc(vx_graph graph, LDCObj *ldcObj, vx_object_array input_arr)
    {
        printf("[LDC-MODULE] app_create_graph_ldc() : ENTERING \n");    //@SRK
        vx_status status = VX_SUCCESS;
    
        if (ldcObj->dcc_config != NULL)
        {
            printf("[LDC-MODULE] app_create_graph_ldc() : DCC config object is NOT NULL \n");   //@SRK
    
            vx_image input_img = (vx_image)vxGetObjectArrayItem(input_arr, 0);
            printf("after input_img\n");
            vx_image output_img = (vx_image)vxGetObjectArrayItem(ldcObj->output_arr, 0);
            printf("after output_img\n");
            printf("before tivxVpacLdcNode\n");
            ldcObj->node = tivxVpacLdcNode(graph, ldcObj->config, NULL,
                                           NULL, NULL,
                                           NULL, ldcObj->dcc_config, input_img,
                                           output_img, NULL);
            printf("after tivxVpacLdcNode\n");
            vxReleaseImage(&input_img);
            vxReleaseImage(&output_img);
    
            status = vxGetStatus((vx_reference)ldcObj->node);
            if(status == VX_SUCCESS)
            {
                vxSetReferenceName((vx_reference)ldcObj->node, "ldc_node");
                vxSetNodeTarget(ldcObj->node, VX_TARGET_STRING, TIVX_TARGET_VPAC_LDC1);
    
                vx_bool replicate[] = { vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_true_e, vx_true_e, vx_false_e};
                vxReplicateNode(graph, ldcObj->node, replicate, 9);
    
                printf("[LDC-MODULE] Created LDC node with DCC config and NULL mesh_config! \n");
            }
            else
            {
                printf("[LDC-MODULE] Unable to create LDC node with DCC config! \n");
            }
            
        }
        else
        {
            printf("[LDC-MODULE] app_create_graph_ldc() : DCC config object is NULL \n");   //@SRK
    
            vx_image input_img = (vx_image)vxGetObjectArrayItem(input_arr, 0);
            vx_image output_img = (vx_image)vxGetObjectArrayItem(ldcObj->output_arr, 0);
    
    //        ldcObj->node = tivxVpacLdcNode(graph, ldcObj->config, NULL,
    //                                       ldcObj->region_config, ldcObj->mesh_config,
    //                                       ldcObj->mesh_img, NULL, input_img,
    //                                       output_img, NULL);
    //        ldcObj->node = tivxVpacLdcNode(graph, ldcObj->config, NULL,
    //                                       ldcObj->region_config, NULL,
    //                                       ldcObj->mesh_img, NULL, input_img,
    //                                       output_img, NULL);
            ldcObj->node = tivxVpacLdcNode(graph, ldcObj->config, NULL,
                                           NULL, NULL,
                                           NULL, NULL, input_img,
                                           output_img, NULL);
    
            vxReleaseImage(&input_img);
            vxReleaseImage(&output_img);
    
            status = vxGetStatus((vx_reference)ldcObj->node);
    
            if(status == VX_SUCCESS)
            {
                vxSetReferenceName((vx_reference)ldcObj->node, "ldc_node");
                vxSetNodeTarget(ldcObj->node, VX_TARGET_STRING, TIVX_TARGET_VPAC_LDC1);
    
                //vx_bool replicate[] = { vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_false_e, vx_true_e, vx_true_e, vx_false_e};
                //vxReplicateNode(graph, ldcObj->node, replicate, 9);
    
                printf("[LDC-MODULE] Created LDC node without DCC config and NULL mesh_config! \n");    //@SRK
            }
            else
            {
                printf("[LDC-MODULE] Unable to create LDC node without DCC config! \n");
            }
        }
    
        if(ldcObj->en_out_ldc_write == 1)
        {
            status = app_create_graph_ldc_write_output(graph, ldcObj);
        }
    
        printf("[LDC-MODULE] app_create_graph_ldc() : EXITING \n");
        return status;
    }
    
    vx_status app_create_graph_ldc_write_output(vx_graph graph, LDCObj *ldcObj)
    {
        vx_status status = VX_SUCCESS;
    
        vx_image output_img = (vx_image)vxGetObjectArrayItem(ldcObj->output_arr, 0);
        ldcObj->write_node = tivxWriteImageNode(graph, output_img, ldcObj->file_path, ldcObj->file_prefix);
        vxReleaseImage(&output_img);
    
        status = vxGetStatus((vx_reference)ldcObj->write_node);
        if(status == VX_SUCCESS)
        {
            vxSetReferenceName((vx_reference)ldcObj->write_node, "ldc_write_node");
            vxSetNodeTarget(ldcObj->write_node, VX_TARGET_STRING, TIVX_TARGET_A72_0);
    
            vx_bool replicate[] = { vx_true_e, vx_false_e, vx_false_e};
            vxReplicateNode(graph, ldcObj->write_node, replicate, 3);
        }
        else
        {
            printf("[LDC-MODULE] Unable to create node to write LDC output! \n");
        }
    
        return (status);
    }
    
    vx_status app_send_cmd_ldc_write_node(LDCObj *ldcObj, vx_uint32 start_frame, vx_uint32 num_frames, vx_uint32 num_skip)
    {
        printf(" ##### HWA DEBUG: app_ldc_module :: app_send_cmd_ldc_write_node() - ENTERING \n");
    
        vx_status status = VX_SUCCESS;
    
        tivxFileIOWriteCmd write_cmd;
    
        write_cmd.start_frame = start_frame;
        write_cmd.num_frames = num_frames;
        write_cmd.num_skip = num_skip;
    
        status = vxCopyUserDataObject(ldcObj->write_cmd, 0, sizeof(tivxFileIOWriteCmd),\
                      &write_cmd, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
    
        if(status == VX_SUCCESS)
        {
            vx_reference refs[2];
    
            refs[0] = (vx_reference)ldcObj->write_cmd;
    
            status = tivxNodeSendCommand(ldcObj->write_node, TIVX_CONTROL_CMD_SEND_TO_ALL_REPLICATED_NODES,
                                     TIVX_FILEIO_CMD_SET_FILE_WRITE,
                                     refs, 1u);
    
            if(VX_SUCCESS != status)
            {
                printf("LDC Node send command failed!\n");
            }
    
            APP_PRINTF("LDC node send command success!\n");
            printf("LDC node send command success!\n");
        }
    
        printf(" ##### HWA DEBUG: app_ldc_module :: app_send_cmd_ldc_write_node() - EXITING \n");
        return (status);
    }
    

    Thanks and Regards,

    Chaitanya Prakash Uppala

  • Hi Prakash,

      I see this error from your logs  "[LDC-MODULE] Error getting DCC buffer"

    can you share your app_iss_commom.c file and the header file generated.

    Regards,
    Gokul

  • Hi,

    Please find the attachments below for the files being asked.

    /*
     *
     * Copyright (c) 2018 Texas Instruments Incorporated
     *
     * All rights reserved not granted herein.
     *
     * Limited License.
     *
     * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive
     * license under copyrights and patents it now or hereafter owns or controls to make,
     * have made, use, import, offer to sell and sell ("Utilize") this software subject to the
     * terms herein.  With respect to the foregoing patent license, such license is granted
     * solely to the extent that any such patent is necessary to Utilize the software alone.
     * The patent license shall not apply to any combinations which include this software,
     * other than combinations with devices manufactured by or for TI ("TI Devices").
     * No hardware patent is licensed hereunder.
     *
     * Redistributions must preserve existing copyright notices and reproduce this license
     * (including the above copyright notice and the disclaimer and (if applicable) source
     * code license limitations below) in the documentation and/or other materials provided
     * with the distribution
     *
     * Redistribution and use in binary form, without modification, are permitted provided
     * that the following conditions are met:
     *
     * *       No reverse engineering, decompilation, or disassembly of this software is
     * permitted with respect to any software provided in binary form.
     *
     * *       any redistribution and use are licensed by TI for use only with TI Devices.
     *
     * *       Nothing shall obligate TI to provide you with source code for the software
     * licensed and provided to you in object code.
     *
     * If software source code is provided to you, modification and redistribution of the
     * source code are permitted provided that the following conditions are met:
     *
     * *       any redistribution and use of the source code, including any resulting derivative
     * works, are licensed by TI for use only with TI Devices.
     *
     * *       any redistribution and use of any object code compiled from the source code
     * and any resulting derivative works, are licensed by TI for use only with TI Devices.
     *
     * Neither the name of Texas Instruments Incorporated nor the names of its suppliers
     *
     * may be used to endorse or promote products derived from this software without
     * specific prior written permission.
     *
     * DISCLAIMER.
     *
     * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS
     * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     * IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     * OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     */
    #include <dirent.h>
    #include <sys/stat.h>
    
    
    #include <utils/ipc/include/app_ipc.h>
    #include <utils/remote_service/include/app_remote_service.h>
    #include <utils/iss/include/app_iss.h>
    #include <utils/console_io/include/app_log.h>
    
    #include <dcc_viss_imx390.h>
    #include <dcc_viss_imx390_wdr.h>
    
    #include <dcc_viss_ar0233.h>
    #include <dcc_viss_ar0233_wdr.h>
    
    #include <dcc_viss_ar0820.h>
    #include <dcc_viss_ar0820_wdr.h>
    
    #include <dcc_viss_ub9xx_raw_test_pattern.h>
    
    #define _ENABLE_2A_
    
    static uint8_t  dcc_viss_imx390[DCC_VISS_IMX390_DCC_CFG_NUM_ELEM] = DCC_VISS_IMX390DCC_CFG;
    static uint8_t  dcc_viss_imx390_wdr[DCC_VISS_IMX390_WDR_DCC_CFG_NUM_ELEM] = DCC_VISS_IMX390_WDRDCC_CFG;
    
    static uint8_t  dcc_viss_ar0233_linear[DCC_VISS_AR0233_DCC_CFG_NUM_ELEM] = DCC_VISS_AR0233DCC_CFG;
    static uint8_t  dcc_viss_ar0233_wdr[DCC_VISS_AR0233_WDR_DCC_CFG_NUM_ELEM] = DCC_VISS_AR0233_WDRDCC_CFG;
    
    static uint8_t  dcc_viss_ar0820_linear[DCC_VISS_AR0820_DCC_CFG_NUM_ELEM] = DCC_VISS_AR0820DCC_CFG;
    static uint8_t  dcc_viss_ar0820_wdr[DCC_VISS_AR0820_WDR_DCC_CFG_NUM_ELEM] = DCC_VISS_AR0820_WDRDCC_CFG;
    
    static uint8_t  dcc_viss_ub9xx_raw_test_pattern_linear[DCC_VISS_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM] = DCC_VISS_UB9XX_RAW_TEST_PATTERNDCC_CFG;
    
    #include <dcc_ldc_imx390.h>
    #include <dcc_ldc_imx390_wdr.h>
    static uint8_t  dcc_ldc_imx390[DCC_LDC_IMX390_DCC_CFG_NUM_ELEM] = DCC_LDC_IMX390DCC_CFG;
    static uint8_t  dcc_ldc_imx390_wdr[DCC_LDC_IMX390_WDR_DCC_CFG_NUM_ELEM] = DCC_LDC_IMX390_WDRDCC_CFG;
    
    #include <dcc_ldc_ar0233.h>
    #include <dcc_ldc_ar0233_wdr.h>
    static uint8_t  dcc_ldc_ar0233_linear[DCC_LDC_AR0233_DCC_CFG_NUM_ELEM] = DCC_LDC_AR0233DCC_CFG;
    static uint8_t  dcc_ldc_ar0233_wdr[DCC_LDC_AR0233_WDR_DCC_CFG_NUM_ELEM] = DCC_LDC_AR0233_WDRDCC_CFG;
    
    #include <dcc_ldc_ar0820.h>
    #include <dcc_ldc_ar0820_wdr.h>
    static uint8_t  dcc_ldc_ar0820_linear[DCC_LDC_AR0820_DCC_CFG_NUM_ELEM] = DCC_LDC_AR0820DCC_CFG;
    static uint8_t  dcc_ldc_ar0820_wdr[DCC_LDC_AR0820_WDR_DCC_CFG_NUM_ELEM] = DCC_LDC_AR0820_WDRDCC_CFG;
    
    #include <dcc_ldc_ub9xx_raw_test_pattern.h>
    static uint8_t  dcc_ldc_ub9xx_raw_test_pattern_linear[DCC_LDC_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM] = DCC_LDC_UB9XX_RAW_TEST_PATTERNDCC_CFG;
    
    #include <dcc_ldc_ub96x_uyvytestpat.h>
    static uint8_t  dcc_ldc_ub96x_uyvytestpat[DCC_LDC_UB96X_UYVYTESTPAT_DCC_CFG_NUM_ELEM] = DCC_LDC_UB96X_UYVYTESTPATDCC_CFG;
    
    #include <dcc_ldc_gw_ar0233.h>
    static uint8_t  dcc_ldc_gw_ar0233[DCC_LDC_GW_AR0233_DCC_CFG_NUM_ELEM] = DCC_LDC_GW_AR0233DCC_CFG;
    #include <dcc_ldc_isx016.h>
    static uint8_t  dcc_ldc_isx016[DCC_LDC_ISX016_DCC_CFG_NUM_ELEM] = DCC_LDC_ISX016DCC_CFG;
    
    #ifdef _ENABLE_2A_
    #include <dcc_2a_imx390.h>
    #include <dcc_2a_imx390_wdr.h>
    
    #include <dcc_2a_ar0233.h>
    #include <dcc_2a_ar0233_wdr.h>
    
    #include <dcc_2a_ar0820.h>
    #include <dcc_2a_ar0820_wdr.h>
    
    #include <dcc_2a_ub9xx_raw_test_pattern.h>
    
    static uint8_t  dcc_2a_imx390[DCC_2A_IMX390_DCC_CFG_NUM_ELEM] = DCC_2A_IMX390DCC_CFG;
    static uint8_t  dcc_2a_imx390_wdr[DCC_2A_IMX390_WDR_DCC_CFG_NUM_ELEM] = DCC_2A_IMX390_WDRDCC_CFG;
    
    static uint8_t  dcc_2a_ar0233_linear[DCC_2A_AR0233_DCC_CFG_NUM_ELEM] = DCC_2A_AR0233DCC_CFG;
    static uint8_t  dcc_2a_ar0233_wdr[DCC_2A_AR0233_WDR_DCC_CFG_NUM_ELEM] = DCC_2A_AR0233_WDRDCC_CFG;
    
    static uint8_t  dcc_2a_ar0820_linear[DCC_2A_AR0820_DCC_CFG_NUM_ELEM] = DCC_2A_AR0820DCC_CFG;
    static uint8_t  dcc_2a_ar0820_wdr[DCC_2A_AR0820_WDR_DCC_CFG_NUM_ELEM] = DCC_2A_AR0820_WDRDCC_CFG;
    
    static uint8_t  dcc_2a_ub9xx_raw_test_pattern_linear[DCC_2A_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM] = DCC_2A_UB9XX_RAW_TEST_PATTERNDCC_CFG;
    
    #endif
    
    int32_t appIssGetDCCSizeVISS(char * sensor_name, uint32_t wdr_mode)
    {
        int32_t size = -1;
        switch(wdr_mode)
        {
            case 0:
                /*Linear mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    size = DCC_VISS_IMX390_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    size = DCC_VISS_AR0233_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    size = DCC_VISS_AR0820_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                    size = DCC_VISS_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM;
                else
                    size = -1;
                break;
            case 1:
                /*WDR mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    size = DCC_VISS_IMX390_WDR_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    size = DCC_VISS_AR0233_WDR_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    size = DCC_VISS_AR0820_WDR_DCC_CFG_NUM_ELEM;
                else
                    size = -1;
                break;
            default:
                /*Unsupported mode*/
                size = -1;
        }
        return size;
    }
    
    int32_t appIssGetDCCBuffVISS(char * sensor_name, uint32_t wdr_mode,  uint8_t * dcc_buf, int32_t num_bytes)
    {
        switch(wdr_mode)
        {
            case 0:
                /*Linear mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    memcpy(dcc_buf, dcc_viss_imx390, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    memcpy(dcc_buf, dcc_viss_ar0233_linear, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    memcpy(dcc_buf, dcc_viss_ar0820_linear, num_bytes);
                else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                    memcpy(dcc_buf, dcc_viss_ub9xx_raw_test_pattern_linear, num_bytes);
                else
                    return -1;
                break;
            case 1:
                /*WDR mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    memcpy(dcc_buf, dcc_viss_imx390_wdr, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    memcpy(dcc_buf, dcc_viss_ar0233_wdr, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    memcpy(dcc_buf, dcc_viss_ar0820_wdr, num_bytes);
                else
                    return -1;
                break;
            default:
                /*Unsupported mode*/
                return -1;
        }
    
        return 0;
    }
    
    int32_t appIssGetDCCSize2A(char * sensor_name, uint32_t wdr_mode)
    {
        int32_t size = -1;
        switch(wdr_mode)
        {
            case 0:
                /*Linear mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    size = DCC_2A_IMX390_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    size = DCC_2A_AR0233_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    size = DCC_2A_AR0820_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                    size = DCC_2A_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM;
                else
                    size = -1;
                break;
            case 1:
                /*WDR mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    size = DCC_2A_IMX390_WDR_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    size = DCC_2A_AR0233_WDR_DCC_CFG_NUM_ELEM;
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    size = DCC_2A_AR0820_WDR_DCC_CFG_NUM_ELEM;
                else
                    size = -1;
                break;
            default:
                /*Unsupported mode*/
                size = -1;
        }
        return size;
    }
    
    int32_t appIssGetDCCBuff2A(char * sensor_name, uint32_t wdr_mode,  uint8_t * dcc_buf, int32_t num_bytes)
    {
        switch(wdr_mode)
        {
            case 0:
                /*Linear mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    memcpy(dcc_buf, dcc_2a_imx390, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    memcpy(dcc_buf, dcc_2a_ar0233_linear, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    memcpy(dcc_buf, dcc_2a_ar0820_linear, num_bytes);
                else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                    memcpy(dcc_buf, dcc_2a_ub9xx_raw_test_pattern_linear, num_bytes);
                else
                    return -1;
                break;
            case 1:
                /*WDR mode*/
                if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                    memcpy(dcc_buf, dcc_2a_imx390_wdr, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                    memcpy(dcc_buf, dcc_2a_ar0233_wdr, num_bytes);
                else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                    memcpy(dcc_buf, dcc_2a_ar0820_wdr, num_bytes);
                else
                    return -1;
                break;
            default:
                /*Unsupported mode*/
                return -1;
        }
    
        return 0;
    }
    
    int32_t appIssGetDCCSizeLDC(char * sensor_name, uint32_t wdr_mode)
    {
        int32_t size = -1;
    
        if (0 == strcmp(sensor_name, UB96X_TESTPATTERN_UYVY))
        {
            size = DCC_LDC_UB96X_UYVYTESTPAT_DCC_CFG_NUM_ELEM;
        }
        else if (0 == strcmp(sensor_name, GW_AR0233_UYVY))
        {
            size = DCC_LDC_GW_AR0233_DCC_CFG_NUM_ELEM;
        }
        else
        {
            switch(wdr_mode)
            {
                case 0:
                    /*Linear mode*/
                    if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                        size = DCC_LDC_IMX390_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                        size = DCC_LDC_AR0233_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                        size = DCC_LDC_AR0820_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                        size = DCC_LDC_UB9XX_RAW_TEST_PATTERN_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, SENSOR_SONY_ISX016_UB913A_Q1))
                        size = DCC_LDC_ISX016_DCC_CFG_NUM_ELEM;
                    else
                        size = -1;
                    break;
                case 1:
                    /*WDR mode*/
                    if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                        size = DCC_LDC_IMX390_WDR_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                        size = DCC_LDC_AR0233_WDR_DCC_CFG_NUM_ELEM;
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                        size = DCC_LDC_AR0820_WDR_DCC_CFG_NUM_ELEM;
                    else
                        size = -1;
                    break;
                default:
                    /*Unsupported mode*/
                    size = -1;
            }
    
        }
    
        return size;
    }
    
    int32_t appIssGetDCCBuffLDC(char * sensor_name, uint32_t wdr_mode,  uint8_t * dcc_buf, int32_t num_bytes)
    {
        if (0 == strcmp(sensor_name, UB96X_TESTPATTERN_UYVY))
        {
            memcpy(dcc_buf, dcc_ldc_ub96x_uyvytestpat, num_bytes);
        }
        else if (0 == strcmp(sensor_name, GW_AR0233_UYVY))
        {
            memcpy(dcc_buf, dcc_ldc_gw_ar0233, num_bytes);
        }
        else
        {
            switch(wdr_mode)
            {
                case 0:
                    /*Linear mode*/
                    if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                        memcpy(dcc_buf, dcc_ldc_imx390, num_bytes);
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                        memcpy(dcc_buf, dcc_ldc_ar0233_linear, num_bytes);
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                        memcpy(dcc_buf, dcc_ldc_ar0820_linear, num_bytes);
                    else if (0 == strcmp(sensor_name, UB9XX_RAW_TESTPAT))
                        memcpy(dcc_buf, dcc_ldc_ub9xx_raw_test_pattern_linear, num_bytes);
                    else if (0 == strcmp(sensor_name, GW_AR0233_UYVY))
                        memcpy(dcc_buf, dcc_ldc_isx016, num_bytes);
                    else
                        return -1;
                    break;
                case 1:
                    /*WDR mode*/
                    if(0 == strcmp(sensor_name, SENSOR_SONY_IMX390_UB953_D3))
                        memcpy(dcc_buf, dcc_ldc_imx390_wdr, num_bytes);
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0233_UB953_MARS))
                        memcpy(dcc_buf, dcc_ldc_ar0233_wdr, num_bytes);
                    else if (0 == strcmp(sensor_name, SENSOR_ONSEMI_AR0820_UB953_LI))
                        memcpy(dcc_buf, dcc_ldc_ar0820_wdr, num_bytes);
                    else
                        return -1;
                    break;
                default:
                    /*Unsupported mode*/
                    return -1;
            }
        }
    
        return 0;
    }
    
    int32_t appIssGetResizeParams(uint16_t in_width, uint16_t in_height, uint16_t tgt_width, uint16_t tgt_height, uint16_t * out_width, uint16_t * out_height)
    {
        uint32_t tmp = 0;
        uint32_t rsz_ratio = 1024;
        uint32_t rsz_ratio_x = (tgt_width*1024)/in_width;
        uint32_t rsz_ratio_y = (tgt_height*1024)/in_height;
    
        /*Assuming downscale. Will pick the ratio which has a bigger downscale factor*/
        /*X and Y dimensions will be scaled by same factor to maintain aspect ratio*/
        rsz_ratio = rsz_ratio_x < rsz_ratio_y ? rsz_ratio_x : rsz_ratio_y;
        tmp = (in_width*rsz_ratio)/1024;
        *out_width = (tmp>>3)<<3;/*Align to 8x*/
        tmp = (in_height*rsz_ratio)/1024;
        *out_height = (tmp>>3)<<3;/*Align to 8x*/
    
        return 0;
    }
    
    /*
    Returns the sum of sizes all .bin files inside a specified directory.
    Does not look inside subfolders.
    */
    int32_t get_dcc_dir_size(char* dcc_folder_path)
    {
        DIR *d;
        char file_path[MAX_FILE_NAME_LEN];
        struct dirent *dir;
        struct stat FileAttrib;
        int32_t size = 0;
        d = opendir(dcc_folder_path);
        if (d)
        {
            while ((dir = readdir(d)) != NULL)
            {
                char *dot = strrchr(dir->d_name, '.');
                if (dot && (strcmp(dot, ".bin") == 0))
                {
                    snprintf(file_path, MAX_FILE_NAME_LEN, "%s/%s", dcc_folder_path, dir->d_name);
                    stat(file_path, &FileAttrib);
                    size += FileAttrib.st_size;
                }
            }
            closedir(d);
        }
        else
        {
            printf("get_dcc_dir_size : Could not open directory or directory is empty %s \n",
            dcc_folder_path);
        }
    
        return size;
    }
    
    /*
    Returns the contents of all .bin files inside a specified directory.
    Does not look inside subfolders.
    */
    int32_t get_dcc_dir_data(char* dcc_folder_path, uint8_t * dcc_buf)
    {
        DIR *d;
        char file_path[MAX_FILE_NAME_LEN];
        struct dirent *dir;
        struct stat FileAttrib;
        int32_t offset = 0;
        int32_t bytes_read = 0;
        FILE * fp;
        d = opendir(dcc_folder_path);
        printf("get_dcc_dir_data : %s \n", dcc_folder_path);
        if (d)
        {
            while ((dir = readdir(d)) != NULL)
            {
                char *dot = strrchr(dir->d_name, '.');
                if (dot && (strcmp(dot, ".bin") == 0))
                {
                    snprintf(file_path, MAX_FILE_NAME_LEN, "%s/%s", dcc_folder_path, dir->d_name);
                    fp = fopen(file_path, "rb");
                    if(NULL == fp)
                    {
                        printf("Error : Unable to open %s \n", file_path);
                        continue;
                    }
                    stat(file_path, &FileAttrib);
                    bytes_read = fread(dcc_buf+offset, sizeof(char), FileAttrib.st_size, fp);
                    printf("read %d bytes from %s\n", bytes_read, dir->d_name);
                    offset += bytes_read;
                    fclose(fp);
                }
            }
            closedir(d);
        }
        return offset;
    }
    
    /*
    Checks if the plugin is relevant to VISS. Returns
        0, if False
        1, if True
    */
    static uint8_t is_viss_plugin(uint32_t plugin_id)
    {
        switch (plugin_id)
        {
            case DCC_ID_H3A_AEWB_CFG:
            case DCC_ID_H3A_MUX_LUTS:
            case DCC_ID_RFE_DECOMPAND:
            case DCC_ID_IPIPE_RGB_RGB_1:
            case DCC_ID_NSF4:
            case DCC_ID_BLACK_CLAMP:
            case DCC_ID_IPIPE_CFA:
            case DCC_ID_VISS_GLBCE:
            case DCC_ID_VISS_LSC:
            case DCC_ID_VISS_DPC:
            case DCC_ID_VISS_YEE:
            case DCC_ID_RAWFE_WB1_VS:
    #ifdef VPAC3
            case DCC_ID_VISS_CFAI3_A:
            case DCC_ID_VISS_CFAI3_B:
            case DCC_ID_VISS_CAC:
            case DCC_ID_VISS_RAWHIST:
            case DCC_ID_VISS_CCMV:
    #endif
                return 1U;
                break;
            default:
                return 0;
        }
        return 0;
    }
    
    /*
    Checks if the plugin is relevant to AEWB. Returns
        0, if False
        1, if True
    */
    static uint8_t is_aewb_plugin(uint32_t plugin_id)
    {
        switch (plugin_id)
        {
            case DCC_ID_H3A_AEWB_CFG:
            case DCC_ID_AAA_ALG_AWB_TI3:
                return 1U;
                break;
            default:
                return 0;
        }
        return 0;
    }
    
    /*
    Checks if the plugin is relevant to LDC. Returns
        0, if False
        1, if True
    */
    static uint8_t is_ldc_plugin(uint32_t plugin_id)
    {
        switch (plugin_id)
        {
            case DCC_ID_MESH_LDC_J7:
                return 1U;
                break;
            default:
                return 0;
        }
        return 0;
    }
    
    int32_t appSplitVpacDcc(uint8_t *dcc_buf_in, uint32_t prmSize,
                            uint8_t ** dcc_buf_viss, uint32_t *dcc_buf_viss_num_bytes,
                            uint8_t ** dcc_buf_aewb, uint32_t *dcc_buf_aewb_num_bytes,
                            uint8_t ** dcc_buf_ldc, uint32_t *dcc_buf_ldc_num_bytes)
    {
        int32_t status = 0;
        uint8_t *tmp_buf;
        uint32_t offset_2a = 0;
        uint32_t offset_viss = 0;
        uint32_t offset_ldc = 0;
        uint8_t *pluginBuf;
        dcc_component_header_type     *header_data;
        uint32_t offset = 0;
    
        tmp_buf = malloc(prmSize);
        if(NULL == tmp_buf)
        {
            printf("Failed to allocate %d bytes for dcc_buf_2a \n", prmSize);
            return -1;
        }
        else
        {
            *dcc_buf_aewb = tmp_buf;
            tmp_buf = NULL;
        }
    
        tmp_buf = malloc(prmSize);
        if(NULL == tmp_buf)
        {
            printf("Failed to allocate %d bytes for dcc_buf_viss \n", prmSize);
            free(*dcc_buf_aewb);
            return -1;
        }
        else
        {
            *dcc_buf_viss = tmp_buf;
            tmp_buf = NULL;
        }
    
        tmp_buf = malloc(prmSize);
        if(NULL == tmp_buf)
        {
            printf("Failed to allocate %d bytes for dcc_buf_ldc \n", prmSize);
            free(*dcc_buf_aewb);
            free(*dcc_buf_viss);
            return -1;
        }
        else
        {
            *dcc_buf_ldc = tmp_buf;
            tmp_buf = NULL;
        }
    
        pluginBuf = dcc_buf_in;
    
        while (offset < prmSize)
        {
            header_data = (dcc_component_header_type*)pluginBuf;
    
            if(1U == is_viss_plugin(header_data->dcc_descriptor_id))
            {
                memcpy(*dcc_buf_viss + offset_viss, pluginBuf, header_data->total_file_sz);
                offset_viss += header_data->total_file_sz;
            }
    
            if(1U == is_aewb_plugin(header_data->dcc_descriptor_id))
            {
                memcpy(*dcc_buf_aewb + offset_2a, pluginBuf, header_data->total_file_sz);
                offset_2a += header_data->total_file_sz;
            }
    
            if(1U == is_ldc_plugin(header_data->dcc_descriptor_id))
            {
                memcpy(*dcc_buf_ldc + offset_ldc, pluginBuf, header_data->total_file_sz);
                offset_ldc += header_data->total_file_sz;
            }
    
            pluginBuf += header_data->total_file_sz;
            offset += header_data->total_file_sz;
        }
    
        *dcc_buf_viss_num_bytes = offset_viss;
        *dcc_buf_ldc_num_bytes = offset_ldc;
        *dcc_buf_aewb_num_bytes = offset_2a;
        return status;
    }
    
    #if defined(LINUX)
    /*
        This function receives a buffer containing VPAC tuning data.
        The data may have been received through ITT interface or file read.
        It may contain tuning parameters for one or more plugins belonging to
        one or more of the following nodes
            VISS
            AEWB
            LDC
    
        In case of a multi-camera system, the nodes maybe replicated, in which
        case an addtional parameter node_index is required. Single camera always
        passes this value as 0.
    
        User is free to send the tuning data in any order. This function is responsible to
            Split the tuning database into VISS, AEWB and LDC
            Send the tuning data to all the nodes one by one
    */
    int32_t appUpdateVpacDcc(uint8_t *dcc_buf, uint32_t prmSize, vx_context context,
                            vx_node viss_node, uint32_t viss_node_index,
                            vx_node aewb_node, uint32_t aewb_node_index,
                            vx_node ldc_node, uint32_t ldc_node_index
                        )
    {
        uint8_t* dcc_buf_viss;
        uint32_t dcc_numbytes_viss;
        uint8_t* dcc_buf_2a;
        uint32_t dcc_numbytes_2a;
        uint8_t* dcc_buf_ldc;
        uint32_t dcc_numbytes_ldc;
        int32_t status = 0;
    
        status = appSplitVpacDcc(dcc_buf, prmSize,
                            &dcc_buf_viss, &dcc_numbytes_viss,
                            &dcc_buf_2a, &dcc_numbytes_2a,
                            &dcc_buf_ldc, &dcc_numbytes_ldc);
    
        if(status == 0)
        {
            if((NULL != viss_node) && (dcc_numbytes_viss > 0))
            {
                status = appDccUpdateNode(dcc_buf_viss, dcc_numbytes_viss, viss_node, viss_node_index, context);
            }
    
            if((NULL != aewb_node) && (dcc_numbytes_2a > 0))
            {
                status = appDccUpdateNode(dcc_buf_2a, dcc_numbytes_2a, aewb_node, aewb_node_index, context);
            }
    
            if((NULL != ldc_node) && (dcc_numbytes_ldc > 0))
            {
                status = appDccUpdateNode(dcc_buf_ldc, dcc_numbytes_ldc, ldc_node, ldc_node_index, context);
            }
    
            if(dcc_buf_2a)
                free(dcc_buf_2a);
    
            if(dcc_buf_viss)
                free(dcc_buf_viss);
    
            if(dcc_buf_ldc)
                free(dcc_buf_ldc);
    
        }
    
    
        return status;
    }
    
    /*
        This function reads tuning database from the file system.
        The binary data read is then sent to VPAC nodes using appUpdateVpacDcc.
    
        The database is expected under the path
        "/opt/vision_apps/dcc/<sensor_name>/<operating_mode>", where
            sensor_name is the string received by querying sensor properties.
            operating_mode is "wdr" or "linear" as set by the application.
    
        For e.g. IMX390 DCC database in WDR mode will be expected under the path
        /opt/vision_apps/dcc/IMX390-UB953_D3/wdr
    */
    int32_t appDccUpdatefromFS(char* sensor_name, uint8_t wdr_mode,
                            vx_node node_viss, uint32_t viss_node_index,
                            vx_node node_aewb, uint32_t aewb_node_index,
                            vx_node node_ldc, uint32_t ldc_node_index,
                            vx_context context)
    {
        char dcc_dir_path[MAX_FOLDER_NAME_LEN];
         char op_mode[8];
        int dcc_num_bytes;
        int dcc_bytes_read;
        uint8_t * dcc_buf;
        switch(wdr_mode)
        {
            case 0:
                /*Linear mode*/
                snprintf(op_mode, 8, "%s", "linear");
            default:
                /*WDR mode*/
                snprintf(op_mode, 8, "%s", "wdr");
        }
    
        snprintf(dcc_dir_path, MAX_FOLDER_NAME_LEN, "%s/%s/%s", DCC_ROOT, sensor_name, op_mode);
        dcc_num_bytes = get_dcc_dir_size(dcc_dir_path);
        if(dcc_num_bytes > 0 )
        {
            dcc_buf = malloc(dcc_num_bytes);
            if(NULL != dcc_buf)
            {
                dcc_bytes_read = get_dcc_dir_data(dcc_dir_path, dcc_buf);
                if(dcc_bytes_read > 0)
                {
                    appUpdateVpacDcc(dcc_buf, dcc_num_bytes, context,
                        node_viss, viss_node_index,
                        node_aewb, aewb_node_index,
                        node_ldc, ldc_node_index
                    );
                }
                free(dcc_buf);
            }
            else
            {
                printf("Error allocating %d bytes\n", dcc_num_bytes);
            }
        }
    
        return 0;
    }
    
    /*
        This function send node specific tuning data to the node using the control
        command ISS_CMD_SET_DCC_PARAMS.
    */
    int32_t appDccUpdateNode(uint8_t * dcc_buf, int32_t num_bytes, vx_node node, uint32_t replicate_nodex_idx, vx_context context)
    {
        vx_status status = VX_SUCCESS;
        vx_reference refs[1];
        vx_user_data_object dcc_db_obj;
        dcc_db_obj = vxCreateUserDataObject(context, "vx_uint8", num_bytes, NULL);
        if(NULL != dcc_db_obj)
        {
            vxCopyUserDataObject(dcc_db_obj, 0, num_bytes, dcc_buf, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST);
            refs[0] = (vx_reference)dcc_db_obj;
            tivxNodeSendCommand(node, replicate_nodex_idx, ISS_CMD_SET_DCC_PARAMS, refs, 1u);
            vxReleaseUserDataObject(&dcc_db_obj);
        }
        else
        {
            printf("Error creating dcc_db_obj of size %d\n", num_bytes);
        }
        return status;
    }
    #endif //LINUX
    

    dcc_ldc_isx016.h

    Sorry, I have edited the appIssGetDCCBuffLDC function in app_iss_common.c with my sensor details, but somehow it hasn't reflected.

    Please find the latest logs after modifying app_iss_common.c file.

    root@j7-evm:/opt/vision_apps# ./single_cam.out --cfg rci_od_cam.cfg 
    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=4) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
        69.939500 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
        69.946210 s:  VX_ZONE_INIT:Enabled
        69.946235 s:  VX_ZONE_ERROR:Enabled
        69.946245 s:  VX_ZONE_WARNING:Enabled
        69.952328 s:  VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
        69.952551 s:  VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!!
    Default param set! 
    Parsed user params! 
        69.956664 s: ISS: Enumerating sensors ... !!!
    [MCU2_0]     69.956877 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_ENUMERATE 
    [MCU2_0]     69.957134 s: write 0xfe to TCA6408 register 0x3 
    [MCU2_0]     70.056305 s: UB960 config start 
    [MCU2_0]     72.552575 s: End of UB960 config 
    [MCU2_0]     72.552639 s: UB960 config start 
        72.752800 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3
        72.752812 s: ISS: Enumerating sensors ... found 1 : AR0233-UB953_MARS
        72.752833 s: ISS: Enumerating sensors ... found 2 : AR0820-UB953_LI
        72.752838 s: ISS: Enumerating sensors ... found 3 : UB9xxx_RAW12_TESTPATTERN
        72.752843 s: ISS: Enumerating sensors ... found 4 : UB96x_UYVY_TESTPATTERN
        72.752848 s: ISS: Enumerating sensors ... found 5 : GW_AR0233_UYVY
        72.752853 s: ISS: Enumerating sensors ... found 6 : ISX016_UB913A_Q1
    7 sensor(s) found 
    Supported sensor list: 
    a : IMX390-UB953_D3 
    b : AR0233-UB953_MARS 
    c : AR0820-UB953_LI 
    d : UB9xxx_RAW12_TESTPATTERN 
    e : UB96x_UYVY_TESTPATTERN 
    f : GW_AR0233_UYVY 
    g : ISX016_UB913A_Q1 
    Select a sensor above or press '0' to autodetect the sensor 
    [MCU2_0]     72.752570 s: End of UB960 config 
    g
    Sensor selected : ISX016_UB913A_Q1
    Querying ISX016_UB913A_Q1 
        73.418856 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... !!!
        73.419315 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... Done !!!
    LDC Selection Yes(1)/No(0)
    Invalid selection 
    . Try again 
    LDC Selection Yes(1)/No(0)
    [MCU2_0]     73.419061 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_QUERY 
    [MCU2_0]     73.419135 s: Received Query for ISX016_UB913A_Q1 
    1
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    Invalid selection 
    . Try again 
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    1
    Sensor params queried! 
    Updated user params! 
    Creating context done!
    Kernel loading done!
        75.158589 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_PWRON ... !!!
        75.159119 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_CONFIG ... !!!
    [MCU2_0]     75.158799 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_PWRON 
    [MCU2_0]     75.158874 s: IM_SENSOR_CMD_PWRON : channel_mask = 0x1 
    [MCU2_0]     75.158946 s: ISX016_PowerOn : chId = 0x0 
    [MCU2_0]     75.159333 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_CONFIG 
    [MCU2_0]     75.159391 s: Application requested features = 0x158 
    [MCU2_0]  
    [MCU2_0]     75.159441 s: UB960 config start 
    [MCU2_0]     75.415406 s: End of UB960 config 
    [MCU2_0]     75.415470 s: UB960 config start 
    [MCU2_0]     75.671399 s: End of UB960 config 
    [MCU2_0]     75.671600 s: UB960 config start 
    [MCU2_0]     75.675398 s: End of UB960 config 
    [MCU2_0]     75.675448 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     75.883446 s:  End of UB953 config 
    [MCU2_0]     75.884332 s: Configuring camera # 0 
    [MCU2_0]     75.884523 s: UB960 config start 
    [MCU2_0]     75.888405 s: End of UB960 config 
    [MCU2_0]     75.888458 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     76.096441 s:  End of UB953 config 
    [MCU2_0]     76.096533 s:  Configuring ISX016 imager 0x50.. Please wait till it finishes 
        76.196550 s: ISS: Initializing sensor [ISX016_UB913A_Q1] ... Done !!!
    Sensor init done!
    Capture init done!
    app_init_color_conv() : ENTERING 
    app_init_color_conv() : EXITING 
    Color Conv init done!
    [LDC-MODULE] configure_dcc_params() : ENTERING
    sensorObj->sensor_dcc_enabled:1
    sensorObj->sensor_wdr_enabled:0
    [LDC-MODULE] configure_dcc_params() : dcc_buff_size = 22512 
    [MCU2_0]     76.196305 s: IM_SENSOR_CMD_CONFIG returning status = 0 
    [LDC-MODULE] configure_dcc_params() : Created DCC config object! 
    [LDC-MODULE] configure_dcc_params() : EXITING
    LDC init done!
    Display init done!
    App Init Done! 
     app_create_graph() : ENTERING 
    Graph create done!
    Capture graph done!
    app_create_graph_color_conv() : ENTERING 
    Color convert node create started
    Color convert node create done 
    app_create_graph_color_conv() : EXITING 
    Color Conversion graph done!
    [LDC-MODULE] app_create_graph_ldc() : ENTERING 
    [LDC-MODULE] app_create_graph_ldc() : DCC config object is NOT NULL 
    after input_img
    after output_img
    before tivxVpacLdcNode
    after tivxVpacLdcNode
    [LDC-MODULE] Created LDC node with DCC config and NULL mesh_config! 
    [LDC-MODULE] app_create_graph_ldc() : EXITING 
    LDC graph done!
    Display graph done!
    Pipeline params setup done!
     app_create_graph : Exiting 
    App Create Graph Done! 
    Grapy verify SUCCESS!
    [MCU2_0]     76.255146 s:  Invalid Camera Id 390
    App Verify Graph Done! 
    ### APP DEBUG: app_run_graph() :: ENTERING 
        76.363688 s: ISS: Starting sensor [ISX016_UB913A_Q1] ... !!!
    [MCU2_0]     76.364207 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_ON 
    [MCU2_0]     76.364334 s: IM_SENSOR_CMD_STREAM_ON:  channel_mask = 0x1
    [MCU2_0]     76.364390 s: UB960 config start 
    [MCU2_0]     76.620403 s: End of UB960 config 
    [MCU2_0]     76.620468 s: UB960 config start 
    [MCU2_0]     76.876403 s: End of UB960 config 
    [MCU2_0]     76.886447 s: UB960 config start 
        76.918614 s: ISS: Starting sensor [ISX016_UB913A_Q1] ... !!!
    appStartImageSensor returned with status: 0
    
    
     ==========================================
     RCI Demo - 4-Camera Mosaic Display
     ==========================================
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: 
    
    
     ==========================================
     RCI Demo - 4-Camera Mosaic Display
     ==========================================
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: [MCU2_0]     76.918403 s: End of UB960 config 
    [MCU2_0]     76.972220 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.003041 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.004209 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.069961 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.102921 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.103952 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.138228 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.169621 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.170756 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.204945 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.236257 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.237471 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.271953 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.303432 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.336636 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.371730 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.402937 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.403964 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.438268 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.469648 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.470748 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.504954 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.536253 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.537457 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.571692 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.602918 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.603954 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.638474 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.669621 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.670760 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.704946 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.736244 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.737456 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.771939 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.802924 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.803982 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.838246 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.869639 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.870760 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.904933 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.936251 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.937448 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     77.971669 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.002911 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.003942 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.038217 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.069617 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.070750 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.104937 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.136248 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.137488 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.171682 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.202917 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.203953 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.238222 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.269905 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.270963 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.304947 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.336250 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.337454 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.371702 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.402907 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.403951 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.438236 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.469633 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.470765 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.504934 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.536279 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.537474 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.571708 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.602907 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.603954 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.638271 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.669624 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.670758 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.704925 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.736247 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.737454 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.771950 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.802919 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.803962 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.838441 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.869651 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.870743 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.904966 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.936243 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.937454 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     78.971664 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.002902 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.003989 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.038219 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.069615 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.070759 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.104945 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.136235 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.137457 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.171666 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.202900 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.203940 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.238208 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.269917 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.270967 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.304937 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.336257 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.337464 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.371683 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.402903 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.403940 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.438209 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     79.469621 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.669594 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.670628 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.704874 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.736171 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.737249 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.771900 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    x[MCU2_0]     87.802852 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.803895 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.838210 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.869598 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.870728 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.904863 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.936177 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.937269 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     87.971618 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.002843 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.003875 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.038183 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    
    
    [MCU2_0]     88.069600 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.070721 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.104874 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     88.136098 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
        88.149072 s: ISS: Stopping sensor [ISX016_UB913A_Q1] ... !!!
    [MCU2_0]     88.149277 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_OFF 
    [MCU2_0]     88.149392 s: IM_SENSOR_CMD_STREAM_ON:  channel_mask = 0x1
    [MCU2_0]     88.159309 s: UB960 config start 
        88.191604 s: ISS: Stopping sensor [ISX016_UB913A_Q1] ... Done !!!
    ### APP DEBUG: app_run_graph() :: EXITING 
    [MCU2_0]     88.191403 s: End of UB960 config 
    App Run Graph Done! 
    Capture delete done!
    Color Conv delete done!
    LDC delete done!
    Display delete done!
    [MCU2_0]     88.273864 s: ==========================================================
    [MCU2_0]     88.273956 s:  Capture Status: Instance|0
    [MCU2_0]     88.273991 s: ==========================================================   +-----------------------------+
    [MCU2_0]     88.274037 s:  overflowCount: 0                                            |                             |
    [MCU2_0]     88.274072 s:  spuriousUdmaIntrCount: 0                                    |  Cannot open /dev/ttyUSB0!  |
    [MCU2_0]     88.274107 s:  frontFIFOOvflCount: 0                                       |                             |
    [MCU2_0]     88.274140 s:  crcCount: 1                                                 +-----------------------------+
    [MCU2_0]     88.274169 s:  eccCount: 0
    [MCU2_0]     88.274201 s:  correctedEccCount: 0
    [MCU2_0]     88.274234 s:  dataIdErrorCount: 0
    [MCU2_0]     88.274268 s:  invalidAccessCount: 0
    [MCU2_0]     88.274361 s:  invalidSpCount: 0
    [MCU2_0]     88.274408 s:  strmFIFOOvflCount[0]: 0
    [MCU2_0]     88.274440 s:  Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count |
    [MCU2_0]     88.274520 s:            0 |               669 |                  669 |                3 |                 0 |
    Graph delete done!
    App Delete Graph Done! 
        88.282699 s: ISS: De-initializing sensor [ISX016_UB913A_Q1] ... !!!
        88.283012 s: ISS: De-initializing sensor [ISX016_UB913A_Q1] ... Done !!!
    Sensor deinit done!
    Capture deinit done!
    Color Conv deinit done!
    LDC deinit done!
    Display deinit done!
    Kernels unload done!
        88.766028 s:  VX_ZONE_WARNING:[vxReleaseContext:1050] Found a reference 0xffff970a0c08 of type 00000804 at external count 1, internal count 1, releasing it
        88.766037 s:  VX_ZONE_WARNING:[vxReleaseContext:1052] Releasing reference (name=com.ti.color_conv_kernel.color_conv_example) now as a part of garbage collection
        88.766044 s:  VX_ZONE_WARNING:[vxReleaseContext:1061] A kernel with name com.ti.color_conv_kernel.color_conv_example has not been removed, possibly due to a kernel module not being unloaded.
        88.766051 s:  VX_ZONE_WARNING:[vxReleaseContext:1062] Removing as a part of garbage collection
        88.766060 s:  VX_ZONE_WARNING:[vxReleaseContext:1050] Found a reference 0xffff970fcc60 of type 0000080f at external count 1, internal count 0, releasing it
        88.766067 s:  VX_ZONE_WARNING:[vxReleaseContext:1052] Releasing reference (name=image_101) now as a part of garbage collection
    Release context done!
    App De-init Done! 
        88.766118 s:  VX_ZONE_INIT:[tivxHostDeInitLocal:100] De-Initialization Done for HOST !!!
        88.770499 s:  VX_ZONE_INIT:[tivxDeInitLocal:193] De-Initialization Done !!!
    APP: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... Done !!!
    IPC: Deinit ... !!!
    IPC: DeInit ... Done !!!
    MEM: Deinit ... !!!
    MEM: Alloc's: 18 alloc's of 22058196 bytes 
    MEM: Free's : 18 free's  of 22058196 bytes 
    MEM: Open's : 0 allocs  of 0 bytes 
    MEM: Deinit ... Done !!!
    APP: Deinit ... Done !!!
    root@j7-evm:/opt/vision_apps# 

    The output on display monitor is fisheye image only with pinkish pixels overlayed,

    Regards,

    Chaitanya Prakash Uppala

  • Hi Prakash,

    check this error "[MCU2_0]     76.255146 s:  Invalid Camera Id 390" some wrong params, check the sensor_dcc_id param.

    "[MCU2_0]     76.972220 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor" this could be caused by wrong ldcObj->config or input/output image is given wrong while creating the node. check this once

    Regards,
    Gokul

  • Hi Gokul,

    "[MCU2_0]     76.255146 s:  Invalid Camera Id 390"

    I have searched for this line in SDK to know from which file this line was printing on log, but couldn't able to find. 

    I have resolved this error. 

    "[MCU2_0]     76.972220 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor" this could be caused by wrong ldcObj->config or input/output image is given wrong while creating the node. check this once

    I have added debug statements above tivxVpacLdcNode as shown below.

    if (input_img == NULL){
    printf("ERROR: LDC input image is NULL\n");
    return VX_FAILURE;
    }
    if(output_img == NULL){
    printf("ERROR: LDC output image is NULL\n");
    return VX_FAILURE;
    }
    if (ldcObj->config == NULL) {
    printf("ERROR: ldcObj->config is NULL\n");
    return VX_FAILURE;
    }

    if (ldcObj->dcc_config == NULL) {
    printf("ERROR: ldcObj->dcc_config is NULL\n");
    return VX_FAILURE;
    }
    else {
    printf("LDC configuration objects are valid: ldcObj->config=%p, ldcObj->dcc_config=%p\n", ldcObj->config, ldcObj->dcc_config);
    }

    Please find the logs attached below.

    root@j7-evm:/opt/vision_apps# ./single_cam.out --cfg rci_od_cam.cfg 
    APP: Init ... !!!
    MEM: Init ... !!!
    MEM: Initialized DMA HEAP (fd=4) !!!
    MEM: Init ... Done !!!
    IPC: Init ... !!!
    IPC: Init ... Done !!!
    REMOTE_SERVICE: Init ... !!!
    REMOTE_SERVICE: Init ... Done !!!
        45.972061 s: GTC Frequency = 200 MHz
    APP: Init ... Done !!!
        45.978577 s:  VX_ZONE_INIT:Enabled
        45.978597 s:  VX_ZONE_ERROR:Enabled
        45.978609 s:  VX_ZONE_WARNING:Enabled
        45.984450 s:  VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!!
        45.984644 s:  VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!!
    Default param set! 
    Parsed user params! 
        45.988809 s: ISS: Enumerating sensors ... !!!
    [MCU2_0]     45.989023 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_ENUMERATE 
    [MCU2_0]     45.989288 s: write 0xfe to TCA6408 register 0x3 
    [MCU2_0]     46.088522 s: UB960 config start 
    [MCU2_0]     48.584786 s: End of UB960 config 
    [MCU2_0]     48.584849 s: UB960 config start 
        48.785018 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3
        48.785037 s: ISS: Enumerating sensors ... found 1 : AR0233-UB953_MARS
        48.785057 s: ISS: Enumerating sensors ... found 2 : AR0820-UB953_LI
        48.785062 s: ISS: Enumerating sensors ... found 3 : UB9xxx_RAW12_TESTPATTERN
        48.785067 s: ISS: Enumerating sensors ... found 4 : UB96x_UYVY_TESTPATTERN
        48.785072 s: ISS: Enumerating sensors ... found 5 : GW_AR0233_UYVY
        48.785076 s: ISS: Enumerating sensors ... found 6 : ISX016_UB913A_Q1
    7 sensor(s) found 
    Supported sensor list: 
    a : IMX390-UB953_D3 
    b : AR0233-UB953_MARS 
    c : AR0820-UB953_LI 
    d : UB9xxx_RAW12_TESTPATTERN 
    e : UB96x_UYVY_TESTPATTERN 
    f : GW_AR0233_UYVY 
    g : ISX016_UB913A_Q1 
    Select a sensor above or press '0' to autodetect the sensor 
    [MCU2_0]     48.784783 s: End of UB960 config 
    g
    Sensor selected : ISX016_UB913A_Q1
    Querying ISX016_UB913A_Q1 
        49.458193 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... !!!
        49.458699 s: ISS: Querying sensor [ISX016_UB913A_Q1] ... Done !!!
    LDC Selection Yes(1)/No(0)
    Invalid selection 
    . Try again 
    LDC Selection Yes(1)/No(0)
    [MCU2_0]     49.458391 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_QUERY 
    [MCU2_0]     49.458465 s: Received Query for ISX016_UB913A_Q1 
    1
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    Invalid selection 
    . Try again 
    Max number of cameras supported by sensor ISX016_UB913A_Q1 = 4 
    Please enter number of cameras to be enabled 
    1
    Sensor params queried! 
    Updated user params! 
    Creating context done!
    Kernel loading done!
        50.640523 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_PWRON ... !!!
        50.641051 s: ISS: Initializing sensor [ISX016_UB913A_Q1], doing IM_SENSOR_CMD_CONFIG ... !!!
    [MCU2_0]     50.640728 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_PWRON 
    [MCU2_0]     50.640803 s: IM_SENSOR_CMD_PWRON : channel_mask = 0x1 
    [MCU2_0]     50.640874 s: ISX016_PowerOn : chId = 0x0 
    [MCU2_0]     50.641223 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_CONFIG 
    [MCU2_0]     50.641273 s: Application requested features = 0x158 
    [MCU2_0]  
    [MCU2_0]     50.641324 s: UB960 config start 
    [MCU2_0]     50.896616 s: End of UB960 config 
    [MCU2_0]     50.896680 s: UB960 config start 
    [MCU2_0]     51.152614 s: End of UB960 config 
    [MCU2_0]     51.152819 s: UB960 config start 
    [MCU2_0]     51.156616 s: End of UB960 config 
    [MCU2_0]     51.156670 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     51.364655 s:  End of UB953 config 
    [MCU2_0]     51.365547 s: Configuring camera # 0 
    [MCU2_0]     51.365736 s: UB960 config start 
    [MCU2_0]     51.369614 s: End of UB960 config 
    [MCU2_0]     51.369667 s: ub953 config start : slaveAddr = 0xb0 
    [MCU2_0]     51.577653 s:  End of UB953 config 
    [MCU2_0]     51.577745 s:  Configuring ISX016 imager 0x50.. Please wait till it finishes 
        51.677759 s: ISS: Initializing sensor [ISX016_UB913A_Q1] ... Done !!!
    Sensor init done!
    Capture init done!
    app_init_color_conv() : ENTERING 
    app_init_color_conv() : EXITING 
    Color Conv init done!
    [LDC-MODULE] configure_dcc_params() : ENTERING
    sensorObj->sensor_dcc_enabled:1
    In conf_dcc_params sensorParams.dccId:160
    sensorObj->sensor_wdr_enabled:0
    [LDC-MODULE] configure_dcc_params() : dcc_buff_size = 22512 
    [MCU2_0]     51.677520 s: IM_SENSOR_CMD_CONFIG returning status = 0 
    [LDC-MODULE] configure_dcc_params() : Created DCC config object! 
    [LDC-MODULE] configure_dcc_params() : EXITING
    sensorParams.dccId:160
    LDC init done!
    Display init done!
    App Init Done! 
     app_create_graph() : ENTERING 
    Graph create done!
    Capture graph done!
    app_create_graph_color_conv() : ENTERING 
    Color convert node create started
    Color convert node create done 
    app_create_graph_color_conv() : EXITING 
    Color Conversion graph done!
    [LDC-MODULE] app_create_graph_ldc() : ENTERING 
    [LDC-MODULE] app_create_graph_ldc() : DCC config object is NOT NULL 
    after input_img
    after output_img
    before tivxVpacLdcNode
    LDC configuration objects are valid: ldcObj->config=0xffffb0f3a900, ldcObj->dcc_config=0xffffb0f3a2a0
    after tivxVpacLdcNode
    [LDC-MODULE] Created LDC node with DCC config and NULL mesh_config! 
    [LDC-MODULE] app_create_graph_ldc() : EXITING 
    LDC graph done!
    Display graph done!
    Pipeline params setup done!
     app_create_graph : Exiting 
    App Create Graph Done! 
    Grapy verify SUCCESS!
    App Verify Graph Done! 
    ### APP DEBUG: app_run_graph() :: ENTERING 
        51.855630 s: ISS: Starting sensor [ISX016_UB913A_Q1] ... !!!
    [MCU2_0]     51.856150 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_ON 
    [MCU2_0]     51.856235 s: IM_SENSOR_CMD_STREAM_ON:  channel_mask = 0x1
    [MCU2_0]     51.856281 s: UB960 config start 
    [MCU2_0]     52.111616 s: End of UB960 config 
    [MCU2_0]     52.111684 s: UB960 config start 
    [MCU2_0]     52.367617 s: End of UB960 config 
    [MCU2_0]     52.377664 s: UB960 config start 
        52.409832 s: ISS: Starting sensor [ISX016_UB913A_Q1] ... !!!
    appStartImageSensor returned with status: 0
    
    
     ==========================================
     RCI Demo - 4-Camera Mosaic Display
     ==========================================
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: 
    
    
     ==========================================
     RCI Demo - 4-Camera Mosaic Display
     ==========================================
    
     p: Print performance statistics
    
     x: Exit
    
     Enter Choice: [MCU2_0]     52.409623 s: End of UB960 config 
    [MCU2_0]     93.483431 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.517771 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.549002 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.550042 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.584177 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.615826 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.616881 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.650945 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.682340 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.683434 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.717756 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.749002 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.750041 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.784686 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.815827 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.816916 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.850925 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.882322 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.883406 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.917783 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.948966 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.950010 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     93.984158 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.015803 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.016844 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.050926 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.082297 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.083427 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.117750 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.148969 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.150005 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.184137 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.215790 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.216837 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.250915 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    x[MCU2_0]     94.282741 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.283806 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.317715 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.348961 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.349991 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.384148 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.415787 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.416832 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.450947 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.482322 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.483404 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.517764 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.549001 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.550037 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.584177 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.615785 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.616830 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.650956 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.682317 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.683406 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.717747 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.748994 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.750017 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.784686 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    
    
    [MCU2_0]     94.815786 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
    [MCU2_0]     94.816756 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor
        94.858967 s: ISS: Stopping sensor [ISX016_UB913A_Q1] ... !!!
    [MCU2_0]     94.859203 s: ImageSensor_RemoteServiceHandler: IM_SENSOR_CMD_STREAM_OFF 
    [MCU2_0]     94.859289 s: IM_SENSOR_CMD_STREAM_ON:  channel_mask = 0x1
    [MCU2_0]     94.869523 s: UB960 config start 
        94.901820 s: ISS: Stopping sensor [ISX016_UB913A_Q1] ... Done !!!
    ### APP DEBUG: app_run_graph() :: EXITING 
    [MCU2_0]     94.901617 s: End of UB960 config 
    App Run Graph Done! 
    Capture delete done!
    Color Conv delete done!
    LDC delete done!
    Display delete done!
    [MCU2_0]    139.837222 s: ==========================================================
    [MCU2_0]    139.837313 s:  Capture Status: Instance|0
    [MCU2_0]    139.837348 s: ==========================================================
    [MCU2_0]    139.837394 s:  overflowCount: 0
    [MCU2_0]    139.837428 s:  spuriousUdmaIntrCount: 0                                                                   
    [MCU2_0]    139.837463 s:  frontFIFOOvflCount: 0                                                                      
    [MCU2_0]    139.837495 s:  crcCount: 0                                                                                
    [MCU2_0]    139.837525 s:  eccCount: 0                                                                                
    [MCU2_0]    139.837555 s:  correctedEccCount: 0                                                                       
    [MCU2_0]    139.837588 s:  dataIdErrorCount: 0
    [MCU2_0]    139.837621 s:  invalidAccessCount: 0
    [MCU2_0]    139.837654 s:  invalidSpCount: 0
    [MCU2_0]    139.837692 s:  strmFIFOOvflCount[0]: 0
    [MCU2_0]    139.837723 s:  Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count |
    [MCU2_0]    139.837800 s:            0 |              1845 |                 1845 |                2 |                 0 |
    Graph delete done!
    App Delete Graph Done! 
       139.853165 s: ISS: De-initializing sensor [ISX016_UB913A_Q1] ... !!!
       139.853473 s: ISS: De-initializing sensor [ISX016_UB913A_Q1] ... Done !!!
    Sensor deinit done!
    Capture deinit done!
    Color Conv deinit done!
    LDC deinit done!
    Display deinit done!
    Kernels unload done!
       140.186562 s:  VX_ZONE_WARNING:[vxReleaseContext:1050] Found a reference 0xffffa94a0c08 of type 00000804 at external count 1, internal count 1, releasing it
       140.186570 s:  VX_ZONE_WARNING:[vxReleaseContext:1052] Releasing reference (name=com.ti.color_conv_kernel.color_conv_example) now as a part of garbage collection
       140.186577 s:  VX_ZONE_WARNING:[vxReleaseContext:1061] A kernel with name com.ti.color_conv_kernel.color_conv_example has not been removed, possibly due to a kernel module not being unloaded.
       140.186584 s:  VX_ZONE_WARNING:[vxReleaseContext:1062] Removing as a part of garbage collection
       140.186593 s:  VX_ZONE_WARNING:[vxReleaseContext:1050] Found a reference 0xffffa94fcc60 of type 0000080f at external count 1, internal count 0, releasing it
       140.186599 s:  VX_ZONE_WARNING:[vxReleaseContext:1052] Releasing reference (name=image_101) now as a part of garbage collection
    Release context done!
    App De-init Done! 
       140.186647 s:  VX_ZONE_INIT:[tivxHostDeInitLocal:100] De-Initialization Done for HOST !!!
       140.191007 s:  VX_ZONE_INIT:[tivxDeInitLocal:193] De-Initialization Done !!!
    APP: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... !!!
    REMOTE_SERVICE: Deinit ... Done !!!
    IPC: Deinit ... !!!
    IPC: DeInit ... Done !!!
    MEM: Deinit ... !!!
    MEM: Alloc's: 18 alloc's of 22058196 bytes 
    MEM: Free's : 18 free's  of 22058196 bytes 
    MEM: Open's : 0 allocs  of 0 bytes 
    MEM: Deinit ... Done !!!
    APP: Deinit ... Done !!!
    root@j7-evm:/opt/vision_apps# 

    input_img, output_img, ldcObj->config  and ldcObj->dcc_config  are not null. But, still getting the VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor error.

    Regards,

    Chaitanya Prakash Uppala

  • Hello Gokul,

    The 

    "[MCU2_0]     76.972220 s:  VX_ZONE_ERROR:[tivxVpacLdcProcess:232] Invalid Descriptor" this could be caused by wrong ldcObj->config or input/output image is given wrong while creating the node. check this once

    This error is also resolved. Thanks for your support.

    Kindly answer the below query.

    void print_image_info(vx_image image)
    {
    vx_size width = 0, height = 0;
    vx_df_image format;
    vxQueryImage(image, VX_IMAGE_FORMAT, &format, sizeof(format));
    vxQueryImage(image, VX_IMAGE_WIDTH, &width, sizeof(width));
    vxQueryImage(image, VX_IMAGE_HEIGHT, &height, sizeof(height));
    printf("Image width: %zu, height: %zu\n", width, height);
    printf("Image Format: 0x%X\n", format);
    }

    I have added the above function in ldc_module.c file and passing input_img and output_img as params to that function as shown below.

    vx_image input_img = (vx_image)vxGetObjectArrayItem(input_arr, 0);
    if (input_img == NULL){
    printf("ERROR: LDC input image is NULL\n");
    return VX_FAILURE;
    }
    printf("after input_img\n");
    print_image_info(input_img);

    Note: Same snippet with replacement of output_img is done for output_img.

    When ran on board the logs were as shown below. The application was working fine and no errors have been observed apart from these and rectilinear output was displayed on monitor.

    after input_img
    50.997287 s: VX_ZONE_ERROR:[vxQueryImage:1560] query image width failed
    50.997296 s: VX_ZONE_ERROR:[vxQueryImage:1571] query image height failed
    Image width: 0, height: 0
    Image Format: 0x59565955
    after output_img
    50.997313 s: VX_ZONE_ERROR:[vxQueryImage:1560] query image width failed
    50.997319 s: VX_ZONE_ERROR:[vxQueryImage:1571] query image height failed
    Image width: 0, height: 0
    Image Format: 0x3231564E

    if querying of image properties gets failed, how the application is working with expected output?

    Regards,

    Chaitanya Prakash Uppala

  • Hi Chaitanya Prakash Uppala,

    querying of image properties gets failed

    git.ti.com/.../app_single_cam_common.c

    I see that vx_uint32 is used for width and height everywhere.
    You may try that as well.

  • Hello Gang,

    I see that vx_uint32 is used for width and height everywhere.
    You may try that as well.

    Thanks for the input.

    Fisheye to rectilinear conversion for single camera using dcc_config  has been achieved.

    Could you please guide me on how to achieve the same for multi cameras.

    Because already dcc_config bins and xmls for one camera were present in imaging, how to add for multiple cameras?

    Regards,

    Chaitanya Prakash Uppala

  • Hi Chaitanya,

    Because already dcc_config bins and xmls for one camera were present in imaging, how to add for multiple cameras?

    Multi-cam app already supports LDC with DCC binary input.
    Please refer to the source code below for your reference.

    https://git.ti.com/cgit/processor-sdk/vision_apps/tree/apps/basic_demos/app_multi_cam?h=main

  • Hello Gang,

    I have gone through multi cam application. In this single dcc_config is used for all four cameras if i'm not wrong.

    My use case was as described below.

    There is a vehicle (integrated with cameras) (right,left,front and rear positions), I have generated bin and xmls files using DCC tool for each respective camera.

    Using generate_dcc.h script I have generated C header file for front camera and using ldcObj->dcc_config method I have generated and validated a single camera application.

    Now my extension is to four cameras. During run time, left camera should take corresponding generated dcc with Left camera parameters. Similarly, for rest of the cameras.

    i would like to know whether this is possible to achieve. If yes, how to accomplish this.

    Thanks and Regards,

    Chaitanya Prakash Uppala 

  • Hi Chaitanya,

    Now my extension is to four cameras. During run time, left camera should take corresponding generated dcc with Left camera parameters. Similarly, for rest of the cameras.

    i would like to know whether this is possible to achieve. If yes, how to accomplish this.

    That should be possible, e.g., each VISS kernel may have its own DCC input.
    My friend shall be able to help you as I am not familiar with these openvx S/W details.

  • Okay.Thank you.

    Will be waiting for Gokul message.

    Regards,

    Chaitanya Prakash Uppala 

  • Hi Prakash,

     Refer this fucntion appDccUpdatefromFS() inside which will be inside app_single_cam_main.c to update dcc params during runtime.

    refer the definition of this function appDccUpdatefromFS() inside app_iss_common.c

    this function load the dcc config binary from file and sends to the node using tivxNodeSendCommand() api

    pass the ldc_node_obj to update ldc config and for rest pass NULL. and parameter ldc_node_index is the node index to update the dcc config

    since 4 cameras are used 4 nodes of ldc is created, each camera will be mapped to a node_index use that to update config for that specific camera

    Regards,
    Gokul

  • Hi Gokul,

    Based on your input. I have modified the application as described below. 

    In main.c 

    1)app_update_dcc_params(obj->context,&obj->ldcObj,&obj->sensorObj, dcc_filenames, obj->sensorObj.num_cameras_enabled); //added this in app_init function under app_init_ldc function call.

    2)const char *dcc_filenames[] = {
    "/opt/vision_apps/dcc/ISX016/linear/front_camera_dcc.bin",
    "/opt/vision_apps/dcc/ISX016/linear/left_camera_dcc.bin",
    "/opt/vision_apps/dcc/ISX016/linear/right_camera_dcc.bin",
    "/opt/vision_apps/dcc/ISX016/linear/rear_camera_dcc.bin"
    }; //declared as global

    In app_ldc_module.c

    1)Added the below function definition.

    void app_update_dcc_params(vx_context context,LDCObj *ldcObj,SensorObj *sensorObj, const char *dcc_filenames[], vx_int32 num_cameras){

    for (int i = 0; i < num_cameras; i++)
    {
    vx_status status = appDccUpdatefromFS(sensorObj->sensor_name, sensorObj->sensor_wdr_enabled,
    NULL, 0,
    NULL, 0,
    ldcObj->node, i,
    context);
    if (status == VX_SUCCESS)
    {
    printf("DCC parameters updated successfully from %s for camera %d\n", dcc_filenames[i], i);
    }
    else
    {
    printf("Error: Failed to update DCC parameters from %s for camera %d\n", dcc_filenames[i], i);
    }
    }
    }

    2) Added function declaration in app_ldc_module.h

    void app_update_dcc_params(vx_context context,LDCObj *ldcObj,SensorObj *sensorObj, const char *dcc_filenames[], vx_int32 num_cameras);

    Kindly let me know whether this approach yields me to my required output. 

    Also, confirm me whether I need to comment out configure_dcc_params in app_init_ldc function as I'm updating dcc in app_update_dcc_params function.

    Regards,

    Chaitanya Prakash Uppala

  • Hi Prakash,

    Look inside the definition of appDccUpdatefromFS() it loads dcc binary file based on the sensor_name you pass, so give the sensor name accordingly.

    Your code will update same dcc config binary file for all the ldc nodes.

    Also, confirm me whether I need to comment out configure_dcc_params in app_init_ldc function as I'm updating dcc in app_update_dcc_params function.

    no need to comment out configure_dcc_params.

    Regards,
    Gokul

  • Hi Gokul,

    Your code will update same dcc config binary file for all the ldc nodes.

    But this is not the usecase of mine right.

    Now my extension is to four cameras. During run time, left camera should take corresponding generated dcc with Left camera parameters. Similarly, for rest of the cameras.

    As each camera(left,right,front and rear) are mounted at different angles with vehicle, LUT files are unique for each camera(left,right,front and rear). So 4 different bin files will be generated.

    Using the single bin file, may result conversion to all four cameras but not as accurate, since LUT values are varied.

    Hoping my usecase is clear to you. Let me know if not. Kindly provide your insights on this usecase.

    Regards,

    Chaitanya Prakash Uppala 

  • Hi Prakash,

    Your code will update same dcc config binary file for all the ldc nodes.

    I have told what your code does, Yes it is not matching your usecase (the code that you sent).

    Look inside the definition of appDccUpdatefromFS() it loads dcc binary file based on the sensor_name you pass, so give the sensor name accordingly.

    I have asked to pass different binary file to different camera by using the sensor_name argument of appDccUpdatefromFS() so that each node will be updated with different binaries. Pass the sensor name from dcc_filenames like "front_camera_dcc" as the sensor_name and for every iteration pass the corresponding file name as sensor_name.
    Look into the definition of this function appDccUpdatefromFS() to see how binaries are loaded from file based on the sensnor_name input.
    Based on that modify the file names in dcc_filenames.

    Hope this clarifies your question

    Regards,
    Gokul