camera: Delete supportsCameraApi binder call
HAL1 support was removed in Android S. So, all devices are required
to support HAL3 and therefore the camera2 API. Camera1 API is always
supported - until removed.
Bug: 391957505
Flag: EXEMPT; bug fix
Test: Camera CTS
Change-Id: I80fae67c27cf2c9bebb8415cbf52574f7196141e
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/camera/aidl/android/hardware/ICameraService.aidl b/camera/aidl/android/hardware/ICameraService.aidl
index 6431737..779c4a2 100644
--- a/camera/aidl/android/hardware/ICameraService.aidl
+++ b/camera/aidl/android/hardware/ICameraService.aidl
@@ -261,14 +261,6 @@
*/
@utf8InCpp String getLegacyParameters(int cameraId);
- /**
- * apiVersion constants for supportsCameraApi
- */
- const int API_VERSION_1 = 1;
- const int API_VERSION_2 = 2;
-
- // Determines if a particular API version is supported directly for a cameraId.
- boolean supportsCameraApi(@utf8InCpp String cameraId, int apiVersion);
// Determines if a cameraId is a hidden physical camera of a logical multi-camera.
boolean isHiddenPhysicalCamera(@utf8InCpp String cameraId);
// Inject the external camera to replace the internal camera session.
diff --git a/camera/ndk/impl/ACameraManager.cpp b/camera/ndk/impl/ACameraManager.cpp
index acd7917..7e647e4 100644
--- a/camera/ndk/impl/ACameraManager.cpp
+++ b/camera/ndk/impl/ACameraManager.cpp
@@ -376,17 +376,12 @@
const auto& [_, newlyRegistered] = mCallbacks.insert(cb);
// Send initial callbacks if callback is newly registered
if (newlyRegistered) {
- for (auto& [key, statusAndHAL3Support] : mDeviceStatusMap) {
+ for (auto& [key, logicalAndPhysicalStatus] : mDeviceStatusMap) {
if (!isCameraAccessible(deviceContext, key.deviceId)) {
continue;
}
const std::string& cameraId = key.cameraId;
- int32_t status = statusAndHAL3Support.getStatus();
- // Don't send initial callbacks for camera ids which don't support
- // camera2
- if (!statusAndHAL3Support.supportsHAL3) {
- continue;
- }
+ int32_t status = logicalAndPhysicalStatus.getStatus();
// Camera available/unavailable callback
sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
@@ -400,7 +395,7 @@
// Physical camera unavailable callback
std::set<std::string> unavailablePhysicalCameras =
- statusAndHAL3Support.getUnavailablePhysicalIds();
+ logicalAndPhysicalStatus.getUnavailablePhysicalIds();
for (const auto& physicalCameraId : unavailablePhysicalCameras) {
sp<AMessage> msg = new AMessage(kWhatSendSinglePhysicalCameraCallback, mHandler);
ACameraManager_PhysicalCameraAvailabilityCallback cbFunc =
@@ -416,42 +411,23 @@
}
}
-bool CameraManagerGlobal::supportsCamera2ApiLocked(const std::string &cameraId) {
- bool camera2Support = false;
- auto cs = getCameraServiceLocked();
- if (cs == nullptr) {
- return false;
- }
- binder::Status serviceRet =
- cs->supportsCameraApi(cameraId,
- hardware::ICameraService::API_VERSION_2, &camera2Support);
- if (!serviceRet.isOk()) {
- ALOGE("%s: supportsCameraApi2Locked() call failed for cameraId %s",
- __FUNCTION__, cameraId.c_str());
- return false;
- }
- return camera2Support;
-}
-
void CameraManagerGlobal::getCameraIdList(const DeviceContext& context,
std::vector<std::string>* cameraIds) {
// Ensure that we have initialized/refreshed the list of available devices
Mutex::Autolock _l(mLock);
// Needed to make sure we're connected to cameraservice
getCameraServiceLocked();
- for (auto& [key, statusAndHAL3Support] : mDeviceStatusMap) {
+ for (auto& [key, logicalAndPhysicalStatus] : mDeviceStatusMap) {
if (!isCameraAccessible(context, key.deviceId)) {
continue;
}
- int32_t status = statusAndHAL3Support.getStatus();
+ int32_t status = logicalAndPhysicalStatus.getStatus();
if (status == hardware::ICameraServiceListener::STATUS_NOT_PRESENT ||
status == hardware::ICameraServiceListener::STATUS_ENUMERATING) {
continue;
}
- if (!statusAndHAL3Support.supportsHAL3) {
- continue;
- }
+
cameraIds->push_back(key.cameraId);
}
}
@@ -649,28 +625,25 @@
return;
}
- bool supportsHAL3 = supportsCamera2ApiLocked(cameraId);
if (firstStatus) {
mDeviceStatusMap.emplace(std::piecewise_construct, std::forward_as_tuple(key),
- std::forward_as_tuple(status, supportsHAL3));
+ std::forward_as_tuple(status));
} else {
mDeviceStatusMap[key].updateStatus(status);
}
// Iterate through all registered callbacks
- if (supportsHAL3) {
- for (auto cb : mCallbacks) {
- if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
- continue;
- }
- sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
- ACameraManager_AvailabilityCallback cbFp = isStatusAvailable(status) ?
- cb.mAvailable : cb.mUnavailable;
- msg->setPointer(kCallbackFpKey, (void *) cbFp);
- msg->setPointer(kContextKey, cb.mContext);
- msg->setString(kCameraIdKey, AString(cameraId.c_str()));
- mPendingCallbackCnt++;
- msg->post();
+ for (auto cb : mCallbacks) {
+ if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
+ continue;
}
+ sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
+ ACameraManager_AvailabilityCallback cbFp = isStatusAvailable(status) ?
+ cb.mAvailable : cb.mUnavailable;
+ msg->setPointer(kCallbackFpKey, (void *) cbFp);
+ msg->setPointer(kContextKey, cb.mContext);
+ msg->setString(kCameraIdKey, AString(cameraId.c_str()));
+ mPendingCallbackCnt++;
+ msg->post();
}
if (status == hardware::ICameraServiceListener::STATUS_NOT_PRESENT) {
mDeviceStatusMap.erase(key);
@@ -705,8 +678,6 @@
return;
}
- bool supportsHAL3 = supportsCamera2ApiLocked(cameraId);
-
bool updated = false;
if (status == hardware::ICameraServiceListener::STATUS_PRESENT) {
updated = mDeviceStatusMap[key].removeUnavailablePhysicalId(physicalCameraId);
@@ -715,7 +686,7 @@
}
// Iterate through all registered callbacks
- if (supportsHAL3 && updated) {
+ if (updated) {
for (auto cb : mCallbacks) {
if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
continue;
@@ -733,31 +704,31 @@
}
}
-int32_t CameraManagerGlobal::StatusAndHAL3Support::getStatus() {
+int32_t CameraManagerGlobal::Status::getStatus() {
std::lock_guard<std::mutex> lock(mLock);
return status;
}
-void CameraManagerGlobal::StatusAndHAL3Support::updateStatus(int32_t newStatus) {
+void CameraManagerGlobal::Status::updateStatus(int32_t newStatus) {
std::lock_guard<std::mutex> lock(mLock);
status = newStatus;
}
-bool CameraManagerGlobal::StatusAndHAL3Support::addUnavailablePhysicalId(
+bool CameraManagerGlobal::Status::addUnavailablePhysicalId(
const std::string& physicalCameraId) {
std::lock_guard<std::mutex> lock(mLock);
auto result = unavailablePhysicalIds.insert(physicalCameraId);
return result.second;
}
-bool CameraManagerGlobal::StatusAndHAL3Support::removeUnavailablePhysicalId(
+bool CameraManagerGlobal::Status::removeUnavailablePhysicalId(
const std::string& physicalCameraId) {
std::lock_guard<std::mutex> lock(mLock);
auto count = unavailablePhysicalIds.erase(physicalCameraId);
return count > 0;
}
-std::set<std::string> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() {
+std::set<std::string> CameraManagerGlobal::Status::getUnavailablePhysicalIds() {
std::lock_guard<std::mutex> lock(mLock);
return unavailablePhysicalIds;
}
diff --git a/camera/ndk/impl/ACameraManager.h b/camera/ndk/impl/ACameraManager.h
index fffe037..04f1ac4 100644
--- a/camera/ndk/impl/ACameraManager.h
+++ b/camera/ndk/impl/ACameraManager.h
@@ -260,18 +260,16 @@
// Utils for status
static bool validStatus(int32_t status);
static bool isStatusAvailable(int32_t status);
- bool supportsCamera2ApiLocked(const std::string &cameraId);
- struct StatusAndHAL3Support {
+ struct Status {
private:
int32_t status = hardware::ICameraServiceListener::STATUS_NOT_PRESENT;
mutable std::mutex mLock;
std::set<std::string> unavailablePhysicalIds;
public:
- const bool supportsHAL3 = false;
- StatusAndHAL3Support(int32_t st, bool HAL3support):
- status(st), supportsHAL3(HAL3support) { };
- StatusAndHAL3Support() = default;
+ Status(int32_t st):
+ status(st) { };
+ Status() = default;
bool addUnavailablePhysicalId(const std::string& physicalCameraId);
bool removeUnavailablePhysicalId(const std::string& physicalCameraId);
@@ -308,7 +306,7 @@
}
};
- std::map<DeviceStatusMapKey, StatusAndHAL3Support> mDeviceStatusMap;
+ std::map<DeviceStatusMapKey, Status> mDeviceStatusMap;
// For the singleton instance
static Mutex sLock;
diff --git a/camera/tests/CameraBinderTests.cpp b/camera/tests/CameraBinderTests.cpp
index 7f99b70..b6b5492 100644
--- a/camera/tests/CameraBinderTests.cpp
+++ b/camera/tests/CameraBinderTests.cpp
@@ -389,15 +389,6 @@
for (int32_t i = 0; i < numCameras; i++) {
std::string cameraId = std::to_string(i);
- bool isSupported = false;
- res = service->supportsCameraApi(cameraId,
- hardware::ICameraService::API_VERSION_2, &isSupported);
- EXPECT_TRUE(res.isOk()) << res;
-
- // We only care about binder calls for the Camera2 API. Camera1 is deprecated.
- if (!isSupported) {
- continue;
- }
// Check metadata binder call
CameraMetadata metadata;
diff --git a/camera/tests/CameraCharacteristicsPermission.cpp b/camera/tests/CameraCharacteristicsPermission.cpp
index 9204eb1..5056c3e 100644
--- a/camera/tests/CameraCharacteristicsPermission.cpp
+++ b/camera/tests/CameraCharacteristicsPermission.cpp
@@ -66,19 +66,12 @@
TEST_F(CameraCharacteristicsPermission, TestCameraPermission) {
for (int32_t cameraId = 0; cameraId < numCameras; cameraId++) {
std::string cameraIdStr = std::to_string(cameraId);
- bool isSupported = false;
- auto rc = mCameraService->supportsCameraApi(cameraIdStr,
- hardware::ICameraService::API_VERSION_2, &isSupported);
- EXPECT_TRUE(rc.isOk());
- if (!isSupported) {
- continue;
- }
CameraMetadata metadata;
std::vector<int32_t> tagsNeedingPermission;
AttributionSourceState clientAttribution;
clientAttribution.deviceId = kDefaultDeviceId;
- rc = mCameraService->getCameraCharacteristics(cameraIdStr,
+ auto rc = mCameraService->getCameraCharacteristics(cameraIdStr,
/*targetSdkVersion*/__ANDROID_API_FUTURE__,
/*overrideToPortrait*/false, clientAttribution, /*devicePolicy*/0, &metadata);
ASSERT_TRUE(rc.isOk());
diff --git a/camera/tests/CameraZSLTests.cpp b/camera/tests/CameraZSLTests.cpp
index b06f9b4..2a2fcc9 100644
--- a/camera/tests/CameraZSLTests.cpp
+++ b/camera/tests/CameraZSLTests.cpp
@@ -176,15 +176,6 @@
sp<ICamera> cameraDevice;
std::string cameraIdStr = std::to_string(cameraId);
- bool isSupported = false;
- rc = mCameraService->supportsCameraApi(cameraIdStr,
- hardware::ICameraService::API_VERSION_1, &isSupported);
- EXPECT_TRUE(rc.isOk());
-
- // We only care about camera Camera1 ZSL support.
- if (!isSupported) {
- continue;
- }
CameraMetadata metadata;
AttributionSourceState clientAttribution;
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index d13e5db..bf4ed48 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -3595,71 +3595,6 @@
return ret;
}
-Status CameraService::supportsCameraApi(const std::string& cameraId, int apiVersion,
- /*out*/ bool *isSupported) {
- ATRACE_CALL();
-
- ALOGV("%s: for camera ID = %s", __FUNCTION__, cameraId.c_str());
-
- switch (apiVersion) {
- case API_VERSION_1:
- case API_VERSION_2:
- break;
- default:
- std::string msg = fmt::sprintf("Unknown API version %d", apiVersion);
- ALOGE("%s: %s", __FUNCTION__, msg.c_str());
- return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.c_str());
- }
-
- int portraitRotation;
- auto deviceVersionAndTransport =
- getDeviceVersion(cameraId,
- /*rotationOverride*/hardware::ICameraService::ROTATION_OVERRIDE_NONE,
- &portraitRotation);
- if (deviceVersionAndTransport.first == -1) {
- std::string msg = fmt::sprintf("Unknown camera ID %s", cameraId.c_str());
- ALOGE("%s: %s", __FUNCTION__, msg.c_str());
- return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.c_str());
- }
- if (deviceVersionAndTransport.second == IPCTransport::HIDL) {
- int deviceVersion = deviceVersionAndTransport.first;
- switch (deviceVersion) {
- case CAMERA_DEVICE_API_VERSION_1_0:
- case CAMERA_DEVICE_API_VERSION_3_0:
- case CAMERA_DEVICE_API_VERSION_3_1:
- if (apiVersion == API_VERSION_2) {
- ALOGV("%s: Camera id %s uses HAL version %d <3.2, doesn't support api2 without "
- "shim", __FUNCTION__, cameraId.c_str(), deviceVersion);
- *isSupported = false;
- } else { // if (apiVersion == API_VERSION_1) {
- ALOGV("%s: Camera id %s uses older HAL before 3.2, but api1 is always "
- "supported", __FUNCTION__, cameraId.c_str());
- *isSupported = true;
- }
- break;
- case CAMERA_DEVICE_API_VERSION_3_2:
- case CAMERA_DEVICE_API_VERSION_3_3:
- case CAMERA_DEVICE_API_VERSION_3_4:
- case CAMERA_DEVICE_API_VERSION_3_5:
- case CAMERA_DEVICE_API_VERSION_3_6:
- case CAMERA_DEVICE_API_VERSION_3_7:
- ALOGV("%s: Camera id %s uses HAL3.2 or newer, supports api1/api2 directly",
- __FUNCTION__, cameraId.c_str());
- *isSupported = true;
- break;
- default: {
- std::string msg = fmt::sprintf("Unknown device version %x for device %s",
- deviceVersion, cameraId.c_str());
- ALOGE("%s: %s", __FUNCTION__, msg.c_str());
- return STATUS_ERROR(ERROR_INVALID_OPERATION, msg.c_str());
- }
- }
- } else {
- *isSupported = true;
- }
- return Status::ok();
-}
-
Status CameraService::isHiddenPhysicalCamera(const std::string& cameraId,
/*out*/ bool *isSupported) {
ATRACE_CALL();
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index c4d2d67..59d9647 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -225,12 +225,6 @@
virtual binder::Status notifyDisplayConfigurationChange();
- // OK = supports api of that version, -EOPNOTSUPP = does not support
- virtual binder::Status supportsCameraApi(
- const std::string& cameraId, int32_t apiVersion,
- /*out*/
- bool *isSupported);
-
virtual binder::Status isHiddenPhysicalCamera(
const std::string& cameraId,
/*out*/
diff --git a/services/camera/libcameraservice/aidl/AidlCameraService.cpp b/services/camera/libcameraservice/aidl/AidlCameraService.cpp
index 46e2280..9deb9ae 100644
--- a/services/camera/libcameraservice/aidl/AidlCameraService.cpp
+++ b/services/camera/libcameraservice/aidl/AidlCameraService.cpp
@@ -283,16 +283,6 @@
return convertToAidl(serviceRet);
}
- cameraStatusAndIds->erase(std::remove_if(cameraStatusAndIds->begin(),
- cameraStatusAndIds->end(),
- [this](const hardware::CameraStatus& s) {
- bool supportsHAL3 = false;
- binder::Status sRet =
- mCameraService->supportsCameraApi(s.cameraId,
- UICameraService::API_VERSION_2, &supportsHAL3);
- return !sRet.isOk() || !supportsHAL3;
- }), cameraStatusAndIds->end());
-
return SStatus::NO_ERROR;
}
ndk::ScopedAStatus AidlCameraService::removeListener(
diff --git a/services/camera/libcameraservice/hidl/HidlCameraService.cpp b/services/camera/libcameraservice/hidl/HidlCameraService.cpp
index 9e66236..80f3463 100644
--- a/services/camera/libcameraservice/hidl/HidlCameraService.cpp
+++ b/services/camera/libcameraservice/hidl/HidlCameraService.cpp
@@ -254,15 +254,6 @@
status = B2HStatus(serviceRet);
return status;
}
- cameraStatusAndIds->erase(std::remove_if(cameraStatusAndIds->begin(), cameraStatusAndIds->end(),
- [this](const hardware::CameraStatus& s) {
- bool supportsHAL3 = false;
- binder::Status sRet =
- mAidlICameraService->supportsCameraApi(s.cameraId,
- hardware::ICameraService::API_VERSION_2, &supportsHAL3);
- return !sRet.isOk() || !supportsHAL3;
- }), cameraStatusAndIds->end());
-
return HStatus::NO_ERROR;
}
diff --git a/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp b/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
index 4651a48..f3c5472 100644
--- a/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
+++ b/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
@@ -67,8 +67,6 @@
const size_t kMaxArgs = 5;
const int32_t kCamType[] = {hardware::ICameraService::CAMERA_TYPE_BACKWARD_COMPATIBLE,
hardware::ICameraService::CAMERA_TYPE_ALL};
-const int kCameraApiVersion[] = {android::CameraService::API_VERSION_1,
- android::CameraService::API_VERSION_2};
const uint8_t kSensorPixelModes[] = {ANDROID_SENSOR_PIXEL_MODE_DEFAULT,
ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION};
const int32_t kRequestTemplates[] = {
@@ -432,8 +430,6 @@
void CameraFuzzer::getCameraInformation(int32_t cameraId) {
std::string cameraIdStr = std::to_string(cameraId);
bool isSupported = false;
- mCameraService->supportsCameraApi(
- cameraIdStr, kCameraApiVersion[mFuzzedDataProvider->ConsumeBool()], &isSupported);
mCameraService->isHiddenPhysicalCamera(cameraIdStr, &isSupported);
std::string parameters;