Tool/software:
Hello
I am trying to run 3D Surround View Application. When executing the command './app_run_srv.sh' after 'source ./vision_apps_init.sh', the screen displays as follows, pressing 'x' cannot exit, and the log is as follows.
root@j7-evm:/opt/vision_apps# ./run_app_srv.sh 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 !!! 62.259812 s: GTC Frequency = 200 MHz APP: Init ... Done !!! 62.265818 s: VX_ZONE_INIT:Enabled 62.265846 s: VX_ZONE_ERROR:Enabled 62.265856 s: VX_ZONE_WARNING:Enabled 62.266673 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!! 62.266734 s: VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!! 62.335234 s: ISS: Enumerating sensors ... !!! 62.835673 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3 62.835732 s: ISS: Enumerating sensors ... found 1 : SG2-IMX390C-5200-FPDLINK 62.835738 s: ISS: Enumerating sensors ... found 2 : AR0233-UB953_MARS 62.835743 s: ISS: Enumerating sensors ... found 3 : AR0820-UB953_LI 62.835748 s: ISS: Enumerating sensors ... found 4 : UB9xxx_RAW12_TESTPATTERN 62.835753 s: ISS: Enumerating sensors ... found 5 : UB96x_UYVY_TESTPATTERN 62.835757 s: ISS: Enumerating sensors ... found 6 : GW_AR0233_UYVY Sensor selected : SG2-IMX390C-5200-FPDLINK 62.835782 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 62.836517 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! ----------------capture node done----------- ----------------------dcc_config------------------ ----------------------ldc_config------------------ dcc->config nonempty ----------------ldc node done----------- Reading calmat file file read completed ----------------gpu_lut node done----------- EGL: version 1.5 ========================== Demo : Integrated SRV ========================== p: Print performance statistics e: Export performance statistics x: Exit Enter Choice: -----------------run graph-------------------- 63.262622 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 63.902490 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! x
My multi camera application can be displayed normally, and srv demo can run after multi camera application .
root@j7-evm:/opt/vision_apps# ./run_app_multi_cam.sh 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 !!! 63.869067 s: GTC Frequency = 200 MHz APP: Init ... Done !!! 63.874843 s: VX_ZONE_INIT:Enabled 63.874857 s: VX_ZONE_ERROR:Enabled 63.874862 s: VX_ZONE_WARNING:Enabled 63.875627 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!! 63.875680 s: VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!! 63.882484 s: ISS: Enumerating sensors ... !!! 64.383247 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3 64.383277 s: ISS: Enumerating sensors ... found 1 : SG2-IMX390C-5200-FPDLINK 64.383298 s: ISS: Enumerating sensors ... found 2 : AR0233-UB953_MARS 64.383304 s: ISS: Enumerating sensors ... found 3 : AR0820-UB953_LI 64.383309 s: ISS: Enumerating sensors ... found 4 : UB9xxx_RAW12_TESTPATTERN 64.383314 s: ISS: Enumerating sensors ... found 5 : UB96x_UYVY_TESTPATTERN 64.383319 s: ISS: Enumerating sensors ... found 6 : GW_AR0233_UYVY 7 sensor(s) found Supported sensor list: a : IMX390-UB953_D3 b : SG2-IMX390C-5200-FPDLINK c : AR0233-UB953_MARS d : AR0820-UB953_LI e : UB9xxx_RAW12_TESTPATTERN f : UB96x_UYVY_TESTPATTERN g : GW_AR0233_UYVY Select a sensor above or press '0' to autodetect the sensor b Sensor selected : SG2-IMX390C-5200-FPDLINK Querying SG2-IMX390C-5200-FPDLINK 67.554080 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 67.554434 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! LDC Selection Yes(1)/No(0) 1 Max number of cameras supported by sensor SG2-IMX390C-5200-FPDLINK = 4 Please enter number of cameras to be enabled 4 WDR mode is not supported. Defaulting to linear Sensor DCC is enabled Sensor width = 1920 Sensor height = 1080 Sensor DCC ID = 6100 Sensor Supported Features = 0x00000100 Sensor Enabled Features = 0x00000120 YUV Input selected. VISS, AEWB and Mosaic nodes will be bypassed. Creating context done! Kernel loading done! 72.971480 s: ISS: Initializing sensor [SG2-IMX390C-5200-FPDLINK], doing IM_SENSOR_CMD_PWRON ... !!! 72.971869 s: ISS: Initializing sensor [SG2-IMX390C-5200-FPDLINK], doing IM_SENSOR_CMD_CONFIG ... !!! [MCU2_0] 73.615858 s: ===ub953_cfgScript chId=0 i2cAddrSer=74 [MCU2_0] 74.108859 s: ===ub953_cfgScript chId=1 i2cAddrSer=76 [MCU2_0] 74.601862 s: ===ub953_cfgScript chId=2 i2cAddrSer=78 [MCU2_0] 75.094862 s: ===ub953_cfgScript chId=3 i2cAddrSer=7a 75.456070 s: ISS: Initializing sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! Sensor init done! captureObj->params.numDataLanes = 4 captureObj->params.dataLanesMap[0] = 1 captureObj->params.dataLanesMap[1] = 2 captureObj->params.dataLanesMap[2] = 3 captureObj->params.dataLanesMap[3] = 4 sensorObj->sensor_dcc_enabled=1 sensorObj->sensor_name=SG2-IMX390C-5200-FPDLINK sensorObj->sensor_wdr_enabled=0 sensorObj->sensorParams.dccId=6100 LDC init done! Img Mosaic init done! Display init done! App Init Done! Graph create done! Capture graph done! dcc->config nonempty LDC graph done! Img Mosaic graph done! Display graph done! Pipeline params setup done! App Create Graph Done! Graph verify done! App Verify Graph Done! App Send Error Frame Done! app_pipeline_params_defaults returned 75.605516 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 76.246069 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! appStartImageSensor returned with status: 0 ========================= Demo : Camera Demo ========================= s: Save CSIx, VISS and LDC outputs p: Print performance statistics x: Exit Enter Choice: ========================= Demo : Camera Demo ========================= s: Save CSIx, VISS and LDC outputs p: Print performance statistics x: Exit Enter Choice: [MCU2_0] 76.246639 s: VX_ZONE_WARNING:[tivxCaptureSetTimeout:786] CAPTURE: WARNING: Error frame not provided using tivxCaptureRegisterErrorFrame, defaulting to waiting forever !!! x 79.809641 s: ISS: Stopping sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 79.938061 s: ISS: Stopping sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! App Run Graph Done! Capture delete done! VISS delete done! AEWB delete done! LDC delete done! Img Mosaic delete done! Display delete done! [MCU2_0] 80.018893 s: ========================================================== [MCU2_0] 80.018988 s: Capture Status: Instance|0 [MCU2_0] 80.019025 s: ========================================================== [MCU2_0] 80.019074 s: overflowCount: 0 [MCU2_0] 80.019110 s: spuriousUdmaIntrCount: 0 [MCU2_0] 80.019146 s: frontFIFOOvflCount: 0 [MCU2_0] 80.019181 s: crcCount: 0 [MCU2_0] 80.019213 s: eccCount: 0 [MCU2_0] 80.019246 s: correctedEccCount: 0 [MCU2_0] 80.019280 s: dataIdErrorCount: 0 [MCU2_0] 80.019318 s: invalidAccessCount: 0 [MCU2_0] 80.019353 s: invalidSpCount: 0 [MCU2_0] 80.019393 s: strmFIFOOvflCount[0]: 0 [MCU2_0] 80.019426 s: Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count | [MCU2_0] 80.019505 s: 0 | 107 | 107 | 1 | 0 | [MCU2_0] 80.019583 s: 1 | 107 | 107 | 2 | 0 | [MCU2_0] 80.019660 s: 2 | 107 | 107 | 2 | 0 | [MCU2_0] 80.019738 s: 3 | 107 | 107 | 1 | 0 | Graph delete done! App Delete Graph Done! 80.026703 s: ISS: De-initializing sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 80.027060 s: ISS: De-initializing sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! Sensor deinit done! Capture deinit done! LDC deinit done! Img Mosaic deinit done! Display deinit done! Kernels unload done! Release context done! App De-init Done! 80.028474 s: VX_ZONE_INIT:[tivxHostDeInitLocal:100] De-Initialization Done for HOST !!! 80.032867 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 ... !!! DDR_SHARED_MEM: Alloc's: 44 alloc's of 129104960 bytes DDR_SHARED_MEM: Free's : 44 free's of 129104960 bytes DDR_SHARED_MEM: Open's : 0 allocs of 0 bytes DDR_SHARED_MEM: Total size: 536870912 bytes MEM: Deinit ... Done !!! APP: Deinit ... Done !!! root@j7-evm:/opt/vision_apps# ./run_app_srv.sh 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 !!! 90.726271 s: GTC Frequency = 200 MHz APP: Init ... Done !!! 90.726347 s: VX_ZONE_INIT:Enabled 90.726354 s: VX_ZONE_ERROR:Enabled 90.726360 s: VX_ZONE_WARNING:Enabled 90.728107 s: VX_ZONE_INIT:[tivxInitLocal:130] Initialization Done !!! 90.728302 s: VX_ZONE_INIT:[tivxHostInitLocal:86] Initialization Done for HOST !!! 90.777661 s: ISS: Enumerating sensors ... !!! 91.178254 s: ISS: Enumerating sensors ... found 0 : IMX390-UB953_D3 91.178284 s: ISS: Enumerating sensors ... found 1 : SG2-IMX390C-5200-FPDLINK 91.178302 s: ISS: Enumerating sensors ... found 2 : AR0233-UB953_MARS 91.178308 s: ISS: Enumerating sensors ... found 3 : AR0820-UB953_LI 91.178313 s: ISS: Enumerating sensors ... found 4 : UB9xxx_RAW12_TESTPATTERN 91.178318 s: ISS: Enumerating sensors ... found 5 : UB96x_UYVY_TESTPATTERN 91.178323 s: ISS: Enumerating sensors ... found 6 : GW_AR0233_UYVY Sensor selected : SG2-IMX390C-5200-FPDLINK 91.178346 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 91.178671 s: ISS: Querying sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! ----------------capture node done----------- ----------------------dcc_config------------------ ----------------------ldc_config------------------ dcc->config nonempty ----------------ldc node done----------- Reading calmat file file read completed ----------------gpu_lut node done----------- EGL: version 1.5 ========================== Demo : Integrated SRV ========================== p: Print performance statistics e: Export performance statistics x: Exit Enter Choice: -----------------run graph-------------------- 91.601389 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 92.241082 s: ISS: Starting sensor [SG2-IMX390C-5200-FPDLINK] ... !!! x 97.090318 s: ISS: Stopping sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 97.218045 s: ISS: Stopping sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! 97.218179 s: VX_ZONE_ERROR:[ownReleaseReferenceInt:307] Invalid reference 97.218794 s: VX_ZONE_ERROR:[ownReleaseReferenceInt:307] Invalid reference 97.218804 s: VX_ZONE_ERROR:[ownReleaseReferenceInt:307] Invalid reference 97.218810 s: VX_ZONE_ERROR:[ownReleaseReferenceInt:307] Invalid reference [MCU2_0] 97.221894 s: ========================================================== [MCU2_0] 97.221989 s: Capture Status: Instance|0 [MCU2_0] 97.222027 s: ========================================================== [MCU2_0] 97.222076 s: overflowCount: 0 [MCU2_0] 97.222112 s: spuriousUdmaIntrCount: 0 [MCU2_0] 97.222149 s: frontFIFOOvflCount: 0 [MCU2_0] 97.222185 s: crcCount: 1 [MCU2_0] 97.222218 s: eccCount: 0 [MCU2_0] 97.222252 s: correctedEccCount: 0 [MCU2_0] 97.222288 s: dataIdErrorCount: 0 [MCU2_0] 97.222324 s: invalidAccessCount: 0 [MCU2_0] 97.222360 s: invalidSpCount: 0 [MCU2_0] 97.222398 s: strmFIFOOvflCount[0]: 0 [MCU2_0] 97.222430 s: Channel Num | Frame Queue Count | Frame De-queue Count | Frame Drop Count | Error Frame Count | [MCU2_0] 97.222509 s: 0 | 250 | 250 | 6 | 0 | [MCU2_0] 97.222586 s: 1 | 250 | 250 | 6 | 0 | [MCU2_0] 97.222664 s: 2 | 250 | 250 | 6 | 0 | [MCU2_0] 97.222743 s: 3 | 250 | 250 | 5 | 0 | 97.293344 s: VX_ZONE_WARNING:[vxReleaseContext:1049] Found a reference 0xffff9dd0ea50 of type 00000816 at external count 1, internal count 0, releasing it 97.293365 s: VX_ZONE_WARNING:[vxReleaseContext:1051] Releasing reference (name=ldc_node_dcc_config) now as a part of garbage collection 97.293392 s: VX_ZONE_WARNING:[vxReleaseContext:1049] Found a reference 0xffff9dd0ec70 of type 00000816 at external count 1, internal count 0, releasing it 97.293400 s: VX_ZONE_WARNING:[vxReleaseContext:1051] Releasing reference (name=user_data_object_117) now as a part of garbage collection 97.293427 s: VX_ZONE_WARNING:[vxReleaseContext:1049] Found a reference 0xffff9ddb0f38 of type 00000813 at external count 1, internal count 0, releasing it 97.293434 s: VX_ZONE_WARNING:[vxReleaseContext:1051] Releasing reference (name=ldc_node_output_arr) now as a part of garbage collection 97.293634 s: ISS: De-initializing sensor [SG2-IMX390C-5200-FPDLINK] ... !!! 97.294002 s: ISS: De-initializing sensor [SG2-IMX390C-5200-FPDLINK] ... Done !!! 97.294014 s: VX_ZONE_INIT:[tivxHostDeInitLocal:100] De-Initialization Done for HOST !!! 97.298493 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 ... !!! DDR_SHARED_MEM: Alloc's: 55 alloc's of 122233368 bytes DDR_SHARED_MEM: Free's : 55 free's of 122233368 bytes DDR_SHARED_MEM: Open's : 0 allocs of 0 bytes DDR_SHARED_MEM: Total size: 536870912 bytes MEM: Deinit ... Done !!! APP: Deinit ... Done !!! root@j7-evm:/opt/vision_apps#
My sensor outputs yuv422, SDK: 08_04. The code modification is as follows.
1. added in AppObj
2. modified in 'static vx_status app_create_capture(AppObj *obj)
3. deleted viss, added ldc
4. modified input of srv_node
/* 1.added in AppObj */ vx_image cap_yuv_image; vx_node ldcNode; vx_object_array ldc_output_arr; vx_user_data_object ldc_config; vx_user_data_object dcc_config; tivx_vpac_ldc_params_t ldc_params; vx_uint32 table_width; vx_uint32 table_height; vx_uint32 ds_factor; /* 2.modified in 'static vx_status app_create_capture(AppObj *obj)' */ if(0) { obj->sample_raw_img = tivxCreateRawImage(obj->context, &(sensorParams.sensorInfo.raw_params)); if (vxGetStatus((vx_reference)obj->sample_raw_img) != VX_SUCCESS) { APP_PRINTF("sample_raw_img create failed\n"); } /* Creating object arrays to be used as output to capture node */ for(buf_id=0; buf_id<NUM_BUFS; buf_id++) { obj->capt_frames[buf_id] = vxCreateObjectArray(obj->context, (vx_reference)obj->sample_raw_img, NUM_CAPT_CHANNELS); if (vxGetStatus((vx_reference)obj->capt_frames[buf_id]) != VX_SUCCESS) { APP_PRINTF("obj->capt_frames[buf_id] create failed\n"); return VX_FAILURE; } } tivxReleaseRawImage(&obj->sample_raw_img); } else{ vx_image cap_yuv_image = vxCreateImage(obj->context, sensorParams.sensorInfo.raw_params.width, sensorParams.sensorInfo.raw_params.height, VX_DF_IMAGE_UYVY); status = vxGetStatus((vx_reference)cap_yuv_image); if(status == VX_SUCCESS) { for(buf_id=0; buf_id<NUM_BUFS; buf_id++) { obj->capt_frames[buf_id] = vxCreateObjectArray(obj->context, (vx_reference)cap_yuv_image, NUM_CAPT_CHANNELS); status = vxGetStatus((vx_reference)obj->capt_frames[buf_id]); if(status != VX_SUCCESS) { printf("[CAPTURE-MODULE] Unable to create YUV image object array! \n"); return VX_FAILURE; } } vxReleaseImage(&cap_yuv_image); } } /* 3.deleted viss, added ldc */ if (VX_SUCCESS == status) { printf("----------------capture node done-----------\n"); status = app_create_graph_ldc(obj); } vx_status app_create_graph_ldc(AppObj *obj) { vx_status status = VX_SUCCESS; obj->table_width = LDC_TABLE_WIDTH; obj->table_height = LDC_TABLE_HEIGHT; //obj->ds_factor = LDC_DS_FACTOR; /*dcc config sensor_wdr_enabled = 0*/ int32_t dcc_buff_size; uint8_t * dcc_buf; vx_map_id dcc_buf_map_id; dcc_buff_size = appIssGetDCCSizeLDC(obj->sensor_name, 0); if (dcc_buff_size > 0) { obj->dcc_config = vxCreateUserDataObject(obj->context, "dcc_ldc", dcc_buff_size, NULL ); status = vxGetStatus((vx_reference)obj->dcc_config); if(status == VX_SUCCESS) { printf("----------------------dcc_config------------------\n"); vxSetReferenceName((vx_reference)obj->dcc_config, "ldc_node_dcc_config"); vxMapUserDataObject( obj->dcc_config, 0, dcc_buff_size, &dcc_buf_map_id, (void **)&dcc_buf, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST, 0); status = appIssGetDCCBuffLDC(obj->sensor_name, 0, dcc_buf, dcc_buff_size); if(status != VX_SUCCESS) { printf("[LDC-MODULE] Error getting DCC buffer \n"); } vxUnmapUserDataObject(obj->dcc_config, dcc_buf_map_id); } else { printf("[LDC-MODULE] Unable to create DCC config object! \n"); } } /*ldc config*/ tivx_vpac_ldc_params_init(&obj->ldc_params); obj->ldc_params.luma_interpolation_type = 1; obj->ldc_params.dcc_camera_id = obj->cam_dcc_id; obj->ldc_config = vxCreateUserDataObject(obj->context, "tivx_vpac_ldc_params_t", sizeof(tivx_vpac_ldc_params_t), NULL); status = vxGetStatus((vx_reference)obj->ldc_config); if(status == VX_SUCCESS) { printf("----------------------ldc_config------------------\n"); status = vxCopyUserDataObject(obj->ldc_config, 0, sizeof(tivx_vpac_ldc_params_t), &obj->ldc_params, VX_WRITE_ONLY, VX_MEMORY_TYPE_HOST); if(status != VX_SUCCESS) { printf("[LDC-MODULE] Unable to copy ldc config params into buffer! \n"); } } /* LDC Output image in NV12 format */ vx_image output_img = vxCreateImage(obj->context, obj->table_width, obj->table_height, VX_DF_IMAGE_NV12); status = vxGetStatus((vx_reference)output_img); if(status == VX_SUCCESS) { obj->ldc_output_arr = vxCreateObjectArray(obj->context, (vx_reference)output_img, 4); vxReleaseImage(&output_img); status = vxGetStatus((vx_reference)obj->ldc_output_arr); if(status != VX_SUCCESS) { printf("[LDC-MODULE] Unable to create output image array! \n"); } else { vxSetReferenceName((vx_reference)obj->ldc_output_arr, "ldc_node_output_arr"); } } else { printf("[LDC-MODULE] Unable to create output image! \n"); } /*create graph ldc*/ if (obj->dcc_config != NULL) { printf("dcc->config nonempty\n"); vx_image in_img = (vx_image)vxGetObjectArrayItem(obj->capt_frames[0], 0); vx_image out_img = (vx_image)vxGetObjectArrayItem(obj->ldc_output_arr, 0); obj->ldcNode = tivxVpacLdcNode(obj->graph, obj->ldc_config, NULL, NULL, NULL, NULL, obj->dcc_config, in_img, out_img, NULL); vxReleaseImage(&in_img); vxReleaseImage(&out_img); status = vxGetStatus((vx_reference)obj->ldcNode); if(status == VX_SUCCESS) { vxSetNodeTarget(obj->ldcNode, VX_TARGET_STRING, TIVX_TARGET_VPAC_LDC1); vxSetReferenceName((vx_reference)obj->ldcNode, "ldc_node"); 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(obj->graph, obj->ldcNode, replicate, 9); } else { printf("[LDC-MODULE] Unable to create LDC node with DCC config! \n"); } } return status; } /* 4. modified input of srv_node */ obj->srv_node = tivxGlSrvNode(obj->graph, obj->param_obj, obj->ldc_output_arr, obj->srv_views_array, obj->out_gpulut_array, obj->output_image[0]);
Another question: Can CALMAT.BIN, LENS.BIN, CHARTPOS.BIN be obtained by Matlab tools in "ti-processor-sdk-rtos-j721e-evm-08_04_00_06/vision_apps/tools/3d_calibration_tool/exe_out/main.exe" instead of 'app_srv_calibration' demo?
Thank you!