Camera: patching treble camera HAL
Bug fixes like deadlock resolution, wrong enum usage etc.
Bug: 30985004
Test: run Camera2 API CTS tests on Angler
Change-Id: I661fa9197f66344ddecca8f68d343c891806eca1
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index d9ac261..9617d8d 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -101,7 +101,7 @@
std::string cameraIdStr(camera_id);
TorchModeStatus status = (TorchModeStatus) new_status;
for (auto const& deviceNamePair : cp->mCameraDeviceNames) {
- if (cameraIdStr.compare(getLegacyCameraId(deviceNamePair.first)) == 0) {
+ if (cameraIdStr.compare(deviceNamePair.first) == 0) {
cp->mCallbacks->torchModeStatusChange(
deviceNamePair.second, status);
}
@@ -142,7 +142,7 @@
return -1;
}
if (sm[1].compare(kHAL3_2) == 0) {
- // maybe switched to 3.4 or define the hidl version enumlater
+ // maybe switched to 3.4 or define the hidl version enum later
return CAMERA_DEVICE_API_VERSION_3_2;
} else if (sm[1].compare(kHAL1_0) == 0) {
return CAMERA_DEVICE_API_VERSION_1_0;
@@ -229,8 +229,8 @@
// Setup vendor tags here so HAL can setup vendor keys in camera characteristics
VendorTagDescriptor::clearGlobalVendorTagDescriptor();
- setUpVendorTags();
- return false;
+ bool setupSucceed = setUpVendorTags();
+ return !setupSucceed; // return flag here is mInitFailed
}
bool CameraProvider::setUpVendorTags() {
@@ -311,7 +311,7 @@
}
}
hidl_vec<hidl_string> hidlDeviceNameList(deviceNameList);
- _hidl_cb (Status::OK, hidlDeviceNameList);
+ _hidl_cb(Status::OK, hidlDeviceNameList);
return Void();
}
@@ -321,12 +321,14 @@
return Void();
}
-Return<void> CameraProvider::getCameraDeviceInterface_V1_x(const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb /*_hidl_cb*/) {
+Return<void> CameraProvider::getCameraDeviceInterface_V1_x(
+ const hidl_string& /*cameraDeviceName*/, getCameraDeviceInterface_V1_x_cb /*_hidl_cb*/) {
// TODO implement after device 1.0 is implemented
return Void();
}
-Return<void> CameraProvider::getCameraDeviceInterface_V3_x(const hidl_string& cameraDeviceName, getCameraDeviceInterface_V3_x_cb _hidl_cb) {
+Return<void> CameraProvider::getCameraDeviceInterface_V3_x(
+ const hidl_string& cameraDeviceName, getCameraDeviceInterface_V3_x_cb _hidl_cb) {
std::smatch sm;
bool match = matchDeviceName(cameraDeviceName, sm);
if (!match) {
@@ -335,14 +337,18 @@
}
std::string cameraId = sm[2];
+ std::string deviceVersion = sm[1];
std::string deviceName(cameraDeviceName.c_str());
ssize_t index = mCameraDeviceNames.indexOf(std::make_pair(cameraId, deviceName));
if (index == NAME_NOT_FOUND) { // Either an illegal name or a device version mismatch
Status status = Status::OK;
ssize_t idx = mCameraIds.indexOf(cameraId);
if (idx == NAME_NOT_FOUND) {
+ ALOGE("%s: cannot find camera %s!", __FUNCTION__, cameraId.c_str());
status = Status::ILLEGAL_ARGUMENT;
} else { // invalid version
+ ALOGE("%s: camera device %s does not support version %s!",
+ __FUNCTION__, cameraId.c_str(), deviceVersion.c_str());
status = Status::OPERATION_NOT_SUPPORTED;
}
_hidl_cb(status, nullptr);
@@ -364,13 +370,13 @@
mModule, cameraId, mCameraDeviceNames);
if (device == nullptr) {
- ALOGE("%s: cannot allocate camera device!", __FUNCTION__);
+ ALOGE("%s: cannot allocate camera device for id %s", __FUNCTION__, cameraId.c_str());
_hidl_cb(Status::INTERNAL_ERROR, nullptr);
return Void();
}
if (device->isInitFailed()) {
- ALOGE("%s: camera device init failed!", __FUNCTION__);
+ ALOGE("%s: camera device %s init failed!", __FUNCTION__, cameraId.c_str());
device = nullptr;
_hidl_cb(Status::INTERNAL_ERROR, nullptr);
return Void();