{"id":13136,"url":"https://patchwork.libcamera.org/api/1.1/patches/13136/?format=json","web_url":"https://patchwork.libcamera.org/patch/13136/","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":"<20210728073800.93745-3-umang.jain@ideasonboard.com>","date":"2021-07-28T07:37:59","name":"[libcamera-devel,v2,2/3] android: Override camera is \"Internal\" provided if found on HAL config","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"50cb1eababfc0eaf34ace6cc9d183ef8af5e58e7","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/13136/mbox/","series":[{"id":2286,"url":"https://patchwork.libcamera.org/api/1.1/series/2286/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2286","date":"2021-07-28T07:37:57","name":"android: Handle internal UVC cameras","version":2,"mbox":"https://patchwork.libcamera.org/series/2286/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/13136/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/13136/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 DC351C322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 28 Jul 2021 07:38:15 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 74870687CC;\n\tWed, 28 Jul 2021 09:38:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D0C4B687CA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 28 Jul 2021 09:38:12 +0200 (CEST)","from perceval.ideasonboard.com (unknown [103.251.226.16])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B19ADEE;\n\tWed, 28 Jul 2021 09:38:11 +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=\"iO+wfQL6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1627457892;\n\tbh=pmIEt7cFIA3EtG5MAG7AE3L9U4slwDXIjQrp7GmL2Xo=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=iO+wfQL6gLcDQaGt/7HY36wr8I28it94dUcvHXgvI9vFXSUqvj2ydthMAEE6YPrtU\n\tU/oO2E0cB8GHCsItZpK6EkCxQ7Y0D+RdJF6PX3dByvthjiJtLZDaW27TKy8uCi1ULT\n\tfK7uWiHdW0dL0D/d/0vcM2/vwzIXVJA5iS5bXFro=","From":"Umang Jain <umang.jain@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Date":"Wed, 28 Jul 2021 13:07:59 +0530","Message-Id":"<20210728073800.93745-3-umang.jain@ideasonboard.com>","X-Mailer":"git-send-email 2.31.1","In-Reply-To":"<20210728073800.93745-1-umang.jain@ideasonboard.com>","References":"<20210728073800.93745-1-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v2 2/3] android: Override camera is\n\t\"Internal\" provided if found on 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 its external or\ninternal, simply by checking the presence of it in the HAL\nconfiguration file.\n\nIf the camera is found to be present on the HAL configuration file,\ntreat it as internal. CameraHalManager will now assign the numerical id\nof the camera accordingly, based on which the facing of the camera is set\nas well (as per the HAL config file) while initializing the CameraDevice\nwrapper.\n\n[1] 76809320bb1a (\"libcamera: pipeline: uvcvideo: Treat all UVC cameras\n                   as external\")\n\nSigned-off-by: Umang Jain <umang.jain@ideasonboard.com>\n---\n src/android/camera_device.cpp      | 10 +++++++++-\n src/android/camera_hal_manager.cpp | 18 ++++++++++++++++++\n 2 files changed, 27 insertions(+), 1 deletion(-)","diff":"diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex 678cde23..c7f5fc4e 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -330,7 +330,15 @@ 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 'Internal' as found by\n+\t\t\t * CameraHalManager, use its location from\n+\t\t\t * HAL config file.\n+\t\t\t */\n+\t\t\tif (id_ < 1000 && 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..4950bd75 100644\n--- a/src/android/camera_hal_manager.cpp\n+++ b/src/android/camera_hal_manager.cpp\n@@ -145,6 +145,24 @@ 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 can be integrated in a laptop, but are all considered by\n+\t * libcamera as external. The true location for those cameras is\n+\t * specified in the HAL configuration file. If the camera location is\n+\t * external and a configuration entry exists for it, override the\n+\t * location.\n+\t */\n+\tif (isCameraNew && isCameraExternal) {\n+\t\tif (cameraConfigData && cameraConfigData->facing != -1 &&\n+\t\t    cameraConfigData->facing != CAMERA_FACING_EXTERNAL) {\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","v2","2/3"]}