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; };