Delete support for HIDL V3.8
- HIDL camera device@3.8, metadata@3.8 were temporary interfaces
Bug: 221108824
Test: Use GCA (basic validity)
Change-Id: If9ecf3a243dcbf827b8b24f8abd9ae90fc41ba46
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
index 54c826f..6b20a56 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
@@ -21,7 +21,6 @@
#include "CameraProviderManager.h"
#include <aidl/android/hardware/camera/device/ICameraDevice.h>
-#include <android/hardware/camera/device/3.8/ICameraDevice.h>
#include <algorithm>
#include <chrono>
@@ -61,11 +60,6 @@
const float CameraProviderManager::kDepthARTolerance = .1f;
-// AIDL Devices start with major version 1, offset added to bring them up to HIDL.
-const uint16_t kAidlDeviceMajorOffset = 2;
-// AIDL Devices start with minor version 1, offset added to bring them up to HIDL.
-const uint16_t kAidlDeviceMinorOffset = 7;
-
CameraProviderManager::HidlServiceInteractionProxyImpl
CameraProviderManager::sHidlServiceInteractionProxy{};
@@ -280,15 +274,13 @@
return deviceIds;
}
-bool CameraProviderManager::isValidDevice(const std::string &id, uint16_t majorVersion) const {
- std::lock_guard<std::mutex> lock(mInterfaceMutex);
- return isValidDeviceLocked(id, majorVersion);
-}
-
-bool CameraProviderManager::isValidDeviceLocked(const std::string &id, uint16_t majorVersion) const {
+bool CameraProviderManager::isValidDeviceLocked(const std::string &id, uint16_t majorVersion,
+ IPCTransport transport) const {
for (auto& provider : mProviders) {
+ IPCTransport providerTransport = provider->getIPCTransport();
for (auto& deviceInfo : provider->mDevices) {
- if (deviceInfo->mId == id && deviceInfo->mVersion.get_major() == majorVersion) {
+ if (deviceInfo->mId == id && deviceInfo->mVersion.get_major() == majorVersion &&
+ transport == providerTransport) {
return true;
}
}
@@ -369,29 +361,32 @@
return getCameraCharacteristicsLocked(id, overrideForPerfClass, characteristics);
}
-// Till hidl is removed from the android source tree, we use this for aidl as
-// well. We artificially give aidl camera device version 1 a major version 3 and minor
-// version 8.
status_t CameraProviderManager::getHighestSupportedVersion(const std::string &id,
- hardware::hidl_version *v) {
+ hardware::hidl_version *v, IPCTransport *transport) {
+ if (v == nullptr || transport == nullptr) {
+ return BAD_VALUE;
+ }
std::lock_guard<std::mutex> lock(mInterfaceMutex);
hardware::hidl_version maxVersion{0,0};
bool found = false;
+ IPCTransport providerTransport = IPCTransport::INVALID;
for (auto& provider : mProviders) {
for (auto& deviceInfo : provider->mDevices) {
if (deviceInfo->mId == id) {
if (deviceInfo->mVersion > maxVersion) {
maxVersion = deviceInfo->mVersion;
+ providerTransport = provider->getIPCTransport();
found = true;
}
}
}
}
- if (!found) {
+ if (!found || providerTransport == IPCTransport::INVALID) {
return NAME_NOT_FOUND;
}
*v = maxVersion;
+ *transport = providerTransport;
return OK;
}
@@ -613,8 +608,7 @@
std::lock_guard<std::mutex> lock(mInterfaceMutex);
- auto deviceInfo = findDeviceInfoLocked(id,
- /*minVersion*/ {3,0}, /*maxVersion*/ {4,0});
+ auto deviceInfo = findDeviceInfoLocked(id);
if (deviceInfo == nullptr) return NAME_NOT_FOUND;
auto *aidlDeviceInfo3 = static_cast<AidlProviderInfo::AidlDeviceInfo3*>(deviceInfo);
@@ -695,8 +689,7 @@
std::lock_guard<std::mutex> lock(mInterfaceMutex);
- auto deviceInfo = findDeviceInfoLocked(id,
- /*minVersion*/ {3,0}, /*maxVersion*/ {4,0});
+ auto deviceInfo = findDeviceInfoLocked(id);
if (deviceInfo == nullptr) return NAME_NOT_FOUND;
auto *hidlDeviceInfo3 = static_cast<HidlProviderInfo::HidlDeviceInfo3*>(deviceInfo);
@@ -897,9 +890,16 @@
}
CameraProviderManager::ProviderInfo::DeviceInfo* CameraProviderManager::findDeviceInfoLocked(
- const std::string& id,
- hardware::hidl_version minVersion, hardware::hidl_version maxVersion) const {
+ const std::string& id) const {
for (auto& provider : mProviders) {
+ using hardware::hidl_version;
+ IPCTransport transport = provider->getIPCTransport();
+ // AIDL min version starts at major: 1 minor: 1
+ hidl_version minVersion =
+ (transport == IPCTransport::HIDL) ? hidl_version{3, 2} : hidl_version{1, 1} ;
+ hidl_version maxVersion =
+ (transport == IPCTransport::HIDL) ? hidl_version{3, 7} : hidl_version{1000, 0};
+
for (auto& deviceInfo : provider->mDevices) {
if (deviceInfo->mId == id &&
minVersion <= deviceInfo->mVersion && maxVersion >= deviceInfo->mVersion) {
@@ -911,16 +911,13 @@
}
metadata_vendor_id_t CameraProviderManager::getProviderTagIdLocked(
- const std::string& id, hardware::hidl_version minVersion,
- hardware::hidl_version maxVersion) const {
+ const std::string& id) const {
metadata_vendor_id_t ret = CAMERA_METADATA_INVALID_VENDOR_ID;
std::lock_guard<std::mutex> lock(mInterfaceMutex);
for (auto& provider : mProviders) {
for (auto& deviceInfo : provider->mDevices) {
- if (deviceInfo->mId == id &&
- minVersion <= deviceInfo->mVersion &&
- maxVersion >= deviceInfo->mVersion) {
+ if (deviceInfo->mId == id) {
return provider->mProviderTagid;
}
}
@@ -1274,9 +1271,14 @@
status_t CameraProviderManager::ProviderInfo::DeviceInfo3::fixupMonochromeTags() {
status_t res = OK;
auto& c = mCameraCharacteristics;
-
+ sp<ProviderInfo> parentProvider = mParentProvider.promote();
+ if (parentProvider == nullptr) {
+ return DEAD_OBJECT;
+ }
+ IPCTransport ipcTransport = parentProvider->getIPCTransport();
// Override static metadata for MONOCHROME camera with older device version
- if (mVersion.get_major() == 3 && mVersion.get_minor() < 5) {
+ if (ipcTransport == IPCTransport::HIDL &&
+ (mVersion.get_major() == 3 && mVersion.get_minor() < 5)) {
camera_metadata_entry cap = c.find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);
for (size_t i = 0; i < cap.count; i++) {
if (cap.data.u8[i] == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME) {
@@ -1405,7 +1407,8 @@
return res;
}
-status_t CameraProviderManager::ProviderInfo::DeviceInfo3::addReadoutTimestampTag() {
+status_t CameraProviderManager::ProviderInfo::DeviceInfo3::addReadoutTimestampTag(
+ bool readoutTimestampSupported) {
status_t res = OK;
auto& c = mCameraCharacteristics;
@@ -1416,9 +1419,7 @@
}
uint8_t readoutTimestamp = ANDROID_SENSOR_READOUT_TIMESTAMP_NOT_SUPPORTED;
- int deviceVersion = HARDWARE_DEVICE_API_VERSION(
- mVersion.get_major(), mVersion.get_minor());
- if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_8) {
+ if (readoutTimestampSupported) {
readoutTimestamp = ANDROID_SENSOR_READOUT_TIMESTAMP_HARDWARE;
}
@@ -1658,6 +1659,7 @@
}
for (auto& provider : mProviders) {
+ IPCTransport transport = provider->getIPCTransport();
for (auto& deviceInfo : provider->mDevices) {
std::vector<std::string> physicalIds;
if (deviceInfo->mIsLogicalCamera) {
@@ -1665,7 +1667,8 @@
cameraId) != deviceInfo->mPhysicalIds.end()) {
int deviceVersion = HARDWARE_DEVICE_API_VERSION(
deviceInfo->mVersion.get_major(), deviceInfo->mVersion.get_minor());
- if (deviceVersion < CAMERA_DEVICE_API_VERSION_3_5) {
+ if (transport == IPCTransport::HIDL &&
+ deviceVersion < CAMERA_DEVICE_API_VERSION_3_5) {
ALOGE("%s: Wrong deviceVersion %x for hiddenPhysicalCameraId %s",
__FUNCTION__, deviceVersion, cameraId.c_str());
return falseRet;
@@ -1883,39 +1886,49 @@
uint16_t major, minor;
std::string type, id;
+ IPCTransport transport = getIPCTransport();
status_t res = parseDeviceName(name, &major, &minor, &type, &id);
if (res != OK) {
return res;
}
- if (getIPCTransport() == IPCTransport::AIDL) {
- // Till HIDL support exists, map AIDL versions to HIDL.
- // TODO:b/196432585 Explore if we can get rid of this.
- major += kAidlDeviceMajorOffset;
- minor += kAidlDeviceMinorOffset;
- }
if (type != mType) {
ALOGE("%s: Device type %s does not match provider type %s", __FUNCTION__,
type.c_str(), mType.c_str());
return BAD_VALUE;
}
- if (mManager->isValidDeviceLocked(id, major)) {
+ if (mManager->isValidDeviceLocked(id, major, transport)) {
ALOGE("%s: Device %s: ID %s is already in use for device major version %d", __FUNCTION__,
name.c_str(), id.c_str(), major);
return BAD_VALUE;
}
std::unique_ptr<DeviceInfo> deviceInfo;
- switch (major) {
- case 3:
- deviceInfo = initializeDeviceInfo(name, mProviderTagid, id, minor);
+ switch (transport) {
+ case IPCTransport::HIDL:
+ switch (major) {
+ case 3:
+ break;
+ default:
+ ALOGE("%s: Device %s: Unsupported HIDL device HAL major version %d:",
+ __FUNCTION__, name.c_str(), major);
+ return BAD_VALUE;
+ }
+ break;
+ case IPCTransport::AIDL:
+ if (major != 1) {
+ ALOGE("%s: Device %s: Unsupported AIDL device HAL major version %d:", __FUNCTION__,
+ name.c_str(), major);
+ return BAD_VALUE;
+ }
break;
default:
- ALOGE("%s: Device %s: Unsupported IDL device HAL major version %d:", __FUNCTION__,
- name.c_str(), major);
+ ALOGE("%s Invalid transport %d", __FUNCTION__, transport);
return BAD_VALUE;
}
+
+ deviceInfo = initializeDeviceInfo(name, mProviderTagid, id, minor);
if (deviceInfo == nullptr) return BAD_VALUE;
deviceInfo->notifyDeviceStateChange(getDeviceState());
deviceInfo->mStatus = initialStatus;
@@ -2697,7 +2710,7 @@
status_t CameraProviderManager::getCameraCharacteristicsLocked(const std::string &id,
bool overrideForPerfClass, CameraMetadata* characteristics) const {
- auto deviceInfo = findDeviceInfoLocked(id, /*minVersion*/ {3, 0}, /*maxVersion*/ {5, 0});
+ auto deviceInfo = findDeviceInfoLocked(id);
if (deviceInfo != nullptr) {
return deviceInfo->getCameraCharacteristics(overrideForPerfClass, characteristics);
}