QCamera3HWI: Fix CTS tests in HDR+ mode
Check if HDR+ mode is supported with configured streams before
enabling HDR+ mode.
Reset mPictureChannel to NULL before configuring new streams to
avoid becoming a dangling pointer.
Test: Camera CTS
Bug: 63045786
Change-Id: I481a09fce4f9722218d71c1e580ba432c33dce92
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index e75e057..48056fc 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -1820,6 +1820,8 @@
pthread_mutex_lock(&mMutex);
+ mPictureChannel = NULL;
+
// Check state
switch (mState) {
case INITIALIZED:
@@ -5999,11 +6001,14 @@
meta.exists(ANDROID_CONTROL_CAPTURE_INTENT) &&
meta.find(ANDROID_CONTROL_CAPTURE_INTENT).data.u8[0] ==
ANDROID_CONTROL_CAPTURE_INTENT_PREVIEW) {
- rc = enableHdrPlusModeLocked();
- if (rc != OK) {
- LOGE("%s: Failed to open HDR+ asynchronously", __FUNCTION__);
- pthread_mutex_unlock(&mMutex);
- return rc;
+
+ if (isSessionHdrPlusModeCompatible()) {
+ rc = enableHdrPlusModeLocked();
+ if (rc != OK) {
+ LOGE("%s: Failed to open HDR+ asynchronously", __FUNCTION__);
+ pthread_mutex_unlock(&mMutex);
+ return rc;
+ }
}
mFirstPreviewIntentSeen = true;
@@ -14592,6 +14597,17 @@
ALOGD("%s: HDR+ mode disabled", __FUNCTION__);
}
+bool QCamera3HardwareInterface::isSessionHdrPlusModeCompatible()
+{
+ // Check if mPictureChannel is valid.
+ // TODO: Support YUV (b/36693254) and RAW (b/36690506)
+ if (mPictureChannel == nullptr) {
+ return false;
+ }
+
+ return true;
+}
+
status_t QCamera3HardwareInterface::configureHdrPlusStreamsLocked()
{
pbcamera::InputConfiguration inputConfig;