Camera: Handle public physical camera for feature combination query
In case a logical camera contains a physical camera that's publicly
available, we need to make sure that physical camera's characteristics
can be fetched.
The current implementation only stores the hidden physical cameras'
characteristics within the logical camera's DeviceInfo. Querying
a public physical camera's characteristics will fail.
Test: test_multi_camera_alignment on vendor devices
Bug: 331891597
Bug: 331591275
Change-Id: I273ad49b4dba27431eeb4a5240a350051effd343
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
index 89e785a..45c3a1f 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
@@ -421,8 +421,15 @@
return NAME_NOT_FOUND;
}
+ metadataGetter getMetadata = [this](const std::string &id,
+ bool overrideForPerfClass) {
+ CameraMetadata metadata;
+ this->getCameraCharacteristicsLocked(id, overrideForPerfClass,
+ &metadata, /*overrideToPortrait*/false);
+ return metadata;
+ };
return deviceInfo->isSessionConfigurationSupported(configuration,
- overrideForPerfClass, checkSessionParams, status);
+ overrideForPerfClass, getMetadata, checkSessionParams, status);
}
status_t CameraProviderManager::createDefaultRequest(const std::string& cameraId,
@@ -1087,20 +1094,6 @@
}
}
-CameraMetadata CameraProviderManager::ProviderInfo::DeviceInfo3::deviceInfo(
- const std::string &id) {
- if (id.empty()) {
- return mCameraCharacteristics;
- } else {
- if (mPhysicalCameraCharacteristics.find(id) != mPhysicalCameraCharacteristics.end()) {
- return mPhysicalCameraCharacteristics.at(id);
- } else {
- ALOGE("%s: Invalid physical camera id %s", __FUNCTION__, id.c_str());
- return mCameraCharacteristics;
- }
- }
-}
-
SystemCameraKind CameraProviderManager::ProviderInfo::DeviceInfo3::getSystemCameraKind() {
camera_metadata_entry_t entryCap;
entryCap = mCameraCharacteristics.find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);