Patch Detail
Show a patch.
GET /api/1.1/patches/11473/?format=api
{ "id": 11473, "url": "https://patchwork.libcamera.org/api/1.1/patches/11473/?format=api", "web_url": "https://patchwork.libcamera.org/patch/11473/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20210303093756.490065-1-paul.elder@ideasonboard.com>", "date": "2021-03-03T09:37:56", "name": "[libcamera-devel] android: Add flag for external camera support", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "d201f8879833cfbbfccf53a7aba386042b39422b", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/11473/mbox/", "series": [ { "id": 1748, "url": "https://patchwork.libcamera.org/api/1.1/series/1748/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1748", "date": "2021-03-03T09:37:56", "name": "[libcamera-devel] android: Add flag for external camera support", "version": 1, "mbox": "https://patchwork.libcamera.org/series/1748/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/11473/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/11473/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 3ABF9BD1F1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 3 Mar 2021 09:38:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B572568A91;\n\tWed, 3 Mar 2021 10:38:09 +0100 (CET)", "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 77D3068A69\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 3 Mar 2021 10:38:07 +0100 (CET)", "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 ECE68ED;\n\tWed, 3 Mar 2021 10:38:05 +0100 (CET)" ], "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=\"CocsMYZU\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1614764287;\n\tbh=gwo4pu+gFpcnNYcGpmC47IFkhiavolL6ZAdeVVRF5Q0=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=CocsMYZUEk2E1/tczBnVXpskh9B1d7jy2nAPjPm6xNNHFeJvWYIvmwhrNrtLw1nZr\n\thtvTarWh58F+BSQAlhaJY/c8SwML0hgugE9fo/Xm9fvroy+YwAss6Hqxc5pCwky9/F\n\tnHml7roijl1Pn0Gc+JElR0/1/viufZfnietTvfVo=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Wed, 3 Mar 2021 18:37:56 +0900", "Message-Id": "<20210303093756.490065-1-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.27.0", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH] android: Add flag for external camera\n\tsupport", "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>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "In the static metadata, we claim that we don't support external cameras,\nyet libcamera core defaults the camera location to external. In the HAL\nCameraDevice we defaulted external to front, but we hadn't handled\nCameraHalManager when counting the internal vs external cameras for\nhal_get_number_of_cameras().\n\nTo solve this, add a flag to hold if we have external camera support\n(hardcoded to false until we do), and add that to the condition in\nCameraHalManager when deciding whether a camera should be counted as\ninternal or external. CameraDevice also uses this flag to decide on the\ndefault location.\n\nSigned-off-by: Paul Elder <paul.elder@ideasonboard.com>\n---\n src/android/camera_device.cpp | 24 ++++++++++++++----------\n src/android/camera_device.h | 8 ++++++--\n src/android/camera_hal_manager.cpp | 11 +++++++----\n src/android/camera_hal_manager.h | 2 ++\n 4 files changed, 29 insertions(+), 16 deletions(-)", "diff": "diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp\nindex ae01c362..bb33c922 100644\n--- a/src/android/camera_device.cpp\n+++ b/src/android/camera_device.cpp\n@@ -311,9 +311,11 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()\n * back to the framework using the designated callbacks.\n */\n \n-CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)\n+CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera,\n+\t\t\t bool externalCameraSupport)\n \t: id_(id), running_(false), camera_(camera), staticMetadata_(nullptr),\n-\t facing_(CAMERA_FACING_FRONT), orientation_(0)\n+\t facing_(CAMERA_FACING_FRONT), orientation_(0),\n+\t externalCameraSupport_(externalCameraSupport)\n {\n \tcamera_->requestCompleted.connect(this, &CameraDevice::requestComplete);\n \n@@ -350,9 +352,10 @@ CameraDevice::~CameraDevice()\n }\n \n std::shared_ptr<CameraDevice> CameraDevice::create(unsigned int id,\n-\t\t\t\t\t\t const std::shared_ptr<Camera> &cam)\n+\t\t\t\t\t\t const std::shared_ptr<Camera> &cam,\n+\t\t\t\t\t\t bool externalCameraSupport)\n {\n-\tCameraDevice *camera = new CameraDevice(id, cam);\n+\tCameraDevice *camera = new CameraDevice(id, cam, externalCameraSupport);\n \treturn std::shared_ptr<CameraDevice>(camera);\n }\n \n@@ -375,11 +378,10 @@ int CameraDevice::initialize()\n \t\t\tfacing_ = CAMERA_FACING_BACK;\n \t\t\tbreak;\n \t\tcase properties::CameraLocationExternal:\n-\t\t\t/*\n-\t\t\t * \\todo Set this to EXTERNAL once we support\n-\t\t\t * HARDWARE_LEVEL_EXTERNAL\n-\t\t\t */\n-\t\t\tfacing_ = CAMERA_FACING_FRONT;\n+\t\t\tif (externalCameraSupport_)\n+\t\t\t\tfacing_ = CAMERA_FACING_EXTERNAL;\n+\t\t\telse\n+\t\t\t\tfacing_ = CAMERA_FACING_FRONT;\n \t\t\tbreak;\n \t\t}\n \t}\n@@ -1121,7 +1123,9 @@ const camera_metadata_t *CameraDevice::getStaticMetadata()\n \tstaticMetadata_->addEntry(ANDROID_SCALER_CROPPING_TYPE, &croppingType, 1);\n \n \t/* Info static metadata. */\n-\tuint8_t supportedHWLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;\n+\tuint8_t supportedHWLevel = externalCameraSupport_ ?\n+\t\t\t\t ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL :\n+\t\t\t\t ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;\n \tstaticMetadata_->addEntry(ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL,\n \t\t\t\t &supportedHWLevel, 1);\n \ndiff --git a/src/android/camera_device.h b/src/android/camera_device.h\nindex 4905958e..f96934db 100644\n--- a/src/android/camera_device.h\n+++ b/src/android/camera_device.h\n@@ -33,7 +33,8 @@ class CameraDevice : protected libcamera::Loggable\n {\n public:\n \tstatic std::shared_ptr<CameraDevice> create(unsigned int id,\n-\t\t\t\t\t\t const std::shared_ptr<libcamera::Camera> &cam);\n+\t\t\t\t\t\t const std::shared_ptr<libcamera::Camera> &cam,\n+\t\t\t\t\t\t bool externalCameraSupport);\n \t~CameraDevice();\n \n \tint initialize();\n@@ -66,7 +67,8 @@ protected:\n \tstd::string logPrefix() const override;\n \n private:\n-\tCameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);\n+\tCameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera,\n+\t\t bool externalCameraSupport);\n \n \tstruct Camera3RequestDescriptor {\n \t\tCamera3RequestDescriptor(libcamera::Camera *camera,\n@@ -130,6 +132,8 @@ private:\n \tunsigned int maxJpegBufferSize_;\n \n \tCameraMetadata lastSettings_;\n+\n+\tconst bool externalCameraSupport_;\n };\n \n #endif /* __ANDROID_CAMERA_DEVICE_H__ */\ndiff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp\nindex 189eda2b..e4ca4c82 100644\n--- a/src/android/camera_hal_manager.cpp\n+++ b/src/android/camera_hal_manager.cpp\n@@ -29,7 +29,8 @@ LOG_DECLARE_CATEGORY(HAL)\n */\n \n CameraHalManager::CameraHalManager()\n-\t: cameraManager_(nullptr), callbacks_(nullptr), numInternalCameras_(0),\n+\t: cameraManager_(nullptr), callbacks_(nullptr),\n+\t externalCameraSupport_(false), numInternalCameras_(0),\n \t nextExternalCameraId_(firstExternalCameraId_)\n {\n }\n@@ -115,7 +116,8 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)\n \t\t * Now check if this is an external camera and assign\n \t\t * its id accordingly.\n \t\t */\n-\t\tif (cameraLocation(cam.get()) == properties::CameraLocationExternal) {\n+\t\tif (cameraLocation(cam.get()) == properties::CameraLocationExternal &&\n+\t\t externalCameraSupport_) {\n \t\t\tisCameraExternal = true;\n \t\t\tid = nextExternalCameraId_;\n \t\t} else {\n@@ -124,7 +126,8 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)\n \t}\n \n \t/* Create a CameraDevice instance to wrap the libcamera Camera. */\n-\tstd::shared_ptr<CameraDevice> camera = CameraDevice::create(id, std::move(cam));\n+\tstd::shared_ptr<CameraDevice> camera =\n+\t\tCameraDevice::create(id, std::move(cam), externalCameraSupport_);\n \tint ret = camera->initialize();\n \tif (ret) {\n \t\tLOG(HAL, Error) << \"Failed to initialize camera: \" << cam->id();\n@@ -134,7 +137,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)\n \tif (isCameraNew) {\n \t\tcameraIdsMap_.emplace(cam->id(), id);\n \n-\t\tif (isCameraExternal)\n+\t\tif (isCameraExternal && externalCameraSupport_)\n \t\t\tnextExternalCameraId_++;\n \t\telse\n \t\t\tnumInternalCameras_++;\ndiff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h\nindex a91decc7..74dc6b3e 100644\n--- a/src/android/camera_hal_manager.h\n+++ b/src/android/camera_hal_manager.h\n@@ -54,6 +54,8 @@ private:\n \tstd::map<std::string, unsigned int> cameraIdsMap_;\n \tMutex mutex_;\n \n+\tconst bool externalCameraSupport_;\n+\n \tunsigned int numInternalCameras_;\n \tunsigned int nextExternalCameraId_;\n };\n", "prefixes": [ "libcamera-devel" ] }