Camera: Add support for hidden physical camera IDs
Support 3_5 HAL device version for querying physical camera
characteristics.
Test: Camera CTS on Pixel devices
Bug: 79523700
Change-Id: I804cdb5dc75553d6b6f9fb42187a76bd69168179
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.h b/services/camera/libcameraservice/common/CameraProviderManager.h
index c523c2d..61e21b4 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.h
+++ b/services/camera/libcameraservice/common/CameraProviderManager.h
@@ -237,6 +237,7 @@
static bool isLogicalCamera(const CameraMetadata& staticInfo,
std::vector<std::string>* physicalCameraIds);
+ bool isHiddenPhysicalCamera(const std::string& cameraId);
private:
// All private members, unless otherwise noted, expect mInterfaceMutex to be locked before use
mutable std::mutex mInterfaceMutex;
@@ -306,17 +307,25 @@
(void) characteristics;
return INVALID_OPERATION;
}
+ virtual status_t getPhysicalCameraCharacteristics(const std::string& physicalCameraId,
+ CameraMetadata *characteristics) const {
+ (void) physicalCameraId;
+ (void) characteristics;
+ return INVALID_OPERATION;
+ }
DeviceInfo(const std::string& name, const metadata_vendor_id_t tagId,
const std::string &id, const hardware::hidl_version& version,
+ const std::vector<std::string>& publicCameraIds,
const hardware::camera::common::V1_0::CameraResourceCost& resourceCost) :
mName(name), mId(id), mVersion(version), mProviderTagid(tagId),
mResourceCost(resourceCost),
mStatus(hardware::camera::common::V1_0::CameraDeviceStatus::PRESENT),
- mHasFlashUnit(false) {}
+ mHasFlashUnit(false), mPublicCameraIds(publicCameraIds) {}
virtual ~DeviceInfo();
protected:
bool mHasFlashUnit;
+ const std::vector<std::string>& mPublicCameraIds;
template<class InterfaceT>
static status_t setTorchMode(InterfaceT& interface, bool enabled);
@@ -325,6 +334,12 @@
std::unordered_set<std::string> mUniqueCameraIds;
int mUniqueDeviceCount;
std::vector<std::string> mUniqueAPI1CompatibleCameraIds;
+ // The initial public camera IDs published by the camera provider.
+ // Currently logical multi-camera is not supported for hot-plug camera.
+ // And we use this list to keep track of initial public camera IDs
+ // advertised by the provider, and to distinguish against "hidden"
+ // physical camera IDs.
+ std::vector<std::string> mProviderPublicCameraIds;
// HALv1-specific camera fields, including the actual device interface
struct DeviceInfo1 : public DeviceInfo {
@@ -339,6 +354,7 @@
DeviceInfo1(const std::string& name, const metadata_vendor_id_t tagId,
const std::string &id, uint16_t minorVersion,
const hardware::camera::common::V1_0::CameraResourceCost& resourceCost,
+ const std::vector<std::string>& publicCameraIds,
sp<InterfaceT> interface);
virtual ~DeviceInfo1();
private:
@@ -356,14 +372,17 @@
virtual status_t dumpState(int fd) const override;
virtual status_t getCameraCharacteristics(
CameraMetadata *characteristics) const override;
+ virtual status_t getPhysicalCameraCharacteristics(const std::string& physicalCameraId,
+ CameraMetadata *characteristics) const override;
DeviceInfo3(const std::string& name, const metadata_vendor_id_t tagId,
const std::string &id, uint16_t minorVersion,
const hardware::camera::common::V1_0::CameraResourceCost& resourceCost,
- sp<InterfaceT> interface);
+ const std::vector<std::string>& publicCameraIds, sp<InterfaceT> interface);
virtual ~DeviceInfo3();
private:
CameraMetadata mCameraCharacteristics;
+ std::unordered_map<std::string, CameraMetadata> mPhysicalCameraCharacteristics;
};
private: