[{"id":18529,"web_url":"https://patchwork.libcamera.org/comment/18529/","msgid":"<20210804024122.GB2167@pyrite.rasen.tech>","date":"2021-08-04T02:41:22","subject":"Re: [libcamera-devel] [PATCH v4 3/4] android: Override camera as\n\t\"Internal\" provided found in HAL config","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Umang,\n\nOn Tue, Aug 03, 2021 at 07:32:36PM +0530, Umang Jain wrote:\n> Currently, all UVC cameras are reported with CameraLocationExternal [1]\n> by libcamera-core since there is no universal information or standard,\n> to know the location of these cameras. However, in the libcamera HAL\n> layer, we can make an informed decision whether it's external or\n> internal, simply by checking its presence in the HAL configuration\n> file.\n> \n> The CameraHalManager will now assign the numerical id of the camera\n> accordingly when initializing the CameraDevice, based on the camera\n> facing value set in the HAL config file.\n> \n> [1] 76809320bb1a (\"libcamera: pipeline: uvcvideo: Treat all UVC cameras\n>                    as external\")\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  src/android/camera_device.cpp      | 13 ++++++++++++-\n>  src/android/camera_hal_manager.cpp | 17 +++++++++++++++++\n>  2 files changed, 29 insertions(+), 1 deletion(-)\n> \n> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\n> index 692d0a5b..4ebc1524 100644\n> --- a/src/android/camera_device.cpp\n> +++ b/src/android/camera_device.cpp\n> @@ -330,7 +330,18 @@ int CameraDevice::initialize(const CameraConfigData *cameraConfigData)\n>  \t\t\tfacing_ = CAMERA_FACING_BACK;\n>  \t\t\tbreak;\n>  \t\tcase properties::CameraLocationExternal:\n> -\t\t\tfacing_ = CAMERA_FACING_EXTERNAL;\n> +\t\t\t/*\n> +\t\t\t * If the camera is reported as external, but the\n> +\t\t\t * CameraHalManager has overriden it, use what is\n> +\t\t\t * reported in the configuration file. This typically\n> +\t\t\t * happens for UVC cameras reported as 'External' by\n> +\t\t\t * libcamera but installed in fixed position on the\n> +\t\t\t * device.\n> +\t\t\t */\n> +\t\t\tif (cameraConfigData && cameraConfigData->facing != -1)\n> +\t\t\t       facing_ = cameraConfigData->facing;\n> +\t\t\telse\n> +\t\t\t       facing_ = CAMERA_FACING_EXTERNAL;\n>  \t\t\tbreak;\n>  \t\t}\n>  \n> diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp\n> index b364f62a..5f7bfe26 100644\n> --- a/src/android/camera_hal_manager.cpp\n> +++ b/src/android/camera_hal_manager.cpp\n> @@ -145,6 +145,23 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)\n>  \t}\n>  \n>  \tconst CameraConfigData *cameraConfigData = halConfig_.cameraConfigData(cam->id());\n> +\n> +\t/*\n> +\t * Some cameras whose location is reported by libcamera as external may\n> +\t * actually be internal to the device. This is common with UVC cameras\n> +\t * that are integrated in a laptop. In that case the real location\n> +\t * should be specified in the configuration file.\n> +\t *\n> +\t * If the camera location is external and a configuration entry exists\n> +\t * for it, override its location.\n> +\t */\n> +\tif (isCameraNew && isCameraExternal) {\n> +\t\tif (cameraConfigData && cameraConfigData->facing != -1) {\n> +\t\t\tisCameraExternal = false;\n> +\t\t\tid = numInternalCameras_;\n> +\t\t}\n> +\t}\n> +\n>  \tif (!isCameraExternal && !cameraConfigData) {\n>  \t\tLOG(HAL, Error)\n>  \t\t\t<< \"HAL configuration entry for internal camera \"\n> -- \n> 2.31.1\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6E19BC3235\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  4 Aug 2021 02:41:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B6B20687CE;\n\tWed,  4 Aug 2021 04:41:32 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 2CCDD6026F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  4 Aug 2021 04:41:30 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 96B6A24F;\n\tWed,  4 Aug 2021 04:41:28 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"a//v7nWk\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1628044889;\n\tbh=+xZ7TmVgh1qgGo6F7oVN6OcjL14PR0VMXEipBqJZ1uc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=a//v7nWkdsANjHl1ZMToWNlNz233IsScWjhO6wOhyadl3beSJdamYPuYgmStgjVVY\n\twnjts+QoY0jaXtD9djmV6eXTXHUODEgiOlb62BcZlgIxh5W8QKqsoZ164sFT/w79aj\n\tcWTeQdhCbtRnwgrGxZiJ2mlc75Te7GTslumn+SRk=","Date":"Wed, 4 Aug 2021 11:41:22 +0900","From":"paul.elder@ideasonboard.com","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<20210804024122.GB2167@pyrite.rasen.tech>","References":"<20210803140237.19302-1-umang.jain@ideasonboard.com>\n\t<20210803140237.19302-4-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20210803140237.19302-4-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 3/4] android: Override camera as\n\t\"Internal\" provided found in HAL config","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]