commit ab583d8f943ece070324389a9fdfd9dc14124666
Author: Nikhil Dasan <n-dasan@ti.com>
Date:   Fri Jan 28 10:39:36 2022 +0530

    Drop 2 Multi-cam Example
    
    Signed-off-by: Nikhil Dasan <n-dasan@ti.com>

diff --git a/Makefile b/Makefile
index 4af5c36..ce44f25 100755
--- a/Makefile
+++ b/Makefile
@@ -21,6 +21,9 @@ endif
 ifeq ($(BUILD_CONFORMANCE_TEST),yes)
 BUILD_DEFS += BUILD_CONFORMANCE_TEST
 endif
+ifeq ($(TIOVX_HOST_R5F),yes)
+BUILD_DEFS += TIOVX_HOST_R5F
+endif
 
 ifeq ($(SOC),j721e)
     BUILD_DEFS += SOC_J721E
diff --git a/apps/basic_demos/app_multi_cam/app_common.h b/apps/basic_demos/app_multi_cam/app_common.h
index 83b8618..1249893 100644
--- a/apps/basic_demos/app_multi_cam/app_common.h
+++ b/apps/basic_demos/app_multi_cam/app_common.h
@@ -79,7 +79,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#ifdef LINUX
 #include <sys/stat.h>
+#endif
 #include <float.h>
 #include <math.h>
 
diff --git a/apps/basic_demos/app_multi_cam/app_test.h b/apps/basic_demos/app_multi_cam/app_test.h
index c15af9e..e118fff 100644
--- a/apps/basic_demos/app_multi_cam/app_test.h
+++ b/apps/basic_demos/app_multi_cam/app_test.h
@@ -82,9 +82,10 @@ static vx_uint32 checksums_gatherer[NUM_CHECKSUM_SETS][NUM_CHECKSUM_SAMPLES];
     where actual checksums are checked against */
 static void print_new_checksum_structs()
 {
+    int j = 0;
     printf("\nHere is the construct for the new expected checksums: \n\n");
     printf("static vx_uint32 checksums_expected[NUM_CHECKSUM_SETS][NUM_CHECKSUM_SAMPLES] = {\n  ");
-    for (int j=0; j<NUM_CHECKSUM_SETS; j++)
+    for (j=0; j<NUM_CHECKSUM_SETS; j++)
     {
         int i = 0;
         printf("{");
@@ -186,4 +187,4 @@ static vx_bool app_test_check_image(vx_image img, vx_uint32 expected_checksum,
         APP_PRINTF("vxQueryImage failed in the image check\n");
     }
     return return_bool;
-}
\ No newline at end of file
+}
diff --git a/apps/basic_demos/app_multi_cam/concerto.mak b/apps/basic_demos/app_multi_cam/concerto.mak
index 8d93c8b..da3f901 100755
--- a/apps/basic_demos/app_multi_cam/concerto.mak
+++ b/apps/basic_demos/app_multi_cam/concerto.mak
@@ -29,6 +29,28 @@ STATIC_LIBS += $(IMAGING_LIBS)
 STATIC_LIBS += $(VISION_APPS_KERNELS_LIBS)
 STATIC_LIBS += $(VISION_APPS_MODULES_LIBS)
 
+
+include $(FINALE)
+
+endif
+
+
+ifeq ($(TARGET_CPU),R5F)
+ifeq ($(TARGET_OS), FREERTOS)
+
+include $(PRELUDE)
+
+ifeq ($(TIOVX_HOST_R5F),yes)
+TARGET      := vx_app_multi_cam
+TARGETTYPE  := library
+CSOURCES    := main.c
+IDIRS += $(VISION_APPS_PATH)/kernels/img_proc/include
+IDIRS += $(VISION_APPS_PATH)/kernels/fileio/include
+IDIRS += $(VISION_APPS_PATH)/modules/include
+IDIRS += $(IMAGING_PATH)/kernels/include
+endif
+
 include $(FINALE)
 
 endif
+endif
\ No newline at end of file
diff --git a/apps/basic_demos/app_multi_cam/main.c b/apps/basic_demos/app_multi_cam/main.c
index 808566c..38f6954 100755
--- a/apps/basic_demos/app_multi_cam/main.c
+++ b/apps/basic_demos/app_multi_cam/main.c
@@ -80,6 +80,10 @@
 #define APP_BUFFER_Q_DEPTH   (4)
 #define APP_PIPELINE_DEPTH   (7)
 
+#ifdef TIOVX_HOST_R5F
+#define LOOP                (1000U)
+#endif
+
 typedef struct {
 
     SensorObj     sensorObj;
@@ -133,7 +137,9 @@ typedef struct {
 
 AppObj gAppObj;
 
+#ifndef TIOVX_HOST_R5F
 static void app_parse_cmd_line_args(AppObj *obj, vx_int32 argc, vx_char *argv[]);
+#endif
 static vx_status app_init(AppObj *obj);
 static void app_deinit(AppObj *obj);
 static vx_status app_create_graph(AppObj *obj);
@@ -148,6 +154,7 @@ static void add_graph_parameter_by_node_index(vx_graph graph, vx_node node, vx_u
 static vx_int32 calc_grid_size(vx_uint32 ch);
 static void set_img_mosaic_params(ImgMosaicObj *imgMosaicObj, vx_uint32 in_width, vx_uint32 in_height, vx_int32 numCh);
 
+#ifndef TIOVX_HOST_R5F
 static void app_show_usage(vx_int32 argc, vx_char* argv[])
 {
     printf("\n");
@@ -158,6 +165,7 @@ static void app_show_usage(vx_int32 argc, vx_char* argv[])
     printf("  %s --cfg <config file>\n", argv[0]);
     printf("\n");
 }
+#endif
 
 static char menu[] = {
     "\n"
@@ -289,6 +297,7 @@ static vx_status app_run_graph_interactive(AppObj *obj)
     return status;
 }
 
+#ifndef TIOVX_HOST_R5F
 static void app_set_cfg_default(AppObj *obj)
 {
     snprintf(obj->captureObj.output_file_path,APP_MAX_FILE_PATH, ".");
@@ -606,6 +615,7 @@ static void app_parse_cmd_line_args(AppObj *obj, vx_int32 argc, vx_char *argv[])
 
     return;
 }
+#endif
 
 vx_int32 app_multi_cam_main(vx_int32 argc, vx_char* argv[])
 {
@@ -616,8 +626,10 @@ vx_int32 app_multi_cam_main(vx_int32 argc, vx_char* argv[])
     /*Optional parameter setting*/
     app_default_param_set(obj);
 
+#ifndef TIOVX_HOST_R5F
     /*Config parameter reading*/
     app_parse_cmd_line_args(obj, argc, argv);
+#endif
 
     /* Querry sensor parameters */
     status = app_querry_sensor(&obj->sensorObj);
@@ -1026,12 +1038,14 @@ static vx_status app_verify_graph(AppObj *obj)
         APP_PRINTF("Graph verify done!\n");
     }
 
+#ifndef TIOVX_HOST_R5F
     #if 1
     if(VX_SUCCESS == status)
     {
       status = tivxExportGraphToDot(obj->graph,".", "vx_app_multi_cam");
     }
     #endif
+#endif
 
     if (((obj->captureObj.enable_error_detection) || (obj->test_mode)) && (status == VX_SUCCESS))
     {
@@ -1107,7 +1121,9 @@ static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 fram
         status = vxGraphParameterDequeueDoneRef(obj->graph, captureObj->graph_parameter_index, (vx_reference*)&capture_input_arr, 1, &num_refs);
         if((obj->en_out_img_write == 1) || (obj->test_mode == 1))
         {
+#ifndef TIOVX_HOST_R5F
             vx_char output_file_name[APP_MAX_FILE_PATH];
+#endif
 
             /* Dequeue output */
             if (status == VX_SUCCESS)
@@ -1126,7 +1142,7 @@ static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 fram
                     populate_gatherer(obj->sensorObj.sensor_index, obj->sensorObj.num_cameras_enabled-1, checksum_actual);
                 }
             }
-
+#ifndef TIOVX_HOST_R5F
             if (obj->en_out_img_write == 1) {
                 appPerfPointBegin(&obj->fileio_perf);
                 snprintf(output_file_name, APP_MAX_FILE_PATH, "%s/mosaic_output_%010d_%dx%d.yuv", obj->output_file_path, (frame_id - APP_BUFFER_Q_DEPTH), imgMosaicObj->out_width, imgMosaicObj->out_height);
@@ -1136,6 +1152,7 @@ static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 fram
                 }
                 appPerfPointEnd(&obj->fileio_perf);
             }
+#endif
             /* Enqueue output */
             if (status == VX_SUCCESS)
             {
@@ -1169,12 +1186,13 @@ static vx_status app_run_graph(AppObj *obj)
 
     app_pipeline_params_defaults(obj);
     APP_PRINTF("app_pipeline_params_defaults returned\n");
-
+#ifndef TIOVX_HOST_R5F
     if(NULL == sensorObj->sensor_name)
     {
         printf("sensor name is NULL \n");
         return VX_FAILURE;
     }
+#endif
 
     // if test_mode is enabled, don't fail the program if the sensor init fails
     if( (obj->test_mode) || (obj->captureObj.enable_error_detection) )
@@ -1273,7 +1291,12 @@ static void app_default_param_set(AppObj *obj)
 
     app_pipeline_params_defaults(obj);
 
+#ifndef TIOVX_HOST_R5F
     obj->is_interactive = 1;
+#else
+    obj->is_interactive = 0;
+    obj->num_frames_to_run = LOOP;
+#endif
     obj->test_mode = 0;
     obj->write_file = 0;
 
diff --git a/apps/basic_demos/app_single_cam/app_single_cam_common.c b/apps/basic_demos/app_single_cam/app_single_cam_common.c
index 4c5d5d3..5bfcb97 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_common.c
+++ b/apps/basic_demos/app_single_cam/app_single_cam_common.c
@@ -84,7 +84,11 @@ void app_set_cfg_default(AppObj *obj)
     obj->height_in = 1080;
     obj->width_out = 1920;
     obj->height_out = 1080;
+#ifndef TIOVX_HOST_R5F
     obj->is_interactive = 1;
+#else
+    obj->is_interactive = 0;
+#endif
     obj->test_mode = 0;
     obj->ldc_enable = 0;
     obj->table_width = LDC_TABLE_WIDTH;
@@ -98,6 +102,7 @@ void app_set_cfg_default(AppObj *obj)
 #endif
 }
 
+#ifndef TIOVX_HOST_R5F
 vx_int32 write_aewb_output(FILE * fp, tivx_ae_awb_params_t * aewb_result)
 {
     int i;
@@ -459,6 +464,7 @@ vx_int32 write_h3a_image(char * file_name, vx_user_data_object out_h3a)
 
     return h3a_size;
 }
+#endif
 
 vx_status app_create_ldc(AppObj *obj, vx_image ldc_in_image)
 {
diff --git a/apps/basic_demos/app_single_cam/app_single_cam_common.h b/apps/basic_demos/app_single_cam/app_single_cam_common.h
index bad9c78..3ec8308 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_common.h
+++ b/apps/basic_demos/app_single_cam/app_single_cam_common.h
@@ -68,7 +68,9 @@
 #include <stdint.h>
 #include <stdlib.h>
 #include <assert.h>
+#ifdef LINUX
 #include <sys/stat.h>
+#endif
 
 #include <iss_sensors.h>
 #include <iss_sensor_if.h>
@@ -208,6 +210,7 @@ vx_status app_delete_aewb(AppObj *obj);
 vx_status app_delete_ldc(AppObj *obj);
 vx_status app_create_ldc(AppObj *obj, vx_image ldc_in_image);
 
+#ifndef TIOVX_HOST_R5F
 vx_int32 write_aewb_output(FILE * fp, tivx_ae_awb_params_t * aewb_result);
 vx_int32 write_output_image_fp(FILE * fp, vx_image out_image);
 vx_int32 write_output_image_yuv422_8bit(char * file_name, vx_image out_yuv);
@@ -215,6 +218,7 @@ vx_int32 write_output_image_nv12_8bit(char * file_name, vx_image out_nv12);
 vx_int32 read_test_image_raw(char *raw_image_fname, tivx_raw_image raw_image, vx_uint32 test_mode);
 vx_int32 write_output_image_raw(char * file_name, tivx_raw_image raw_image);
 vx_int32 write_h3a_image(char * file_name, vx_user_data_object out_h3a);
+#endif
 void app_set_cfg_default(AppObj *obj);
 
 
diff --git a/apps/basic_demos/app_single_cam/app_single_cam_main.c b/apps/basic_demos/app_single_cam/app_single_cam_main.c
index 2804f50..11cfcf5 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_main.c
+++ b/apps/basic_demos/app_single_cam/app_single_cam_main.c
@@ -71,6 +71,11 @@
 #endif
 #endif
 
+#ifdef TIOVX_HOST_R5F
+#define SEL_CAM             (0U)
+#define LOOP                (1000U)
+#endif
+
 static char availableSensorNames[ISS_SENSORS_MAX_SUPPORTED_SENSOR][ISS_SENSORS_MAX_NAME];
 static vx_uint8 num_sensors_found;
 static IssSensor_CreateParams sensorParams;
@@ -235,6 +240,13 @@ vx_status app_init(AppObj *obj)
     }
     else
     {
+#ifdef TIOVX_HOST_R5F
+        obj->num_frames_to_run = LOOP;
+        obj->selectedCam = SEL_CAM;
+        obj->sensor_name = sensor_list[0]; /* Note: hardcoding to IMX390 */
+        printf("Sensor selected : %s\n", obj->sensor_name);
+        obj->ldc_enable = 1;
+#endif
         selectedSensor = obj->sensor_sel;
         if(selectedSensor > (num_sensors_found-1))
         {
@@ -1322,6 +1334,7 @@ static vx_status app_run_graph_interactive(AppObj *obj)
     return status;
 }
 
+#ifndef TIOVX_HOST_R5F
 static void app_show_usage(int argc, char* argv[])
 {
     printf("\n");
@@ -1332,7 +1345,7 @@ static void app_show_usage(int argc, char* argv[])
     printf("  %s --cfg <config file>\n", argv[0]);
     printf("\n");
 }
-
+#endif
 #ifdef A72
 #if defined(LINUX)
 int appSingleCamUpdateVpacDcc(AppObj *obj, uint8_t* dcc_buf, uint32_t dcc_buf_size)
@@ -1447,6 +1460,7 @@ int save_debug_images(AppObj *obj)
 }
 #endif //_APP_DEBUG_
 
+#ifndef TIOVX_HOST_R5F
 static void app_parse_cfg_file(AppObj *obj, char *cfg_file_name)
 {
     FILE *fp = fopen(cfg_file_name, "r");
@@ -1532,13 +1546,17 @@ static void app_parse_cfg_file(AppObj *obj, char *cfg_file_name)
         obj->height_out = 128;
 
 }
+#endif
 
 vx_status app_parse_cmd_line_args(AppObj *obj, int argc, char *argv[])
 {
+#ifndef TIOVX_HOST_R5F
     vx_bool set_test_mode = vx_false_e;
     vx_int8 sensor_override = 0xFF;
+#endif
     app_set_cfg_default(obj);
 
+#ifndef TIOVX_HOST_R5F
     int i;
     if(argc==1)
     {
@@ -1593,6 +1611,7 @@ vx_status app_parse_cmd_line_args(AppObj *obj, int argc, char *argv[])
             obj->sensor_sel = sensor_override;
         }
     }
+#endif
     return VX_SUCCESS;
 }
 
diff --git a/apps/basic_demos/app_single_cam/app_single_cam_main.h b/apps/basic_demos/app_single_cam/app_single_cam_main.h
index 422ca70..14ea754 100755
--- a/apps/basic_demos/app_single_cam/app_single_cam_main.h
+++ b/apps/basic_demos/app_single_cam/app_single_cam_main.h
@@ -73,6 +73,10 @@ vx_status app_send_test_frame(vx_node cap_node, tivx_raw_image raw_img);
 
 extern AppObj gAppObj;
 
+#ifdef TIOVX_HOST_R5F
+#undef A72
+#endif
+
 #ifdef A72
 #define _APP_DEBUG_
 #endif
diff --git a/apps/basic_demos/app_single_cam/app_test.h b/apps/basic_demos/app_single_cam/app_test.h
index 7a50448..b3c1530 100644
--- a/apps/basic_demos/app_single_cam/app_test.h
+++ b/apps/basic_demos/app_single_cam/app_test.h
@@ -74,8 +74,11 @@ static vx_bool test_result = vx_true_e;
 #else
 #define TEST_BUFFER 2
 #endif
+
+#ifndef TIOVX_HOST_R5F
 #define _APP_DEBUG_
 #define APP_DEBUG
+#endif
 
 static vx_uint32 checksums_expected[NUM_CHECKSUM_SETS][NUM_CHECKSUM_SAMPLES] = {
   {0x4d0a61d6},
@@ -89,9 +92,10 @@ static vx_uint32 checksums_gatherer[NUM_CHECKSUM_SETS][NUM_CHECKSUM_SAMPLES];
     where actual checksums are checked against */
 static void print_new_checksum_structs()
 {
+    int j = 0;
     printf("\nHere is the construct for the new expected checksums: \n\n");
     printf("static vx_uint32 checksums_expected[NUM_CHECKSUM_SETS][NUM_CHECKSUM_SAMPLES] = {\n  ");
-    for (int j=0; j<NUM_CHECKSUM_SETS; j++)
+    for (j=0; j<NUM_CHECKSUM_SETS; j++)
     {
         int i = 0;
         printf("{");
@@ -194,4 +198,4 @@ static vx_bool app_test_check_image(vx_image img, vx_uint32 expected_checksum,
         APP_PRINTF("vxQueryImage failed in the image check\n");
     }
     return return_bool;
-}
\ No newline at end of file
+}
diff --git a/apps/basic_demos/app_single_cam/concerto.mak b/apps/basic_demos/app_single_cam/concerto.mak
index f382fa3..5c05027 100755
--- a/apps/basic_demos/app_single_cam/concerto.mak
+++ b/apps/basic_demos/app_single_cam/concerto.mak
@@ -37,6 +37,24 @@ IDIRS += $(IMAGING_IDIRS)
 
 
 
+include $(FINALE)
+
+endif
+
+ifeq ($(TARGET_CPU),R5F)
+
+include $(PRELUDE)
+
+ifeq ($(TIOVX_HOST_R5F),yes)
+	CSOURCES    := app_single_cam_common.c
+	TARGET      := vx_app_single_cam
+	CSOURCES    += app_single_cam_main.c
+	TARGETTYPE  := library
+	IDIRS       := $(IMAGING_PATH)/kernels/include
+	IDIRS       += $(IMAGING_PATH)/sensor_drv/include
+	STATIC_LIBS += app_utils_iss
+endif
+
 include $(FINALE)
 
 endif
diff --git a/apps/basic_demos/app_vx_tutorial/concerto.mak b/apps/basic_demos/app_vx_tutorial/concerto.mak
index b3ec006..53146b0 100755
--- a/apps/basic_demos/app_vx_tutorial/concerto.mak
+++ b/apps/basic_demos/app_vx_tutorial/concerto.mak
@@ -7,6 +7,10 @@ TARGETTYPE  := exe
 TARGET      := vx_app_tutorial
 CSOURCES    := $(call all-c-files)
 
+ifeq ($(TIOVX_HOST_R5F),yes)
+STATIC_LIBS += $(IMAGING_LIBS)
+endif
+
 include $(VISION_APPS_PATH)/apps/concerto_a72_inc.mak
 
 include $(FINALE)
diff --git a/kernels/fileio/host/concerto.mak b/kernels/fileio/host/concerto.mak
index b951506..e5b721b 100644
--- a/kernels/fileio/host/concerto.mak
+++ b/kernels/fileio/host/concerto.mak
@@ -1,5 +1,5 @@
 
-ifeq ($(TARGET_CPU), $(filter $(TARGET_CPU), x86_64 A72 ))
+ifeq ($(TARGET_CPU), $(filter $(TARGET_CPU), x86_64 A72 R5F ))
 
 include $(PRELUDE)
 TARGET      := vx_kernels_fileio
diff --git a/kernels/img_proc/host/concerto.mak b/kernels/img_proc/host/concerto.mak
index 7247239..22419e0 100644
--- a/kernels/img_proc/host/concerto.mak
+++ b/kernels/img_proc/host/concerto.mak
@@ -1,5 +1,5 @@
 
-ifeq ($(TARGET_CPU), $(filter $(TARGET_CPU), x86_64 A72 ))
+ifeq ($(TARGET_CPU), $(filter $(TARGET_CPU), x86_64 A72 R5F ))
 
 include $(PRELUDE)
 TARGET      := vx_kernels_img_proc
diff --git a/modules/include/app_img_mosaic_module.h b/modules/include/app_img_mosaic_module.h
index 1f88945..44835d7 100644
--- a/modules/include/app_img_mosaic_module.h
+++ b/modules/include/app_img_mosaic_module.h
@@ -163,7 +163,9 @@ vx_status app_create_graph_img_mosaic(vx_graph graph, ImgMosaicObj *imgMosaicObj
  * \param [in] out_img    Output image to write to file
  *
  */
+#ifdef LINUX
 vx_status writeMosaicOutput(char* file_name, vx_image out_img);
+#endif
 
 /* @} */
 
diff --git a/modules/include/app_modules.h b/modules/include/app_modules.h
index 985be1e..4613286 100644
--- a/modules/include/app_modules.h
+++ b/modules/include/app_modules.h
@@ -80,7 +80,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <assert.h>
+#ifdef LINUX
 #include <sys/stat.h>
+#endif
+
 #include <float.h>
 #include <math.h>
 
diff --git a/modules/src/app_capture_module.c b/modules/src/app_capture_module.c
index cd386b7..cc92513 100755
--- a/modules/src/app_capture_module.c
+++ b/modules/src/app_capture_module.c
@@ -235,7 +235,7 @@ static vx_status create_error_detection_frame(vx_context context, CaptureObj *ca
     {
         captureObj->enable_error_detection = 0;
     }
-
+#ifndef TIOVX_HOST_R5F
     if (captureObj->test_mode)
     {
         char test_data_paths[2][255] =
@@ -277,6 +277,7 @@ static vx_status create_error_detection_frame(vx_context context, CaptureObj *ca
         }
     }
     else
+#endif
     {
         /* If we are doing error detection, just send a black frame to the dead sensor */
         if(captureObj->enable_error_detection)
@@ -408,7 +409,7 @@ vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj
     return (status);
 }
 
-
+#ifndef TIOVX_HOST_R5F
 /* This function is largely taken from single_cam_app :
     this function takes a raw_image that is unpopulated
     and populates it with the path set below */
@@ -491,6 +492,7 @@ tivx_raw_image read_error_image_raw(vx_context context,
     *bytes_read = num_bytes_read_from_file;
     return raw_image;
 }
+#endif
 
 void app_deinit_capture(CaptureObj *captureObj, vx_int32 bufq_depth)
 {
diff --git a/modules/src/app_img_mosaic_module.c b/modules/src/app_img_mosaic_module.c
index 82cb7c8..9d0602b 100644
--- a/modules/src/app_img_mosaic_module.c
+++ b/modules/src/app_img_mosaic_module.c
@@ -209,7 +209,7 @@ vx_status app_create_graph_img_mosaic(vx_graph graph, ImgMosaicObj *imgMosaicObj
 
     return (status);
 }
-
+#ifdef LINUX
 vx_status writeMosaicOutput(char* file_name, vx_image out_img)
 {
     vx_status status;
@@ -299,3 +299,4 @@ vx_status writeMosaicOutput(char* file_name, vx_image out_img)
 
     return(status);
 }
+#endif
diff --git a/modules/src/app_scaler_module.c b/modules/src/app_scaler_module.c
index 3979fbf..d4116b7 100644
--- a/modules/src/app_scaler_module.c
+++ b/modules/src/app_scaler_module.c
@@ -489,7 +489,7 @@ vx_status app_send_cmd_scaler_write_node(ScalerObj *scalerObj, vx_uint32 start_f
 
     return (status);
 }
-
+#ifdef LINUX
 vx_status readScalerInput(char* file_name, vx_object_array img_arr, vx_int32 read_mode, vx_int32 ch_num)
 {
     vx_status status;
@@ -703,6 +703,7 @@ vx_status writeScalerOutput(char* file_name, vx_object_array img_arr)
 
     return(status);
 }
+#endif
 
 void scale_set_coeff(tivx_vpac_msc_coefficients_t *coeff, uint32_t interpolation)
 {
diff --git a/modules/src/app_sensor_module.c b/modules/src/app_sensor_module.c
index 58eae14..54fbca8 100755
--- a/modules/src/app_sensor_module.c
+++ b/modules/src/app_sensor_module.c
@@ -62,6 +62,10 @@
 
 #include "app_sensor_module.h"
 
+#ifdef TIOVX_HOST_R5F
+#define NUM_CAMERAS     4
+#endif
+
 static char availableSensorNames[ISS_SENSORS_MAX_SUPPORTED_SENSOR][ISS_SENSORS_MAX_NAME];
 
 vx_status app_querry_sensor(SensorObj *sensorObj)
@@ -214,6 +218,12 @@ vx_status app_querry_sensor(SensorObj *sensorObj)
     else
     {
         selectedSensor = sensorObj->sensor_index;
+#ifdef TIOVX_HOST_R5F
+        printf("Sensor selected : %s\n", sensorObj->sensor_name);
+        sensorObj->num_cameras_enabled = NUM_CAMERAS;
+        sensorObj->ch_mask = (1<<sensorObj->num_cameras_enabled) - 1;
+        sensorObj->enable_ldc = 1;
+#endif
         if(selectedSensor > (sensorObj->num_sensors_found-1))
         {
             printf("Invalid selection found in config file: %d. Exiting. \n", selectedSensor);
diff --git a/modules/src/concerto.mak b/modules/src/concerto.mak
index 47ed54a..d3553f3 100755
--- a/modules/src/concerto.mak
+++ b/modules/src/concerto.mak
@@ -23,4 +23,37 @@ IDIRS       += $(VISION_APPS_PATH)/modules/include
 
 include $(FINALE)
 
+endif
+
+ifeq ($(TARGET_CPU), R5F)
+ifeq ($(TARGET_OS), FREERTOS)
+
+include $(PRELUDE)
+
+ifeq ($(TIOVX_HOST_R5F),yes)
+TARGET      := vx_app_modules
+TARGETTYPE  := library
+
+CSOURCES    := app_sensor_module.c
+CSOURCES    += app_capture_module.c
+CSOURCES    += app_viss_module.c
+CSOURCES    += app_aewb_module.c
+CSOURCES    += app_ldc_module.c
+CSOURCES    += app_scaler_module.c
+CSOURCES    += app_img_mosaic_module.c
+CSOURCES    += app_display_module.c
+
+IDIRS       += $(IMAGING_IDIRS)
+IDIRS       += $(IMAGING_PATH)/sensor_drv/include
+IDIRS       += $(IMAGING_PATH)/kernels/include
+
+IDIRS       += $(VISION_APPS_PATH)/kernels/img_proc/include
+IDIRS       += $(VISION_APPS_PATH)/kernels/fileio/include
+IDIRS       += $(TIDL_PATH)/inc
+IDIRS       += $(VISION_APPS_PATH)/modules/include
+endif
+
+include $(FINALE)
+
+endif
 endif
\ No newline at end of file
diff --git a/platform/j721e/rtos/common/app_cfg_mcu2_0.h b/platform/j721e/rtos/common/app_cfg_mcu2_0.h
index acaafb7..92d95ab 100755
--- a/platform/j721e/rtos/common/app_cfg_mcu2_0.h
+++ b/platform/j721e/rtos/common/app_cfg_mcu2_0.h
@@ -67,7 +67,15 @@
 
 #define L3_MEM_SIZE (MAIN_OCRAM_MCU2_0_SIZE)
 
+#ifndef TIOVX_HOST_R5F
 #define DDR_HEAP_MEM_SIZE               (DDR_MCU2_0_LOCAL_HEAP_SIZE)
+#else
+#define DDR_HEAP_MEM_SIZE               (DDR_SHARED_MEM_SIZE)
+#endif
+
+#ifdef TIOVX_HOST_R5F
+#define ENABLE_TIOVX_HOST
+#endif
 
 /* There are several external board interfaces to the SoC that can either be controlled by the MCU RTOS core
  * or the MPU HLOS core.  The top level build option BUILD_MCU_BOARD_DEPENDENCIES can be used to optionally enable
diff --git a/platform/j721e/rtos/common/app_cfg_mpu1.h b/platform/j721e/rtos/common/app_cfg_mpu1.h
index 3203751..84bad33 100755
--- a/platform/j721e/rtos/common/app_cfg_mpu1.h
+++ b/platform/j721e/rtos/common/app_cfg_mpu1.h
@@ -70,7 +70,11 @@
 #define ENABLE_MMC_SD
 #define ENABLE_UART
 #define ENABLE_BOARD
+#ifndef TIOVX_HOST_R5F
 #define ENABLE_TIOVX_HOST
+#else
+#undef ENABLE_TIOVX_HOST
+#endif
 
 /* Note: this size must match the DDR_SHARED_MEM size in system_memory_map.html, not updated automatically */
 #define DDR_HEAP_MEM_SIZE     (400*0x100000u)
diff --git a/platform/j721e/rtos/common/app_run.c b/platform/j721e/rtos/common/app_run.c
index 2f95735..2795747 100755
--- a/platform/j721e/rtos/common/app_run.c
+++ b/platform/j721e/rtos/common/app_run.c
@@ -77,7 +77,9 @@
 
 #if defined(ENABLE_TIOVX_HOST)
 int app_single_cam_main(int argc, char* argv[]);
+int app_multi_cam_main(int argc, char* argv[]);
 
+#ifndef TIOVX_HOST_R5F
 char vx_tutorial_get_char()
 {
     char buf[8u];
@@ -92,6 +94,7 @@ char vx_tutorial_get_char()
 
     return buf[0];
 }
+#endif
 
 int appRunTiovxTutorial(int argc, char *argv[])
 {
@@ -99,6 +102,7 @@ int appRunTiovxTutorial(int argc, char *argv[])
     return 0;
 }
 
+#ifndef TIOVX_HOST_R5F
 int appRunTiovxConformance(int argc, char *argv[])
 {
     TestModuleRegister();
@@ -106,6 +110,7 @@ int appRunTiovxConformance(int argc, char *argv[])
     TestModuleUnRegister();
     return 0;
 }
+#endif
 
 int appRunSampleCliAppSubCmd(int argc, char *argv[])
 {
@@ -241,6 +246,7 @@ int32_t appRunFileioTest(int argc, char *argv[])
 
 void appMenuMain()
 {
+#ifndef TIOVX_HOST_R5F
     uint32_t is_exit = 0;
 
     appCliRegisterAppCmd("app_vx_tutorial", "TIOVX tutorials", appRunTiovxTutorial);
@@ -263,6 +269,11 @@ void appMenuMain()
     {
         appCliShowPrompt(&is_exit);
     }
+#else
+    // vx_tutorial_run_interactive();
+    // app_single_cam_main(0,NULL);
+    app_multi_cam_main(0,NULL);
+#endif
 }
 
 #endif
diff --git a/platform/j721e/rtos/concerto_r5f_inc.mak b/platform/j721e/rtos/concerto_r5f_inc.mak
index 4d3f7b0..f490ced 100755
--- a/platform/j721e/rtos/concerto_r5f_inc.mak
+++ b/platform/j721e/rtos/concerto_r5f_inc.mak
@@ -42,6 +42,15 @@ STATIC_LIBS += app_utils_iss
 STATIC_LIBS += app_utils_draw2d
 STATIC_LIBS += app_utils_pcie_queue
 STATIC_LIBS += vx_target_kernels_img_proc_r5f
+ifeq ($(TIOVX_HOST_R5F),yes)
+STATIC_LIBS += vx_app_single_cam
+STATIC_LIBS += vx_app_multi_cam
+STATIC_LIBS += vx_app_modules
+STATIC_LIBS += app_utils_hwa
+STATIC_LIBS += vx_kernels_fileio
+STATIC_LIBS += vx_kernels_img_proc
+endif
+
 
 TIOVX_LIBS =
 TIOVX_LIBS += vx_conformance_engine vx_conformance_tests vx_conformance_tests_testmodule
diff --git a/platform/j721e/rtos/mcu2_0/concerto_mcu2_0_inc.mak b/platform/j721e/rtos/mcu2_0/concerto_mcu2_0_inc.mak
index 826db6a..af15853 100755
--- a/platform/j721e/rtos/mcu2_0/concerto_mcu2_0_inc.mak
+++ b/platform/j721e/rtos/mcu2_0/concerto_mcu2_0_inc.mak
@@ -9,7 +9,11 @@ ifeq ($(RTOS),SYSBIOS)
 endif
 ifeq ($(RTOS),FREERTOS)
 	CSOURCES += $(SOC)_mpu_cfg.c
-	LINKER_CMD_FILES +=  $($(_MODULE)_SDIR)/$(SOC)_linker_freertos.cmd
+	ifeq ($(TIOVX_HOST_R5F),yes)
+		LINKER_CMD_FILES +=  $($(_MODULE)_SDIR)/$(SOC)_linker_host_freertos.cmd
+	else
+		LINKER_CMD_FILES +=  $($(_MODULE)_SDIR)/$(SOC)_linker_freertos.cmd
+	endif
 endif
 
 LINKER_CMD_FILES +=  $($(_MODULE)_SDIR)/linker_mem_map.cmd
diff --git a/platform/j721e/rtos/mcu2_0/j721e_linker_host_freertos.cmd b/platform/j721e/rtos/mcu2_0/j721e_linker_host_freertos.cmd
new file mode 100644
index 0000000..e86b2c8
--- /dev/null
+++ b/platform/j721e/rtos/mcu2_0/j721e_linker_host_freertos.cmd
@@ -0,0 +1,110 @@
+/*=========================*/
+/*     Linker Settings     */
+/*=========================*/
+
+--retain="*(.bootCode)"
+--retain="*(.startupCode)"
+--retain="*(.startupData)"
+--retain="*(.irqStack)"
+--retain="*(.fiqStack)"
+--retain="*(.abortStack)"
+--retain="*(.undStack)"
+--retain="*(.svcStack)"
+
+--fill_value=0
+--stack_size=0x8000
+--heap_size=0x10000
+--entry_point=_freertosresetvectors
+
+-stack  0x8000  /* SOFTWARE STACK SIZE */
+-heap   0x10000 /* HEAP AREA SIZE      */
+
+/*-------------------------------------------*/
+/*       Stack Sizes for various modes       */
+/*-------------------------------------------*/
+__IRQ_STACK_SIZE   = 0x1000;
+__FIQ_STACK_SIZE   = 0x0100;
+__ABORT_STACK_SIZE = 0x0100;
+__UND_STACK_SIZE   = 0x0100;
+__SVC_STACK_SIZE   = 0x0100;
+
+/*--------------------------------------------------------------*/
+/*                     Section Configuration                    */
+/*--------------------------------------------------------------*/
+SECTIONS
+{
+    .freertosrstvectors : {} palign(8)      > R5F_TCMA_VECS
+
+    .bootCode           : {} palign(8)      > R5F_TCMA
+    .startupCode        : {} palign(8)      > R5F_TCMA
+    .startupData        : {} palign(8)      > R5F_TCMA, type = NOINIT
+    GROUP
+    {
+        .text.hwi       : palign(8)
+        .text.cache     : palign(8)
+        .text.mpu       : palign(8)
+        .text.boot      : palign(8)
+    }                                       > R5F_TCMA
+
+    .text               : {} palign(8)      > DDR_MCU2_0
+    .const              : {} palign(8)      > DDR_MCU2_0
+    .rodata             : {} palign(8)      > DDR_MCU2_0
+    .mpu_cfg                                > DDR_MCU2_0
+    .cinit              : {} palign(8)      > DDR_MCU2_0
+    .pinit              : {} palign(8)      > R5F_TCMA
+    .bss                : {} align(4)       > DDR_MCU2_0
+    .data               : {} palign(128)    > DDR_MCU2_0
+    .sysmem             : {} align(8)       > DDR_MCU2_0
+    .stack              : {} align(4)       > DDR_MCU2_0
+    .bss.devgroup*      : {} align(4)       > DDR_MCU2_0
+    .bss:taskStackSection > DDR_MCU2_0
+
+    .far:CPSW_DMA_DESC_MEMPOOL  (NOLOAD) {} ALIGN (128) > DDR_MCU2_0
+    .far:CPSW_DMA_RING_MEMPOOL (NOLOAD) {} ALIGN (128) > DDR_MCU2_0
+    .far:CPSW_DMA_PKT_MEMPOOL (NOLOAD) {} ALIGN (128) > DDR_MCU2_0
+    .bss:NDK_MMBUFFER  (NOLOAD) {} ALIGN (128) > DDR_MCU2_0
+    .bss:NDK_PACKETMEM (NOLOAD) {} ALIGN (128) > DDR_MCU2_0
+
+    .data_buffer        : {} palign(128)    > DDR_MCU2_0
+    .const.devgroup*    : {} align(4)       > DDR_MCU2_0
+    .boardcfg_data      : {} align(4)       > DDR_MCU2_0
+
+    .resource_table          :
+    {
+        __RESOURCE_TABLE = .;
+    }                                           > DDR_MCU2_0_RESOURCE_TABLE
+
+    intercore_eth_desc_mem (NOLOAD) : {} palign(128) > INTERCORE_ETH_DESC_MEM
+    intercore_eth_data_mem (NOLOAD) : {} palign(128) > INTERCORE_ETH_DATA_MEM
+
+    .tracebuf                : {} align(1024)   > DDR_MCU2_0
+
+    .bss:l3mem              (NOLOAD) : {} > MAIN_OCRAM_MCU2_0
+    .bss:ddr_shared_mem     (NOLOAD) : {} > DDR_SHARED_MEM
+    .bss:app_log_mem        (NOLOAD) : {} > APP_LOG_MEM
+    .bss:tiovx_obj_desc_mem (NOLOAD) : {} > TIOVX_OBJ_DESC_MEM
+    .bss:ipc_vring_mem      (NOLOAD) : {} > IPC_VRING_MEM
+
+    .pcie_queue_shmem (NOLOAD) : {} palign(8)  > PCIE_QUEUE_SHARED_MEM
+
+
+    .irqStack   : {. = . + __IRQ_STACK_SIZE;} align(4)      > DDR_MCU2_0  (HIGH)
+    RUN_START(__IRQ_STACK_START)
+    RUN_END(__IRQ_STACK_END)
+
+    .fiqStack   : {. = . + __FIQ_STACK_SIZE;} align(4)      > DDR_MCU2_0  (HIGH)
+    RUN_START(__FIQ_STACK_START)
+    RUN_END(__FIQ_STACK_END)
+
+    .abortStack : {. = . + __ABORT_STACK_SIZE;} align(4)    > DDR_MCU2_0  (HIGH)
+    RUN_START(__ABORT_STACK_START)
+    RUN_END(__ABORT_STACK_END)
+
+    .undStack   : {. = . + __UND_STACK_SIZE;} align(4)      > DDR_MCU2_0  (HIGH)
+    RUN_START(__UND_STACK_START)
+    RUN_END(__UND_STACK_END)
+
+    .svcStack   : {. = . + __SVC_STACK_SIZE;} align(4)      > DDR_MCU2_0  (HIGH)
+    RUN_START(__SVC_STACK_START)
+    RUN_END(__SVC_STACK_END)
+}
diff --git a/utils/hwa/src/concerto.mak b/utils/hwa/src/concerto.mak
index 7cae77f..6b1bd65 100644
--- a/utils/hwa/src/concerto.mak
+++ b/utils/hwa/src/concerto.mak
@@ -34,6 +34,7 @@ TARGET      := app_utils_hwa
 TARGETTYPE  := library
 
 CSOURCES    := app_hwa.c
+CSOURCES    += app_hwa_api.c
 
 include $(FINALE)
 
diff --git a/utils/iss/src/app_iss.c b/utils/iss/src/app_iss.c
index 87ea098..53db7fc 100755
--- a/utils/iss/src/app_iss.c
+++ b/utils/iss/src/app_iss.c
@@ -65,7 +65,6 @@
 #include <utils/iss/include/app_iss.h>
 #include <utils/console_io/include/app_log.h>
 
-#ifdef A72
 static uint8_t  g_cmdPrm[CMD_PARAM_SIZE];
 
 int32_t appEnumerateImageSensor(char *sensor_name_list[], uint8_t  * num_sensors_found)
@@ -331,8 +330,6 @@ int32_t appDeInitImageSensor(char* sensor_name)
     return status;
 }
 
-#endif /*(A72)*/
-
 #if defined(R5F) && (defined(SYSBIOS) || defined(FREERTOS))
 int32_t appIssInit()
 {
diff --git a/utils/iss/src/app_iss_common.c b/utils/iss/src/app_iss_common.c
index 5782712..3e27267 100755
--- a/utils/iss/src/app_iss_common.c
+++ b/utils/iss/src/app_iss_common.c
@@ -59,8 +59,10 @@
  * OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+#ifdef LINUX
 #include <dirent.h>
 #include <sys/stat.h>
+#endif
 
 
 #include <utils/ipc/include/app_ipc.h>
@@ -400,6 +402,7 @@ int32_t appIssGetResizeParams(uint16_t in_width, uint16_t in_height, uint16_t tg
     return 0;
 }
 
+#ifdef LINUX
 /*
 Returns the sum of sizes all .bin files inside a specified directory.
 Does not look inside subfolders.
@@ -635,7 +638,7 @@ int32_t appSplitVpacDcc(uint8_t *dcc_buf_in, uint32_t prmSize,
     *dcc_buf_aewb_num_bytes = offset_2a;
     return status;
 }
-
+#endif
 #if defined(LINUX)
 /*
     This function receives a buffer containing VPAC tuning data.
diff --git a/utils/iss/src/concerto.mak b/utils/iss/src/concerto.mak
index 5cdfd0d..90e2a5a 100755
--- a/utils/iss/src/concerto.mak
+++ b/utils/iss/src/concerto.mak
@@ -17,7 +17,7 @@ CSOURCES    := app_iss_common.c app_iss.c
 endif
 
 ifeq ($(TARGET_CPU),$(filter $(TARGET_CPU), R5F))
-CSOURCES    := app_iss.c
+CSOURCES    := app_iss_common.c app_iss.c
 endif
 
 endif
