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();