Camera3: Enable Support channel when only Raw/Jpeg are present

Extend the current logic of adding support channel when single
Raw & Jpeg streams are present, to also cover cases when 2 streams
of only Raw & Jpeg are present with no YUV channels.

Bug: 18241830
Change-Id: I95c86e1b043a87468bf00368d4aeebacb88ef50c
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.cpp b/camera/QCamera2/HAL3/QCamera3HWI.cpp
index be0bd40..4f1962c 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/camera/QCamera2/HAL3/QCamera3HWI.cpp
@@ -686,6 +686,37 @@
     return rc;
 }
 
+/*==============================================================================
+ * FUNCTION   : isSupportChannelNeeded
+ *
+ * DESCRIPTION: Simple heuristic func to determine if support channels is needed
+ *
+ * PARAMETERS :
+ *   @stream_list : streams to be configured
+ *
+ * RETURN     : Boolen true/false decision
+ *
+ *==========================================================================*/
+bool QCamera3HardwareInterface::isSupportChannelNeeded(camera3_stream_configuration_t *streamList)
+{
+    uint32_t i;
+
+    /* Dummy stream needed if only raw or jpeg streams present */
+    for (i = 0;i < streamList->num_streams;i++) {
+        switch(streamList->streams[i]->format) {
+            case HAL_PIXEL_FORMAT_RAW_OPAQUE:
+            case HAL_PIXEL_FORMAT_RAW10:
+            case HAL_PIXEL_FORMAT_RAW16:
+            case HAL_PIXEL_FORMAT_BLOB:
+                break;
+            default:
+                return false;
+        }
+    }
+    return true;
+}
+
+
 /*===========================================================================
  * FUNCTION   : configureStreams
  *
@@ -945,12 +976,8 @@
         return rc;
     }
 
-    /* Create dummy stream if there is one single raw or jpeg stream */
-    if (streamList->num_streams == 1 &&
-            (streamList->streams[0]->format == HAL_PIXEL_FORMAT_RAW_OPAQUE ||
-            streamList->streams[0]->format == HAL_PIXEL_FORMAT_RAW10 ||
-            streamList->streams[0]->format == HAL_PIXEL_FORMAT_RAW16 ||
-            streamList->streams[0]->format == HAL_PIXEL_FORMAT_BLOB)) {
+
+    if (isSupportChannelNeeded(streamList)) {
         mSupportChannel = new QCamera3SupportChannel(
                 mCameraHandle->camera_handle,
                 mCameraHandle->ops,
@@ -962,7 +989,7 @@
             pthread_mutex_unlock(&mMutex);
             return -ENOMEM;
         }
-   }
+    }
 
     bool isRawStreamRequested = false;
     /* Allocate channel objects for the requested streams */
diff --git a/camera/QCamera2/HAL3/QCamera3HWI.h b/camera/QCamera2/HAL3/QCamera3HWI.h
index 57c8d1a..ed8c558 100644
--- a/camera/QCamera2/HAL3/QCamera3HWI.h
+++ b/camera/QCamera2/HAL3/QCamera3HWI.h
@@ -223,6 +223,7 @@
     int queueReprocMetadata(metadata_buffer_t *metadata);
     void extractJpegMetadata(CameraMetadata& jpegMetadata,
             const camera3_capture_request_t *request);
+    bool isSupportChannelNeeded(camera3_stream_configuration_t *streamList);
 public:
     cam_dimension_t calcMaxJpegDim();
     bool needOnlineRotation();