cameraservice: Make getSessionCharacteristics accessible earlier
The current implementation of getSessionCharacteristics forced Camera2
to open a corresponding CameraDevice. However, there is no technical
limitation that prevents getSessionCharacteristics from being
accessible before an openCamera call.
This CL moves the getSessionCharacteristics to be a function in
ICameraService instead of ICameraDeviceUser which allows camera2
to call getSessionCharacteristics before calling openCamera
for a given device.
Bug: 320741775
Test: atest CtsCameraTestCases:CameraDeviceTest passes.
Test: atest CtsCameraTestCases:FeatureCombinationTest passes.
Test: atest CtsCameraTestCases:CameraDeviceSetupTest passes.
Test: atest cameraservice_test passes.
Change-Id: Ia21f882fac5ece59dcd6a70e04b2f81ef6dee4c3
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
index 2e471be..15e2755 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
@@ -459,19 +459,31 @@
return OK;
}
-status_t CameraProviderManager::getSessionCharacteristics(const std::string& id,
- const SessionConfiguration &configuration, bool overrideForPerfClass,
- metadataGetter getMetadata,
- CameraMetadata* sessionCharacteristics /*out*/) const {
+status_t CameraProviderManager::getSessionCharacteristics(
+ const std::string& id, const SessionConfiguration& configuration, bool overrideForPerfClass,
+ bool overrideToPortrait, CameraMetadata* sessionCharacteristics /*out*/) const {
if (!flags::feature_combination_query()) {
return INVALID_OPERATION;
}
+
std::lock_guard<std::mutex> lock(mInterfaceMutex);
auto deviceInfo = findDeviceInfoLocked(id);
if (deviceInfo == nullptr) {
return NAME_NOT_FOUND;
}
+ metadataGetter getMetadata = [this, overrideToPortrait](const std::string& id,
+ bool overrideForPerfClass) {
+ CameraMetadata metadata;
+ status_t ret = this->getCameraCharacteristicsLocked(id, overrideForPerfClass, &metadata,
+ overrideToPortrait);
+ if (ret != OK) {
+ ALOGE("%s: Could not get CameraCharacteristics for device %s", __FUNCTION__,
+ id.c_str());
+ }
+ return metadata;
+ };
+
return deviceInfo->getSessionCharacteristics(configuration,
overrideForPerfClass, getMetadata, sessionCharacteristics);
}