QCamera3: Update for HDR+ header changes
Update for HDR+ header changes to support AOSP builds.
Test: Camera CTS
Bug: 36403152
Change-Id: I7124148d8a7bdedaf78e195185cea4534d5109b4
diff --git a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
index cbc185d..e75e057 100644
--- a/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
+++ b/msm8998/QCamera2/HAL3/QCamera3HWI.cpp
@@ -145,7 +145,7 @@
// Note that this doesn't support concurrent front and back camera b/35960155.
// The following Easel related variables must be protected by gHdrPlusClientLock.
-EaselManagerClient gEaselManagerClient;
+std::unique_ptr<EaselManagerClient> gEaselManagerClient;
bool EaselManagerClientOpened = false; // If gEaselManagerClient is opened.
std::unique_ptr<HdrPlusClient> gHdrPlusClient = nullptr;
bool gHdrPlusClientOpening = false; // If HDR+ client is being opened.
@@ -874,9 +874,9 @@
{
std::unique_lock<std::mutex> l(gHdrPlusClientLock);
- if (gEaselManagerClient.isEaselPresentOnDevice()) {
+ if (gEaselManagerClient != nullptr && gEaselManagerClient->isEaselPresentOnDevice()) {
logEaselEvent("EASEL_STARTUP_LATENCY", "Resume");
- rc = gEaselManagerClient.resume();
+ rc = gEaselManagerClient->resume();
if (rc != 0) {
ALOGE("%s: Resuming Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
return rc;
@@ -893,8 +893,8 @@
// Suspend Easel because opening camera failed.
{
std::unique_lock<std::mutex> l(gHdrPlusClientLock);
- if (gEaselManagerClient.isEaselPresentOnDevice()) {
- status_t suspendErr = gEaselManagerClient.suspend();
+ if (gEaselManagerClient != nullptr && gEaselManagerClient->isEaselPresentOnDevice()) {
+ status_t suspendErr = gEaselManagerClient->suspend();
if (suspendErr != 0) {
ALOGE("%s: Suspending Easel failed: %s (%d)", __FUNCTION__,
strerror(-suspendErr), suspendErr);
@@ -1094,17 +1094,17 @@
// Disable HDR+ mode.
disableHdrPlusModeLocked();
// Disconnect Easel if it's connected.
- gEaselManagerClient.closeHdrPlusClient(std::move(gHdrPlusClient));
+ gEaselManagerClient->closeHdrPlusClient(std::move(gHdrPlusClient));
gHdrPlusClient = nullptr;
}
if (EaselManagerClientOpened) {
- rc = gEaselManagerClient.stopMipi(mCameraId);
+ rc = gEaselManagerClient->stopMipi(mCameraId);
if (rc != 0) {
ALOGE("%s: Stopping MIPI failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
}
- rc = gEaselManagerClient.suspend();
+ rc = gEaselManagerClient->suspend();
if (rc != 0) {
ALOGE("%s: Suspending Easel failed: %s (%d)", __FUNCTION__, strerror(-rc), rc);
}
@@ -5967,8 +5967,8 @@
if (EaselManagerClientOpened) {
logEaselEvent("EASEL_STARTUP_LATENCY", "Starting MIPI");
- rc = gEaselManagerClient.startMipi(mCameraId, mSensorModeInfo.op_pixel_clk,
- /*enableIpu*/true);
+ rc = gEaselManagerClient->startMipi(mCameraId, mSensorModeInfo.op_pixel_clk,
+ /*enableCapture*/true);
if (rc != OK) {
ALOGE("%s: Failed to start MIPI rate for camera %u to %u", __FUNCTION__,
mCameraId, mSensorModeInfo.op_pixel_clk);
@@ -5994,7 +5994,7 @@
// Enable HDR+ mode for the first PREVIEW_INTENT request.
{
std::unique_lock<std::mutex> l(gHdrPlusClientLock);
- if (gEaselManagerClient.isEaselPresentOnDevice() &&
+ if (gEaselManagerClient != nullptr && gEaselManagerClient->isEaselPresentOnDevice() &&
!gEaselBypassOnly && !mFirstPreviewIntentSeen &&
meta.exists(ANDROID_CONTROL_CAPTURE_INTENT) &&
meta.find(ANDROID_CONTROL_CAPTURE_INTENT).data.u8[0] ==
@@ -10553,7 +10553,8 @@
char *eepromInfo = reinterpret_cast<char *>(gCamCapability[cameraId]->eeprom_version_info);
if (eepromLength + sizeof(easelInfo) < MAX_EEPROM_VERSION_INFO_LEN) {
eepromLength += sizeof(easelInfo);
- strlcat(eepromInfo, (gEaselManagerClient.isEaselPresentOnDevice() ? ",E:Y" : ",E:N"),
+ strlcat(eepromInfo, ((gEaselManagerClient != nullptr &&
+ gEaselManagerClient->isEaselPresentOnDevice()) ? ",E:Y" : ",E:N"),
MAX_EEPROM_VERSION_INFO_LEN);
}
staticInfo.update(NEXUS_EXPERIMENTAL_2017_EEPROM_VERSION_INFO,
@@ -10773,7 +10774,15 @@
}
int QCamera3HardwareInterface::initHdrPlusClientLocked() {
- if (!EaselManagerClientOpened && gEaselManagerClient.isEaselPresentOnDevice()) {
+ if (gEaselManagerClient == nullptr) {
+ gEaselManagerClient = EaselManagerClient::create();
+ if (gEaselManagerClient == nullptr) {
+ ALOGE("%s: Failed to create Easel manager client.", __FUNCTION__);
+ return -ENODEV;
+ }
+ }
+
+ if (!EaselManagerClientOpened && gEaselManagerClient->isEaselPresentOnDevice()) {
// Check if HAL should not power on Easel even if it's present. This is to allow HDR+ tests
// to connect to Easel.
bool doNotpowerOnEasel =
@@ -10785,7 +10794,7 @@
}
// If Easel is present, power on Easel and suspend it immediately.
- status_t res = gEaselManagerClient.open();
+ status_t res = gEaselManagerClient->open();
if (res != OK) {
ALOGE("%s: Opening Easel manager client failed: %s (%d)", __FUNCTION__, strerror(-res), res);
return res;
@@ -10793,7 +10802,7 @@
EaselManagerClientOpened = true;
- res = gEaselManagerClient.suspend();
+ res = gEaselManagerClient->suspend();
if (res != OK) {
ALOGE("%s: Suspending Easel failed: %s (%d)", __FUNCTION__, strerror(-res), res);
}
@@ -14500,7 +14509,7 @@
return OK;
}
- status_t res = gEaselManagerClient.openHdrPlusClientAsync(this);
+ status_t res = gEaselManagerClient->openHdrPlusClientAsync(this);
if (res != OK) {
ALOGE("%s: Opening HDR+ client asynchronously failed: %s (%d)", __FUNCTION__,
strerror(-res), res);
@@ -14575,7 +14584,7 @@
}
// Close HDR+ client so Easel can enter low power mode.
- gEaselManagerClient.closeHdrPlusClient(std::move(gHdrPlusClient));
+ gEaselManagerClient->closeHdrPlusClient(std::move(gHdrPlusClient));
gHdrPlusClient = nullptr;
}
@@ -14677,7 +14686,7 @@
if (res != OK) {
LOGE("%s: Failed to set static metadata in HDR+ client: %s (%d). Closing HDR+ client.",
__FUNCTION__, strerror(-res), res);
- gEaselManagerClient.closeHdrPlusClient(std::move(gHdrPlusClient));
+ gEaselManagerClient->closeHdrPlusClient(std::move(gHdrPlusClient));
gHdrPlusClient = nullptr;
return;
}