From patchwork Mon Sep 30 05:35:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Elder X-Patchwork-Id: 2071 X-Patchwork-Delegate: paul.elder@ideasonboard.com Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2AF85616FF for ; Mon, 30 Sep 2019 07:35:39 +0200 (CEST) Received: from neptunite.amanokami.net (unknown [96.44.9.94]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 76AB733E; Mon, 30 Sep 2019 07:35:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1569821738; bh=5JGPeX95v15oEyuLbdZVjlU/1AeTb+w5JennIhaW6PM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HAQzkCIQVPtMx9hTLZxRYvAhfAu0GHDwlXn2r82VXKJTLKdD9IlPtgmdnhOHWUDva v5aa3TSpCg+1LGBTAg8M64LOIK3Be0aVru1hfeKCJC7iRAACUDLoJyC9TR1KXH2Xrq e6fxS9B96wy0Q/NspQt0mHSbQbKbPyw1lbWiSk/A= From: Paul Elder To: libcamera-devel@lists.libcamera.org Date: Mon, 30 Sep 2019 01:35:20 -0400 Message-Id: <20190930053520.2711-3-paul.elder@ideasonboard.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190930053520.2711-1-paul.elder@ideasonboard.com> References: <20190930053520.2711-1-paul.elder@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [RFC PATCH 3/3] android: camera_hal_manager: error on init if cameras not initialized X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 30 Sep 2019 05:35:39 -0000 Return error from hal_init() if the built-in cameras have not been initialized yet. On Chromium OS, this causes Upstart to restart the camera service at a later time, allowing the built-in cameras to be enumerated correctly. This fixes the problem where the camera service is started before the camera device nodes are available. Signed-off-by: Paul Elder --- src/android/camera3_hal.cpp | 4 +--- src/android/camera_hal_manager.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp index 8d2629ca..9d18b999 100644 --- a/src/android/camera3_hal.cpp +++ b/src/android/camera3_hal.cpp @@ -56,9 +56,7 @@ static int hal_init() { LOG(HAL, Info) << "Initialising Android camera HAL"; - cameraManager.init(); - - return 0; + return cameraManager.init(); } /*------------------------------------------------------------------------------ diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 22f0323b..af0114fc 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -13,11 +13,14 @@ #include "camera_device.h" #include "camera_proxy.h" +#include "device_enumerator.h" using namespace libcamera; LOG_DECLARE_CATEGORY(HAL); +static int initRet = 0; + /* * \class CameraHalManager * @@ -49,7 +52,7 @@ int CameraHalManager::init() MutexLocker locker(mutex_); cv_.wait(locker); - return 0; + return initRet; } void CameraHalManager::run() @@ -68,6 +71,12 @@ void CameraHalManager::run() return; } + if (!DeviceEnumerator::haveExpectedCameras(cameraManager_)) { + LOG(HAL, Warning) << "Expected cameras not loaded"; + initRet = -EAGAIN; + cv_.notify_one(); + } + /* * For each Camera registered in the system, a CameraProxy * gets created here to wraps a camera device.