From 500c9a1f980d376d15829a2f1a24812ed74a7470 Mon Sep 17 00:00:00 2001 From: Paul Elder Date: Fri, 19 Mar 2021 18:56:39 +0900 Subject: android: Return -EUSERS when failed to open a Camera that's in use The correct return value for the HAL for hal_dev_open() when trying to open a camera that's already opened is EUSERS. Make hal_dev_open() return -EUSERS, and plumb the logic for this through CameraHalManager::open(). This allows the following CTS tests to pass: - android.hardware.camera2.cts.CameraManagerTest#testCameraManagerOpenAllCameras - android.hardware.camera2.cts.MultiViewTest#testDualCameraPreview Signed-off-by: Paul Elder Reviewed-by: Laurent Pinchart Reviewed-by: Hirokazu Honda Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/android/camera_hal_manager.cpp') diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 189eda2b..aeff14bd 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -65,28 +65,29 @@ int CameraHalManager::init() return 0; } -CameraDevice *CameraHalManager::open(unsigned int id, - const hw_module_t *hardwareModule) +std::tuple +CameraHalManager::open(unsigned int id, const hw_module_t *hardwareModule) { MutexLocker locker(mutex_); if (!callbacks_) { LOG(HAL, Error) << "Can't open camera before callbacks are set"; - return nullptr; + return { nullptr, -ENODEV }; } CameraDevice *camera = cameraDeviceFromHalId(id); if (!camera) { LOG(HAL, Error) << "Invalid camera id '" << id << "'"; - return nullptr; + return { nullptr, -ENODEV }; } - if (camera->open(hardwareModule)) - return nullptr; + int ret = camera->open(hardwareModule); + if (ret) + return { nullptr, ret }; LOG(HAL, Info) << "Open camera '" << id << "'"; - return camera; + return { camera, 0 }; } void CameraHalManager::cameraAdded(std::shared_ptr cam) -- cgit v1.2.1