QCamera3: Suspend Easel is openCamera fails
Test: Camera CTS
Bug: 62073170
Change-Id: Ia4059e40e47970d5bf531861592407034df6d353
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index 777bf30..1c58f89 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -858,11 +858,40 @@
LOGI("[KPI Perf]: E PROFILE_OPEN_CAMERA camera id %d",
mCameraId);
+ if (mCameraHandle) {
+ LOGE("Failure: Camera already opened");
+ return ALREADY_EXISTS;
+ }
+
+ {
+ Mutex::Autolock l(gHdrPlusClientLock);
+ if (gEaselManagerClient.isEaselPresentOnDevice()) {
+ logEaselEvent("EASEL_STARTUP_LATENCY", "Resume");
+ rc = gEaselManagerClient.resume();
+ if (rc != 0) {
+ ALOGE("%s: Resuming Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
+ return rc;
+ }
+ }
+ }
+
rc = openCamera();
if (rc == 0) {
*hw_device = &mCameraDevice.common;
} else {
*hw_device = NULL;
+
+ // Suspend Easel because opening camera failed.
+ {
+ Mutex::Autolock l(gHdrPlusClientLock);
+ if (gEaselManagerClient.isEaselPresentOnDevice()) {
+ status_t suspendErr = gEaselManagerClient.suspend();
+ if (suspendErr != 0) {
+ ALOGE("%s: Suspending Easel failed: %s (%d)", __FUNCTION__,
+ strerror(-suspendErr), suspendErr);
+ }
+ }
+ }
}
LOGI("[KPI Perf]: X PROFILE_OPEN_CAMERA camera id %d, rc: %d",
@@ -892,22 +921,6 @@
char value[PROPERTY_VALUE_MAX];
KPI_ATRACE_CAMSCOPE_CALL(CAMSCOPE_HAL3_OPENCAMERA);
- if (mCameraHandle) {
- LOGE("Failure: Camera already opened");
- return ALREADY_EXISTS;
- }
-
- {
- Mutex::Autolock l(gHdrPlusClientLock);
- if (gEaselManagerClient.isEaselPresentOnDevice()) {
- logEaselEvent("EASEL_STARTUP_LATENCY", "Resume");
- rc = gEaselManagerClient.resume();
- if (rc != 0) {
- ALOGE("%s: Resuming Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
- return rc;
- }
- }
- }
rc = QCameraFlash::getInstance().reserveFlashForCamera(mCameraId);
if (rc < 0) {