camera: add support for camera removal
Add camera removal support to CameraProvider and CameraModule.
Change-Id: I047e486d1665ba9e0b1455f77a7bbbb5e0d66653
Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index 3a113de..8c5af8e 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -104,6 +104,30 @@
}
}
+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
*/
@@ -135,8 +159,17 @@
}
}
- 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);
+ }
}
}
}
diff --git a/camera/provider/2.4/default/CameraProvider.h b/camera/provider/2.4/default/CameraProvider.h
index 2cf251e..0f0959f 100644
--- a/camera/provider/2.4/default/CameraProvider.h
+++ b/camera/provider/2.4/default/CameraProvider.h
@@ -115,6 +115,7 @@
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);