From patchwork Mon May 15 12:45:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 18631 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 169CEC3285 for ; Mon, 15 May 2023 12:45:59 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7A18E62864; Mon, 15 May 2023 14:45:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org; s=mail; t=1684154756; bh=YJ2NhkXjQIO23I37hFg2q+9LaZMSe9xW+qEQVScHmqk=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=dzgELdtO0N65vKgt7ymYQ9QFcnc9vGIkwMxupaKnpu5UILcKrLXrlQ9aNdogellb4 QXDkEVvZxsDqopsEnUCi2uDluvIVR1/2aVuHkJyWsOjUUm/xqMpTCN9rycH7ZXgfB9 PMY90+xbfT1XzWM38RpQmKovxQdVQZC2y4ZPggzHgf8ZqdV3sBNGTF99xX9wAMqExN pjWkfHDmDWEixFRJE4IhPgDbGaF8GqjJG24vM3OvfQEGVJfPvtu/vJ6LGiJSxlf3na XBp5oIUyjHrFDz9yPtSCRLDy9XMHD7NZMfqUbk+1W6nMxLjo43iHPX+4dClgJrQCEo oO6Ja/1hWhKFA== Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3D72C6039F for ; Mon, 15 May 2023 14:45:54 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Je26vaot"; dkim-atps=neutral Received: from Monstersaurus.local (aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net [82.37.23.78]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6D52BDE5; Mon, 15 May 2023 14:45:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1684154743; bh=YJ2NhkXjQIO23I37hFg2q+9LaZMSe9xW+qEQVScHmqk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Je26vaotGdkAAlkqRzR6gM0nEjuYZjof6veSHH4WG6ALHp8NGlQEj8bdAiZsG8oPn 4viO4wvMlbW0OM5RSqt6789sILjxio+OAzI6SrS6qcMuD6f2MizLCnOYqOEbNQpTwt KwX4MYe84QN+4hoMhQ+UNN/hgnzGZ13hnXXDt7WA= To: libcamera devel Date: Mon, 15 May 2023 13:45:47 +0100 Message-Id: <20230515124550.3601128-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230515124550.3601128-1-kieran.bingham@ideasonboard.com> References: <20230515124550.3601128-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 2/5] libcamera: camera_manager: Move private implementation to internal 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: , X-Patchwork-Original-From: Kieran Bingham via libcamera-devel From: Kieran Bingham Reply-To: Kieran Bingham Cc: Jacopo Mondi Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" The CameraManager makes use of the Extensible pattern to provide an internal private implementation that is not exposed in the public API. Move the Private declaration to an internal header to make it available from other internal components in preperation for reducing the surface area of the public interface of the Camera Manager. Signed-off-by: Kieran Bingham Reviewed-by: Jacopo Mondi Tested-by: Ashok Sidipotu Signed-off-by: Kieran Bingham Reviewed-by: Jacopo Mondi --- include/libcamera/internal/camera_manager.h | 64 +++++++++++++++++++++ include/libcamera/internal/meson.build | 1 + src/libcamera/camera_manager.cpp | 50 ++-------------- 3 files changed, 69 insertions(+), 46 deletions(-) create mode 100644 include/libcamera/internal/camera_manager.h diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h new file mode 100644 index 000000000000..05a1e4df8add --- /dev/null +++ b/include/libcamera/internal/camera_manager.h @@ -0,0 +1,64 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2023, Ideas on Board Oy. + * + * camera_manager.h - Camera manager private data + */ + +#pragma once + +#include + +#include +#include + +#include + +#include "libcamera/internal/ipa_manager.h" +#include "libcamera/internal/process.h" + +namespace libcamera { + +class DeviceEnumerator; + +class CameraManager::Private : public Extensible::Private, public Thread +{ + LIBCAMERA_DECLARE_PUBLIC(CameraManager) + +public: + Private(); + + int start(); + void addCamera(std::shared_ptr camera, + const std::vector &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_); + void removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_); + + /* + * This mutex protects + * + * - initialized_ and status_ during initialization + * - cameras_ and camerasByDevnum_ after initialization + */ + mutable Mutex mutex_; + std::vector> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + std::map> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + +protected: + void run() override; + +private: + int init(); + void createPipelineHandlers(); + void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_); + + ConditionVariable cv_; + bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_); + + std::unique_ptr enumerator_; + + IPAManager ipaManager_; + ProcessManager processManager_; +}; + +} /* namespace libcamera */ diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build index d75088059996..0028ed0dc27f 100644 --- a/include/libcamera/internal/meson.build +++ b/include/libcamera/internal/meson.build @@ -13,6 +13,7 @@ libcamera_internal_headers = files([ 'bayer_format.h', 'byte_stream_buffer.h', 'camera.h', + 'camera_manager.h', 'camera_controls.h', 'camera_lens.h', 'camera_sensor.h', diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index c1edefdad160..d3c297b888d8 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -5,24 +5,22 @@ * camera_manager.h - Camera management */ -#include +#include "libcamera/internal/camera_manager.h" #include -#include - #include #include #include #include +#include + #include "libcamera/internal/device_enumerator.h" -#include "libcamera/internal/ipa_manager.h" #include "libcamera/internal/pipeline_handler.h" -#include "libcamera/internal/process.h" /** - * \file camera_manager.h + * \file libcamera/camera_manager.h * \brief The camera manager */ @@ -33,46 +31,6 @@ namespace libcamera { LOG_DEFINE_CATEGORY(Camera) -class CameraManager::Private : public Extensible::Private, public Thread -{ - LIBCAMERA_DECLARE_PUBLIC(CameraManager) - -public: - Private(); - - int start(); - void addCamera(std::shared_ptr camera, - const std::vector &devnums) LIBCAMERA_TSA_EXCLUDES(mutex_); - void removeCamera(Camera *camera) LIBCAMERA_TSA_EXCLUDES(mutex_); - - /* - * This mutex protects - * - * - initialized_ and status_ during initialization - * - cameras_ and camerasByDevnum_ after initialization - */ - mutable Mutex mutex_; - std::vector> cameras_ LIBCAMERA_TSA_GUARDED_BY(mutex_); - std::map> camerasByDevnum_ LIBCAMERA_TSA_GUARDED_BY(mutex_); - -protected: - void run() override; - -private: - int init(); - void createPipelineHandlers(); - void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_); - - ConditionVariable cv_; - bool initialized_ LIBCAMERA_TSA_GUARDED_BY(mutex_); - int status_ LIBCAMERA_TSA_GUARDED_BY(mutex_); - - std::unique_ptr enumerator_; - - IPAManager ipaManager_; - ProcessManager processManager_; -}; - CameraManager::Private::Private() : initialized_(false) {