mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Merge "camera: add support for camera removal" am: cf99978291 am: 040c21f6c8
am: 3724fbedef
Change-Id: Ic32fd930f90515a74d1e44e4a3e932d20d7970ff
This commit is contained in:
committed by
android-build-merger
commit
6d2d1307e6
@@ -425,6 +425,13 @@ status_t CameraModule::filterOpenErrorCode(status_t err) {
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
void CameraModule::removeCamera(int cameraId) {
|
||||
free_camera_metadata(
|
||||
const_cast<camera_metadata_t*>(mCameraInfoMap[cameraId].static_camera_characteristics));
|
||||
mCameraInfoMap.removeItem(cameraId);
|
||||
mDeviceVersionMap.removeItem(cameraId);
|
||||
}
|
||||
|
||||
uint16_t CameraModule::getModuleApiVersion() const {
|
||||
return mModule->common.module_api_version;
|
||||
}
|
||||
|
||||
@@ -63,6 +63,8 @@ public:
|
||||
const char* getModuleAuthor() const;
|
||||
// Only used by CameraModuleFixture native test. Do NOT use elsewhere.
|
||||
void *getDso();
|
||||
// Only used by CameraProvider
|
||||
void removeCamera(int cameraId);
|
||||
|
||||
private:
|
||||
// Derive camera characteristics keys defined after HAL device version
|
||||
|
||||
@@ -106,6 +106,30 @@ void CameraProvider::addDeviceNames(int camera_id, CameraDeviceStatus status, bo
|
||||
}
|
||||
}
|
||||
|
||||
void CameraProvider::removeDeviceNames(int camera_id)
|
||||
{
|
||||
std::string cameraIdStr = std::to_string(camera_id);
|
||||
|
||||
mCameraIds.remove(cameraIdStr);
|
||||
|
||||
int deviceVersion = mModule->getDeviceVersion(camera_id);
|
||||
auto deviceNamePair = std::make_pair(cameraIdStr,
|
||||
getHidlDeviceName(cameraIdStr, deviceVersion));
|
||||
mCameraDeviceNames.remove(deviceNamePair);
|
||||
mCallbacks->cameraDeviceStatusChange(deviceNamePair.second, CameraDeviceStatus::NOT_PRESENT);
|
||||
if (deviceVersion >= CAMERA_DEVICE_API_VERSION_3_2 &&
|
||||
mModule->isOpenLegacyDefined() && mOpenLegacySupported[cameraIdStr]) {
|
||||
|
||||
deviceNamePair = std::make_pair(cameraIdStr,
|
||||
getHidlDeviceName(cameraIdStr, CAMERA_DEVICE_API_VERSION_1_0));
|
||||
mCameraDeviceNames.remove(deviceNamePair);
|
||||
mCallbacks->cameraDeviceStatusChange(deviceNamePair.second,
|
||||
CameraDeviceStatus::NOT_PRESENT);
|
||||
}
|
||||
|
||||
mModule->removeCamera(camera_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* static callback forwarding methods from HAL to instance
|
||||
*/
|
||||
@@ -137,8 +161,17 @@ void CameraProvider::sCameraDeviceStatusChange(
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
cp->addDeviceNames(camera_id, status, true);
|
||||
switch (status) {
|
||||
case CameraDeviceStatus::PRESENT:
|
||||
case CameraDeviceStatus::ENUMERATING:
|
||||
if (!found) {
|
||||
cp->addDeviceNames(camera_id, status, true);
|
||||
}
|
||||
break;
|
||||
case CameraDeviceStatus::NOT_PRESENT:
|
||||
if (found) {
|
||||
cp->removeDeviceNames(camera_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ private:
|
||||
|
||||
void addDeviceNames(int camera_id, CameraDeviceStatus status = CameraDeviceStatus::PRESENT,
|
||||
bool cam_new = false);
|
||||
void removeDeviceNames(int camera_id);
|
||||
};
|
||||
|
||||
extern "C" ICameraProvider* HIDL_FETCH_ICameraProvider(const char* name);
|
||||
|
||||
Reference in New Issue
Block a user