{"id":13185,"url":"https://patchwork.libcamera.org/api/1.1/patches/13185/?format=json","web_url":"https://patchwork.libcamera.org/patch/13185/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210803140237.19302-4-umang.jain@ideasonboard.com>","date":"2021-08-03T14:02:36","name":"[libcamera-devel,v4,3/4] android: Override camera as \"Internal\" provided found in HAL config","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"77a47d1efe4e30f5a8f5d610e855754b33a59264","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/1.1/people/86/?format=json","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"delegate":{"id":12,"url":"https://patchwork.libcamera.org/api/1.1/users/12/?format=json","username":"uajain","first_name":"Umang","last_name":"Jain","email":"umang.jain@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/patch/13185/mbox/","series":[{"id":2297,"url":"https://patchwork.libcamera.org/api/1.1/series/2297/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2297","date":"2021-08-03T14:02:33","name":"android: Handle internal UVC cameras","version":4,"mbox":"https://patchwork.libcamera.org/series/2297/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/13185/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/13185/checks/","tags":{},"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 5635EC3232\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  3 Aug 2021 14:02:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13EF068536;\n\tTue,  3 Aug 2021 16:02:54 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BB88C68536\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  3 Aug 2021 16:02:52 +0200 (CEST)","from perceval.ideasonboard.com (unknown [103.238.109.12])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 2C13F3F0;\n\tTue,  3 Aug 2021 16:02:50 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"bTazdytE\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627999372;\n\tbh=jhsNPDWjhrWWFaqvS1oWIZCOoxUn5nivFlSokat6rQI=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=bTazdytEotOrQXbWYcSUqgIXlM0BkZ3xmwKtGI5Qhys5qGiRKAe570of+dRTj0CX0\n\t90oRAYL91nY82BSoS1Ep3KE3nFO4Aozwds8v3LS25ovSQAbB8MNA5fvfsT/xx0xBE7\n\tusoCzYq2P+OW1+OqoKo9UXcYeg7II4731r00T2S8=","From":"Umang Jain <umang.jain@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Tue,  3 Aug 2021 19:32:36 +0530","Message-Id":"<20210803140237.19302-4-umang.jain@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210803140237.19302-1-umang.jain@ideasonboard.com>","References":"<20210803140237.19302-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Currently, all UVC cameras are reported with CameraLocationExternal [1]\nby libcamera-core since there is no universal information or standard,\nto know the location of these cameras. However, in the libcamera HAL\nlayer, we can make an informed decision whether it's external or\ninternal, simply by checking its presence in the HAL configuration\nfile.\n\nThe CameraHalManager will now assign the numerical id of the camera\naccordingly when initializing the CameraDevice, based on the camera\nfacing value set in the HAL config file.\n\n[1] 76809320bb1a (\"libcamera: pipeline: uvcvideo: Treat all UVC cameras\n                   as external\")\n\nSigned-off-by: Umang Jain <umang.jain@ideasonboard.com>\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/android/camera_device.cpp      | 13 ++++++++++++-\n src/android/camera_hal_manager.cpp | 17 +++++++++++++++++\n 2 files changed, 29 insertions(+), 1 deletion(-)","diff":"diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 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 \ndiff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp\nindex 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","prefixes":["libcamera-devel","v4","3/4"]}