From cf935409652e633096729bdb64029cf2383534e3 Mon Sep 17 00:00:00 2001 From: Jayant Chowdhary Date: Wed, 18 Sep 2019 20:14:02 -0700 Subject: [PATCH] Do not include hidden secure cameras in camera1: getNumberOfCameras Apps cannot connect to hidden secure cameras. Do not include them in the number of cameras reported by camera1 api. Bug: 141247926 Test: Without CL -> mark all cameras as hidden secure cameras; atest FastBasicsTest.java#testCamera1 fails With CL -> mark all cameras as hidden secure cameras; atest FastBasicsTest.java#testCamera1 passes Test: camera CTS Merged-In: I9d1721fd5e94fa7f692c3da52aa667ae9247d368 Change-Id: I229a336bed6b2695e16c1457cb8f74c26b07f7e8 Signed-off-by: Jayant Chowdhary --- .../common/CameraProviderManager.cpp | 19 ++++++++++++++++--- .../common/CameraProviderManager.h | 5 ++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp index c72029ff5a..7aa671400f 100644 --- a/services/camera/libcameraservice/common/CameraProviderManager.cpp +++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp @@ -108,7 +108,13 @@ int CameraProviderManager::getCameraCount() const { std::lock_guard lock(mInterfaceMutex); int count = 0; for (auto& provider : mProviders) { - count += provider->mUniqueCameraIds.size(); + for (auto& id : provider->mUniqueCameraIds) { + // Hidden secure camera ids are not to be exposed to camera1 api. + if (isPublicallyHiddenSecureCameraLocked(id)) { + continue; + } + count++; + } } return count; } @@ -134,7 +140,11 @@ std::vector CameraProviderManager::getAPI1CompatibleCameraDeviceIds // for each camera facing, only take the first id advertised by HAL in // all [logical, physical1, physical2, ...] id combos, and filter out the rest. filterLogicalCameraIdsLocked(providerDeviceIds); - + // Hidden secure camera ids are not to be exposed to camera1 api. + providerDeviceIds.erase(std::remove_if(providerDeviceIds.begin(), providerDeviceIds.end(), + [this](const std::string& s) { + return this->isPublicallyHiddenSecureCameraLocked(s);}), + providerDeviceIds.end()); deviceIds.insert(deviceIds.end(), providerDeviceIds.begin(), providerDeviceIds.end()); } @@ -1046,9 +1056,12 @@ bool CameraProviderManager::isLogicalCamera(const std::string& id, return deviceInfo->mIsLogicalCamera; } -bool CameraProviderManager::isPublicallyHiddenSecureCamera(const std::string& id) { +bool CameraProviderManager::isPublicallyHiddenSecureCamera(const std::string& id) const { std::lock_guard lock(mInterfaceMutex); + return isPublicallyHiddenSecureCameraLocked(id); +} +bool CameraProviderManager::isPublicallyHiddenSecureCameraLocked(const std::string& id) const { auto deviceInfo = findDeviceInfoLocked(id); if (deviceInfo == nullptr) { return false; diff --git a/services/camera/libcameraservice/common/CameraProviderManager.h b/services/camera/libcameraservice/common/CameraProviderManager.h index 8cdfc24a9c..01eb56fe10 100644 --- a/services/camera/libcameraservice/common/CameraProviderManager.h +++ b/services/camera/libcameraservice/common/CameraProviderManager.h @@ -272,7 +272,7 @@ public: */ bool isLogicalCamera(const std::string& id, std::vector* physicalCameraIds); - bool isPublicallyHiddenSecureCamera(const std::string& id); + bool isPublicallyHiddenSecureCamera(const std::string& id) const; bool isHiddenPhysicalCamera(const std::string& cameraId); static const float kDepthARTolerance; @@ -594,6 +594,9 @@ private: status_t getCameraCharacteristicsLocked(const std::string &id, CameraMetadata* characteristics) const; + + bool isPublicallyHiddenSecureCameraLocked(const std::string& id) const; + void filterLogicalCameraIdsLocked(std::vector& deviceIds) const; };