From patchwork Mon Mar 29 15:28:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 11768 X-Patchwork-Delegate: jacopo@jmondi.org Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 9B878C32F0 for ; Mon, 29 Mar 2021 15:27:45 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 673A668783; Mon, 29 Mar 2021 17:27:45 +0200 (CEST) Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [217.70.183.194]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9C7F168789 for ; Mon, 29 Mar 2021 17:27:39 +0200 (CEST) X-Originating-IP: 93.34.118.233 Received: from uno.lan (93-34-118-233.ip49.fastwebnet.it [93.34.118.233]) (Authenticated sender: jacopo@jmondi.org) by relay2-d.mail.gandi.net (Postfix) with ESMTPSA id 38AE840009; Mon, 29 Mar 2021 15:27:39 +0000 (UTC) From: Jacopo Mondi To: libcamera-devel@lists.libcamera.org Date: Mon, 29 Mar 2021 17:28:06 +0200 Message-Id: <20210329152807.28331-5-jacopo@jmondi.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210329152807.28331-1-jacopo@jmondi.org> References: <20210329152807.28331-1-jacopo@jmondi.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 5/6] android: camera_device: Get location from config 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Create the CameraDevice with a reference to the HAL configuration file and use it to retrieve the camera location if not available from the Camera. Signed-off-by: Jacopo Mondi --- src/android/camera_device.cpp | 18 +++++++++--------- src/android/camera_device.h | 8 ++++++-- src/android/camera_hal_manager.cpp | 3 ++- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index ae6936647660..1731fe166887 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -309,9 +309,10 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() = default; * back to the framework using the designated callbacks. */ -CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) +CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera, + CameraHalConfig &halConfig) : id_(id), running_(false), camera_(std::move(camera)), - facing_(CAMERA_FACING_FRONT), orientation_(0) + halConfig_(halConfig), facing_(CAMERA_FACING_FRONT), orientation_(0) { camera_->requestCompleted.connect(this, &CameraDevice::requestComplete); @@ -341,10 +342,11 @@ CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) CameraDevice::~CameraDevice() = default; std::unique_ptr CameraDevice::create(unsigned int id, - std::shared_ptr cam) + std::shared_ptr cam, + CameraHalConfig &halConfig) { return std::unique_ptr( - new CameraDevice(id, std::move(cam))); + new CameraDevice(id, std::move(cam), halConfig)); } /* @@ -370,11 +372,9 @@ int CameraDevice::initialize() break; } } else { - /* - * \todo Retrieve the camera location from configuration file - * if not available from the library. - */ - facing_ = CAMERA_FACING_FRONT; + facing_ = halConfig_.cameraLocation(camera_->id()); + if (facing_ < 0) + return facing_; } /* diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 11bdfec8d587..6355e8d8c26a 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -24,6 +24,7 @@ #include "libcamera/internal/log.h" #include "libcamera/internal/message.h" +#include "camera_hal_config.h" #include "camera_metadata.h" #include "camera_stream.h" #include "camera_worker.h" @@ -33,7 +34,8 @@ class CameraDevice : protected libcamera::Loggable { public: static std::unique_ptr create(unsigned int id, - std::shared_ptr cam); + std::shared_ptr cam, + CameraHalConfig &halConfig); ~CameraDevice(); int initialize(); @@ -66,7 +68,8 @@ protected: std::string logPrefix() const override; private: - CameraDevice(unsigned int id, std::shared_ptr camera); + CameraDevice(unsigned int id, std::shared_ptr camera, + CameraHalConfig &halConfig); struct Camera3RequestDescriptor { Camera3RequestDescriptor(libcamera::Camera *camera, @@ -113,6 +116,7 @@ private: bool running_; std::shared_ptr camera_; std::unique_ptr config_; + const CameraHalConfig &halConfig_; std::unique_ptr staticMetadata_; std::map> requestTemplates_; diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index f79789b5bfb8..9ff7534a16f3 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -120,7 +120,8 @@ void CameraHalManager::cameraAdded(std::shared_ptr cam) } /* Create a CameraDevice instance to wrap the libcamera Camera. */ - std::unique_ptr camera = CameraDevice::create(id, cam); + std::unique_ptr camera = CameraDevice::create(id, cam, + halConfig_); int ret = camera->initialize(); if (ret) { LOG(HAL, Error) << "Failed to initialize camera: " << cam->id();