diff --git a/apps/basic_demos/app_multi_cam/app_capture_module.c b/apps/basic_demos/app_multi_cam/app_capture_module.c
old mode 100644
new mode 100755
index 13544c3..e449ed0
--- a/apps/basic_demos/app_multi_cam/app_capture_module.c
+++ b/apps/basic_demos/app_multi_cam/app_capture_module.c
@@ -68,6 +68,7 @@ vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj
 {
     vx_status status = VX_SUCCESS;
     tivx_raw_image raw_image;
+    vx_image image;
     vx_uint32 num_capt_instances;
     vx_int32 id, lane, q, ch;
 
@@ -117,12 +118,26 @@ vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj
 
     captureObj->config = vxCreateUserDataObject(context, "tivx_capture_params_t", sizeof(tivx_capture_params_t), &captureObj->params);
 
-    raw_image = tivxCreateRawImage(context, &sensorParams->sensorInfo.raw_params);
-    for(q = 0; q < bufq_depth; q++)
+    if (!captureObj->is_yuv_capture)
     {
-        captureObj->raw_image_arr[q] = vxCreateObjectArray(context, (vx_reference)raw_image, sensorObj->num_cameras_enabled);
+        raw_image = tivxCreateRawImage(context, &sensorParams->sensorInfo.raw_params);
+        for(q = 0; q < bufq_depth; q++)
+        {
+            captureObj->image_arr[q] = vxCreateObjectArray(context, (vx_reference)raw_image, sensorObj->num_cameras_enabled);
+        }
+        tivxReleaseRawImage(&raw_image);
+    }
+    else
+    {
+        image = vxCreateImage(context, sensorParams->sensorInfo.raw_params.width,
+            sensorParams->sensorInfo.raw_params.width, captureObj->yuv422Fmt);
+
+        for(q = 0; q < bufq_depth; q++)
+        {
+            captureObj->image_arr[q] = vxCreateObjectArray(context, (vx_reference)raw_image, sensorObj->num_cameras_enabled);
+        }
+        vxReleaseImage(&image);
     }
-    tivxReleaseRawImage(&raw_image);
 
     if(captureObj->en_out_capture_write == 1)
     {
@@ -159,20 +174,39 @@ vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj
         rect.end_x = sensorParams->sensorInfo.raw_params.width;
         rect.end_y = sensorParams->sensorInfo.raw_params.height;
 
-        captureObj->black_raw_image = tivxCreateRawImage(context, &(sensorParams->sensorInfo.raw_params));
+        if (!captureObj->is_yuv_capture)
+        {
+            captureObj->black_raw_image = tivxCreateRawImage(context, &(sensorParams->sensorInfo.raw_params));
+
+            status = tivxMapRawImagePatch((tivx_raw_image)captureObj->black_raw_image, &rect, 0, &map_id, &image_addr, &data_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, TIVX_RAW_IMAGE_ALLOC_BUFFER);
 
-        status = tivxMapRawImagePatch((tivx_raw_image)captureObj->black_raw_image, &rect, 0, &map_id, &image_addr, &data_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, TIVX_RAW_IMAGE_ALLOC_BUFFER);
+            if ((vx_status)VX_SUCCESS == status)
+            {
+                memset(data_ptr, 0x00, image_addr.stride_y*(sensorParams->sensorInfo.raw_params.height+sensorParams->sensorInfo.raw_params.meta_height_before+sensorParams->sensorInfo.raw_params.meta_height_after));
 
-        if ((vx_status)VX_SUCCESS == status)
+                status = tivxUnmapRawImagePatch((tivx_raw_image)captureObj->black_raw_image, map_id);
+            }
+        }
+        else
         {
-            memset(data_ptr, 0x00, image_addr.stride_y*(sensorParams->sensorInfo.raw_params.height+sensorParams->sensorInfo.raw_params.meta_height_before+sensorParams->sensorInfo.raw_params.meta_height_after));
+            captureObj->black_image = vxCreateImage(context, sensorParams->sensorInfo.raw_params.width,
+                sensorParams->sensorInfo.raw_params.width, captureObj->yuv422Fmt);
+
+            status = vxMapImagePatch(captureObj->black_image, &rect, 0, &map_id, &image_addr, &data_ptr, VX_READ_ONLY, VX_MEMORY_TYPE_HOST, TIVX_RAW_IMAGE_ALLOC_BUFFER);
+
+            if ((vx_status)VX_SUCCESS == status)
+            {
+                memset(data_ptr, 0x00,
+                    image_addr.stride_y*(sensorParams->sensorInfo.raw_params.height+sensorParams->sensorInfo.raw_params.meta_height_before+sensorParams->sensorInfo.raw_params.meta_height_after));
 
-            status = tivxUnmapRawImagePatch((tivx_raw_image)captureObj->black_raw_image, map_id);
+                status = tivxUnmapImagePatch(captureObj->black_image, map_id);
+            }
         }
     }
     else
     {
         captureObj->black_raw_image = NULL;
+        captureObj->black_image = NULL;
     }
 
     return (status);
@@ -184,12 +218,19 @@ void app_deinit_capture(CaptureObj *captureObj, vx_int32 bufq_depth)
     vxReleaseUserDataObject(&captureObj->config);
     for(i = 0; i < bufq_depth; i++)
     {
-        vxReleaseObjectArray(&captureObj->raw_image_arr[i]);
+        vxReleaseObjectArray(&captureObj->image_arr[i]);
     }
 
     if(captureObj->enable_error_detection)
     {
-        tivxReleaseRawImage(&captureObj->black_raw_image);
+        if (!captureObj->is_yuv_capture)
+        {
+            tivxReleaseRawImage(&captureObj->black_raw_image);
+        }
+        else
+        {
+            vxReleaseImage(&captureObj->black_image);
+        }
     }
 
     if(captureObj->en_out_capture_write == 1)
@@ -216,7 +257,7 @@ vx_status app_create_graph_capture(vx_graph graph, CaptureObj *captureObj)
 {
     vx_status status = VX_SUCCESS;
 
-    captureObj->node = tivxCaptureNode(graph, captureObj->config, captureObj->raw_image_arr[0]);
+    captureObj->node = tivxCaptureNode(graph, captureObj->config, captureObj->image_arr[0]);
     status = vxGetStatus((vx_reference)captureObj->node);
     vxSetNodeTarget(captureObj->node, VX_TARGET_STRING, TIVX_TARGET_CAPTURE1);
     vxSetReferenceName((vx_reference)captureObj->node, "capture_node");
@@ -235,17 +276,20 @@ vx_status app_create_graph_capture_write_output(vx_graph graph, CaptureObj *capt
 {
     vx_status status = VX_SUCCESS;
 
-    tivx_raw_image raw_img = (tivx_raw_image)vxGetObjectArrayItem(captureObj->raw_image_arr[0], 0);
+    if (!captureObj->is_yuv_capture)
+    {
+        tivx_raw_image raw_img = (tivx_raw_image)vxGetObjectArrayItem(captureObj->image_arr[0], 0);
 
-    captureObj->write_node = tivxWriteRawImageNode(graph, raw_img, captureObj->file_path, captureObj->file_prefix);
-    status = vxGetStatus((vx_reference)captureObj->write_node);
-    vxSetNodeTarget(captureObj->write_node, VX_TARGET_STRING, TIVX_TARGET_A72_0);
-    vxSetReferenceName((vx_reference)captureObj->write_node, "capture_write_node");
+        captureObj->write_node = tivxWriteRawImageNode(graph, raw_img, captureObj->file_path, captureObj->file_prefix);
+        status = vxGetStatus((vx_reference)captureObj->write_node);
+        vxSetNodeTarget(captureObj->write_node, VX_TARGET_STRING, TIVX_TARGET_A72_0);
+        vxSetReferenceName((vx_reference)captureObj->write_node, "capture_write_node");
 
-    vx_bool replicate[] = { vx_true_e, vx_false_e, vx_false_e};
-    vxReplicateNode(graph, captureObj->write_node, replicate, 3);
+        vx_bool replicate[] = { vx_true_e, vx_false_e, vx_false_e};
+        vxReplicateNode(graph, captureObj->write_node, replicate, 3);
 
-    tivxReleaseRawImage(&raw_img);
+        tivxReleaseRawImage(&raw_img);
+    }
 
     return (status);
 }
@@ -288,7 +332,13 @@ vx_status app_send_error_frame(CaptureObj *captureObj)
 {
     vx_status status = VX_SUCCESS;
 
-    status = tivxCaptureRegisterErrorFrame(captureObj->node, (vx_reference)captureObj->black_raw_image);
-
+    if (!captureObj->is_yuv_capture)
+    {
+        status = tivxCaptureRegisterErrorFrame(captureObj->node, (vx_reference)captureObj->black_raw_image);
+    }
+    else
+    {
+        status = tivxCaptureRegisterErrorFrame(captureObj->node, (vx_reference)captureObj->black_image);
+    }
     return status;
 }
diff --git a/apps/basic_demos/app_multi_cam/app_capture_module.h b/apps/basic_demos/app_multi_cam/app_capture_module.h
old mode 100644
new mode 100755
index ec0ad10..10cfb9e
--- a/apps/basic_demos/app_multi_cam/app_capture_module.h
+++ b/apps/basic_demos/app_multi_cam/app_capture_module.h
@@ -75,7 +75,7 @@ typedef struct {
 
     vx_user_data_object dcc_config;
 
-    vx_object_array raw_image_arr[APP_MAX_BUFQ_DEPTH];
+    vx_object_array image_arr[APP_MAX_BUFQ_DEPTH];
 
     vx_int32 graph_parameter_index;
 
@@ -93,7 +93,11 @@ typedef struct {
     tivx_raw_image black_raw_image;
 
     vx_uint8 enable_error_detection;
-}CaptureObj;
+
+    uint32_t is_yuv_capture;
+    vx_image black_image;
+    vx_df_image yuv422Fmt;
+} CaptureObj;
 
 vx_status app_init_capture(vx_context context, CaptureObj *captureObj, SensorObj *sensorObj, char *objName, int32_t bufq_depth);
 void app_deinit_capture(CaptureObj *captureObj, vx_int32 bufq_depth);
diff --git a/apps/basic_demos/app_multi_cam/main.c b/apps/basic_demos/app_multi_cam/main.c
old mode 100644
new mode 100755
index 096ab8c..1564102
--- a/apps/basic_demos/app_multi_cam/main.c
+++ b/apps/basic_demos/app_multi_cam/main.c
@@ -278,6 +278,8 @@ static void app_set_cfg_default(AppObj *obj)
 
     obj->num_frames_to_write = 0;
     obj->num_frames_to_skip = 0;
+
+    obj->captureObj.is_yuv_capture = 0;
 }
 
 static void app_parse_cfg_file(AppObj *obj, vx_char *cfg_file_name)
@@ -592,11 +594,14 @@ static vx_status app_init(AppObj *obj)
     app_init_capture(obj->context, &obj->captureObj, &obj->sensorObj, "capture_obj", APP_BUFFER_Q_DEPTH);
     APP_PRINTF("Capture init done!\n");
 
-    app_init_viss(obj->context, &obj->vissObj, &obj->sensorObj, "viss_obj");
-    APP_PRINTF("VISS init done!\n");
+    if (!obj->captureObj.is_yuv_capture)
+    {
+        app_init_viss(obj->context, &obj->vissObj, &obj->sensorObj, "viss_obj");
+        APP_PRINTF("VISS init done!\n");
 
-    app_init_aewb(obj->context, &obj->aewbObj, &obj->sensorObj, "aewb_obj");
-    APP_PRINTF("AEWB init done!\n");
+        app_init_aewb(obj->context, &obj->aewbObj, &obj->sensorObj, "aewb_obj");
+        APP_PRINTF("AEWB init done!\n");
+    }
 
     if(obj->sensorObj.enable_ldc == 1)
     {
@@ -624,11 +629,14 @@ static void app_deinit(AppObj *obj)
     app_deinit_capture(&obj->captureObj, APP_BUFFER_Q_DEPTH);
     APP_PRINTF("Capture deinit done!\n");
 
-    app_deinit_viss(&obj->vissObj);
-    APP_PRINTF("VISS deinit done!\n");
+    if (!obj->captureObj.is_yuv_capture)
+    {
+        app_deinit_viss(&obj->vissObj);
+        APP_PRINTF("VISS deinit done!\n");
 
-    app_deinit_aewb(&obj->aewbObj);
-    APP_PRINTF("AEWB deinit done!\n");
+        app_deinit_aewb(&obj->aewbObj);
+        APP_PRINTF("AEWB deinit done!\n");
+    }
 
     if(obj->sensorObj.enable_ldc == 1)
     {
@@ -656,11 +664,14 @@ static void app_delete_graph(AppObj *obj)
     app_delete_capture(&obj->captureObj);
     APP_PRINTF("Capture delete done!\n");
 
-    app_delete_viss(&obj->vissObj);
-    APP_PRINTF("VISS delete done!\n");
+    if (!obj->captureObj.is_yuv_capture)
+    {
+        app_delete_viss(&obj->vissObj);
+        APP_PRINTF("VISS delete done!\n");
 
-    app_delete_aewb(&obj->aewbObj);
-    APP_PRINTF("AEWB delete done!\n");
+        app_delete_aewb(&obj->aewbObj);
+        APP_PRINTF("AEWB delete done!\n");
+    }
 
     if(obj->sensorObj.enable_ldc == 1)
     {
@@ -683,6 +694,7 @@ static vx_status app_create_graph(AppObj *obj)
     vx_status status = VX_SUCCESS;
     vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[2];
     vx_int32 graph_parameter_index;
+    vx_int32 idx = 0;
 
     obj->graph = vxCreateGraph(obj->context);
     status = vxGetStatus((vx_reference)obj->graph);
@@ -695,31 +707,49 @@ static vx_status app_create_graph(AppObj *obj)
         APP_PRINTF("Capture graph done!\n");
     }
 
-    if(status == VX_SUCCESS)
-    {
-        status = app_create_graph_viss(obj->graph, &obj->vissObj, obj->captureObj.raw_image_arr[0]);
-        APP_PRINTF("VISS graph done!\n");
-    }
-
-    if(status == VX_SUCCESS)
+    if (!obj->captureObj.is_yuv_capture)
     {
-        status = app_create_graph_aewb(obj->graph, &obj->aewbObj, obj->vissObj.h3a_stats_arr);
-        APP_PRINTF("AEWB graph done!\n");
-    }
+        if(status == VX_SUCCESS)
+        {
+            status = app_create_graph_viss(obj->graph, &obj->vissObj, obj->captureObj.image_arr[0]);
+            APP_PRINTF("VISS graph done!\n");
+        }
 
-    vx_int32 idx = 0;
-    if(obj->sensorObj.enable_ldc == 1)
-    {
         if(status == VX_SUCCESS)
         {
-            status = app_create_graph_ldc(obj->graph, &obj->ldcObj, obj->vissObj.output_arr);
-            APP_PRINTF("LDC graph done!\n");
+            status = app_create_graph_aewb(obj->graph, &obj->aewbObj, obj->vissObj.h3a_stats_arr);
+            APP_PRINTF("AEWB graph done!\n");
+        }
+
+        if(obj->sensorObj.enable_ldc == 1)
+        {
+            if(status == VX_SUCCESS)
+            {
+                status = app_create_graph_ldc(obj->graph, &obj->ldcObj, obj->vissObj.output_arr);
+                APP_PRINTF("LDC graph done!\n");
+            }
+            obj->imgMosaicObj.input_arr[idx++] = obj->ldcObj.output_arr;
+        }
+        else
+        {
+            obj->imgMosaicObj.input_arr[idx++] = obj->vissObj.output_arr;
         }
-        obj->imgMosaicObj.input_arr[idx++] = obj->ldcObj.output_arr;
     }
     else
     {
-        obj->imgMosaicObj.input_arr[idx++] = obj->vissObj.output_arr;
+        if(obj->sensorObj.enable_ldc == 1)
+        {
+            if(status == VX_SUCCESS)
+            {
+                status = app_create_graph_ldc(obj->graph, &obj->ldcObj, obj->captureObj.image_arr[0]);
+                APP_PRINTF("LDC graph done!\n");
+            }
+            obj->imgMosaicObj.input_arr[idx++] = obj->ldcObj.output_arr;
+        }
+        else
+        {
+            obj->imgMosaicObj.input_arr[idx++] = obj->captureObj.image_arr[0];
+        }
     }
 
     obj->imgMosaicObj.num_inputs = idx;
@@ -743,7 +773,7 @@ static vx_status app_create_graph(AppObj *obj)
         obj->captureObj.graph_parameter_index = graph_parameter_index;
         graph_parameters_queue_params_list[graph_parameter_index].graph_parameter_index = graph_parameter_index;
         graph_parameters_queue_params_list[graph_parameter_index].refs_list_size = APP_BUFFER_Q_DEPTH;
-        graph_parameters_queue_params_list[graph_parameter_index].refs_list = (vx_reference*)&obj->captureObj.raw_image_arr[0];
+        graph_parameters_queue_params_list[graph_parameter_index].refs_list = (vx_reference*)&obj->captureObj.image_arr[0];
         graph_parameter_index++;
 
         if (obj->en_out_img_write == 1)
@@ -763,9 +793,13 @@ static vx_status app_create_graph(AppObj *obj)
 
         tivxSetGraphPipelineDepth(obj->graph, APP_PIPELINE_DEPTH);
 
-        tivxSetNodeParameterNumBufByIndex(obj->vissObj.node, 6, APP_BUFFER_Q_DEPTH);
-        tivxSetNodeParameterNumBufByIndex(obj->vissObj.node, 9, APP_BUFFER_Q_DEPTH);
-        tivxSetNodeParameterNumBufByIndex(obj->aewbObj.node, 4, APP_BUFFER_Q_DEPTH);
+        if (!obj->captureObj.is_yuv_capture)
+        {
+            tivxSetNodeParameterNumBufByIndex(obj->vissObj.node, 6, APP_BUFFER_Q_DEPTH);
+            tivxSetNodeParameterNumBufByIndex(obj->vissObj.node, 9, APP_BUFFER_Q_DEPTH);
+            tivxSetNodeParameterNumBufByIndex(obj->aewbObj.node, 4, APP_BUFFER_Q_DEPTH);
+        }
+
         if(obj->sensorObj.enable_ldc == 1)
         {
             tivxSetNodeParameterNumBufByIndex(obj->ldcObj.node, 7, APP_BUFFER_Q_DEPTH);
@@ -826,7 +860,7 @@ static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 fram
     }
 
     /* Enqueue inputs during pipeup dont execute */
-    vxGraphParameterEnqueueReadyRef(obj->graph, captureObj->graph_parameter_index, (vx_reference*)&obj->captureObj.raw_image_arr[obj->enqueueCnt], 1);
+    vxGraphParameterEnqueueReadyRef(obj->graph, captureObj->graph_parameter_index, (vx_reference*)&obj->captureObj.image_arr[obj->enqueueCnt], 1);
 
     obj->enqueueCnt++;
     obj->enqueueCnt   = (obj->enqueueCnt  >= APP_BUFFER_Q_DEPTH)? 0 : obj->enqueueCnt;
@@ -842,7 +876,7 @@ static vx_status app_run_graph_for_one_frame_pipeline(AppObj *obj, vx_int32 fram
       }
 
       /* Execute 1st frame */
-      vxGraphParameterEnqueueReadyRef(obj->graph, captureObj->graph_parameter_index, (vx_reference*)&obj->captureObj.raw_image_arr[obj->enqueueCnt], 1);
+      vxGraphParameterEnqueueReadyRef(obj->graph, captureObj->graph_parameter_index, (vx_reference*)&obj->captureObj.image_arr[obj->enqueueCnt], 1);
 
       obj->enqueueCnt++;
       obj->enqueueCnt   = (obj->enqueueCnt  >= APP_BUFFER_Q_DEPTH)? 0 : obj->enqueueCnt;
@@ -918,9 +952,12 @@ static vx_status app_run_graph(AppObj *obj)
             {
                 app_send_cmd_capture_write_node(&obj->captureObj, frame_id, obj->num_frames_to_write, obj->num_frames_to_skip);
             }
-            if(obj->vissObj.en_out_viss_write == 1)
+            if (!obj->captureObj.is_yuv_capture)
             {
-                app_send_cmd_viss_write_node(&obj->vissObj, frame_id, obj->num_frames_to_write, obj->num_frames_to_skip);
+                if(obj->vissObj.en_out_viss_write == 1)
+                {
+                    app_send_cmd_viss_write_node(&obj->vissObj, frame_id, obj->num_frames_to_write, obj->num_frames_to_skip);
+                }
             }
             if(obj->ldcObj.en_out_ldc_write == 1)
             {
