From patchwork Wed Mar 24 07:07:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11677 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 8827BC32E7 for ; Wed, 24 Mar 2021 07:08:16 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 3D04568D6F; Wed, 24 Mar 2021 08:08:16 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="gATmTxVG"; dkim-atps=neutral Received: from mail-pf1-x436.google.com (mail-pf1-x436.google.com [IPv6:2607:f8b0:4864:20::436]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 59CA668D62 for ; Wed, 24 Mar 2021 08:08:12 +0100 (CET) Received: by mail-pf1-x436.google.com with SMTP id y200so16653789pfb.5 for ; Wed, 24 Mar 2021 00:08:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=FBIId1IlESikLmSIrXc64sNJ/ca/awir3F5edcNGkIU=; b=gATmTxVGog/JFGV2sXXRidCil2jEJP3VP2153GVVnN+Q17ZsbKdi+Kf7yjs9KqNsvX 5PB1vlgtzSfPifuAbFKIoflZDGxjwUl+0Yk99Afrtbb8VXYTJJ+c8MbqeqR0+bq9re1K nwTPYjQp8FvBHLxCs5VS35izCTZX2tJ3koEPA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FBIId1IlESikLmSIrXc64sNJ/ca/awir3F5edcNGkIU=; b=CRvOfHm7c726O/YAO8pa/66cXWSECArY1Hk2X7FKy1tOm4NKPQNYpj9j/kRFmLRq8U 07t/V82TI9kryR8n/yHMLA5PqI9hHSNc/gWcqx0VEx7EX94KgELDYb1h/Tdb1G2RjeQl 5sa0uQSXHpE2Aa6dBGnBXAgD7iPzoYH5L91w5uGx6vx3/kfabfa7EalmVFdp9HRP6W4w Dg8ttmmVyq+OMsAN5uoXHsllAmsl9rOmOeUVwiek59aRZX+bPU08iuwsma8xKQPet4Z7 OYxuQhInDS6fVws+opHJ3uNNGuudUjmznBdnYRFjNrlIA4HZiAQm0KaA7Rp4rYHAGZKY OwLw== X-Gm-Message-State: AOAM533vE7D/zwaI1jr0X6ymrk4XcIBON/lmLMeu1OJly7/rGxG0ZpEN CA7A3dcAL+O8lymdn167RAo4epe9x6zvIQ== X-Google-Smtp-Source: ABdhPJwg8ArejE6C3+lSeOkLDFnZYm0kZBxdJYvrkQP4SWHMDZM0ymwiLtoY4fQBmq5VerBMTXRAVg== X-Received: by 2002:a63:520e:: with SMTP id g14mr1816026pgb.350.1616569686220; Wed, 24 Mar 2021 00:08:06 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:05 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:50 +0900 Message-Id: <20210324070757.3530377-2-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/8] android: CameraHalManager: Hold CameraDevice with std::unique_ptr 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" CameraDevice is owned by CameraHalManager. The ownership of the object is not shared with other classes. So CameraHalManager should manage CameraDevice with std::unique_ptr. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 5 ++--- src/android/camera_device.h | 2 +- src/android/camera_hal_manager.cpp | 10 ++++------ src/android/camera_hal_manager.h | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 72a89258..d0955de7 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -350,11 +350,10 @@ CameraDevice::~CameraDevice() delete it.second; } -std::shared_ptr CameraDevice::create(unsigned int id, +std::unique_ptr CameraDevice::create(unsigned int id, const std::shared_ptr &cam) { - CameraDevice *camera = new CameraDevice(id, cam); - return std::shared_ptr(camera); + return std::unique_ptr(new CameraDevice(id, cam)); } /* diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 823d561c..8be7f305 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -32,7 +32,7 @@ class CameraDevice : protected libcamera::Loggable { public: - static std::shared_ptr create(unsigned int id, + static std::unique_ptr create(unsigned int id, const std::shared_ptr &cam); ~CameraDevice(); diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index 189eda2b..b3c85406 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -36,8 +36,6 @@ CameraHalManager::CameraHalManager() CameraHalManager::~CameraHalManager() { - cameras_.clear(); - if (cameraManager_) { cameraManager_->stop(); delete cameraManager_; @@ -124,7 +122,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr cam) } /* Create a CameraDevice instance to wrap the libcamera Camera. */ - std::shared_ptr camera = CameraDevice::create(id, std::move(cam)); + std::unique_ptr camera = CameraDevice::create(id, std::move(cam)); int ret = camera->initialize(); if (ret) { LOG(HAL, Error) << "Failed to initialize camera: " << cam->id(); @@ -154,7 +152,7 @@ void CameraHalManager::cameraRemoved(std::shared_ptr cam) MutexLocker locker(mutex_); auto iter = std::find_if(cameras_.begin(), cameras_.end(), - [&cam](std::shared_ptr &camera) { + [&cam](const std::unique_ptr &camera) { return cam == camera->camera(); }); if (iter == cameras_.end()) @@ -191,7 +189,7 @@ int32_t CameraHalManager::cameraLocation(const Camera *cam) CameraDevice *CameraHalManager::cameraDeviceFromHalId(unsigned int id) { auto iter = std::find_if(cameras_.begin(), cameras_.end(), - [id](std::shared_ptr &camera) { + [id](const std::unique_ptr &camera) { return camera->id() == id; }); if (iter == cameras_.end()) @@ -243,7 +241,7 @@ void CameraHalManager::setCallbacks(const camera_module_callbacks_t *callbacks) * Internal cameras are already assumed to be present at module load * time by the Android framework. */ - for (std::shared_ptr &camera : cameras_) { + for (const std::unique_ptr &camera : cameras_) { unsigned int id = camera->id(); if (id >= firstExternalCameraId_) callbacks_->camera_device_status_change(callbacks_, id, diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index a91decc7..65bb3554 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -50,7 +50,7 @@ private: libcamera::CameraManager *cameraManager_; const camera_module_callbacks_t *callbacks_; - std::vector> cameras_; + std::vector> cameras_; std::map cameraIdsMap_; Mutex mutex_; From patchwork Wed Mar 24 07:07:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11675 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 4E902C32E7 for ; Wed, 24 Mar 2021 07:08:14 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 91D4468D6A; Wed, 24 Mar 2021 08:08:13 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="BczBPItg"; dkim-atps=neutral Received: from mail-pg1-x52e.google.com (mail-pg1-x52e.google.com [IPv6:2607:f8b0:4864:20::52e]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 01D8268D47 for ; Wed, 24 Mar 2021 08:08:11 +0100 (CET) Received: by mail-pg1-x52e.google.com with SMTP id h25so14019064pgm.3 for ; Wed, 24 Mar 2021 00:08:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8UxSnCmuALU/9Iixyz403NuafshZ1iLwjXQZHaAz1qI=; b=BczBPItgSO4JK9rUgzbCyHZu0YF8FnFbtaI9aHj4pFKmPbhRRaysnSxbRMMOlMESX8 MdEnRtaYYIevmKgJowH7qhQWNm9HgPk2LOTf2/aUqUnKtdzMp37jZ6SuRTl7ink1hCnO Bc/xzTimASPDj4i7z5sjZ0P+KPd3Ufiayn+7A= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8UxSnCmuALU/9Iixyz403NuafshZ1iLwjXQZHaAz1qI=; b=LGSEqQI6Eyk1NYMZSl08m/IEX1NkxYGN9wfswZ0UdM10H6gYLWY+27S6HxfnRzPSHQ pNXgLITboYLYqIF30pYHfnp83Q5Ls731bGyuBFDi3lKvlM83w4+dFBJADH1QwMvlLLCz wNCbxqZKqaNEm+uwf63H5WQpdBsiKCeDH+boHXD9cNoMriYAXXsVOOB81pw4ETwGmjrl S1ta6ZptwgtKNSAdvsYFH4McZd7kVSd/LT+H4IlllcksChnDGJ2JsYy2izEorQnXD1zX 0wjsDMukvn0kSXoUl7gNRVqac7MJhom3z3ng14VpoT0t7P4Y+hTAfmj7lMLa9VDjEGfG rdZA== X-Gm-Message-State: AOAM532a84WYx/HR9P0HZmXW3x0mDmVqPDf4dna6HcgyYl+EvZil9kpq cixuMIE4fKc/lIt3Sc1czP96zP29XG4MJQ== X-Google-Smtp-Source: ABdhPJxkdEYzpW4OvjM0vRRO16oRKNecM0nNlI5wFq3BmvWuxYxf5yBPLEs3U1MCiDEhXgmXJk2sPg== X-Received: by 2002:a63:c646:: with SMTP id x6mr1947334pgg.126.1616569687626; Wed, 24 Mar 2021 00:08:07 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:07 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:51 +0900 Message-Id: <20210324070757.3530377-3-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/8] android: CameraHalManager: Hold CameraManager with std::unique_ptr 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" CameraManager is owned by CameraHalManager. The ownership of the object is not shared with other classes. So CameraHalManager should manage CameraManager with std::unique_ptr. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 15 ++++----------- src/android/camera_hal_manager.h | 2 +- 2 files changed, 5 insertions(+), 12 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index b3c85406..b501f8db 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -34,18 +34,12 @@ CameraHalManager::CameraHalManager() { } -CameraHalManager::~CameraHalManager() -{ - if (cameraManager_) { - cameraManager_->stop(); - delete cameraManager_; - cameraManager_ = nullptr; - } -} +/* CameraManager calls stop() in the destructor. */ +CameraHalManager::~CameraHalManager() = default; int CameraHalManager::init() { - cameraManager_ = new CameraManager(); + cameraManager_ = std::make_unique(); /* Support camera hotplug. */ cameraManager_->cameraAdded.connect(this, &CameraHalManager::cameraAdded); @@ -55,8 +49,7 @@ int CameraHalManager::init() if (ret) { LOG(HAL, Error) << "Failed to start camera manager: " << strerror(-ret); - delete cameraManager_; - cameraManager_ = nullptr; + cameraManager_.reset(); return ret; } diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h index 65bb3554..dc4e37e5 100644 --- a/src/android/camera_hal_manager.h +++ b/src/android/camera_hal_manager.h @@ -47,7 +47,7 @@ private: CameraDevice *cameraDeviceFromHalId(unsigned int id); - libcamera::CameraManager *cameraManager_; + std::unique_ptr cameraManager_; const camera_module_callbacks_t *callbacks_; std::vector> cameras_; From patchwork Wed Mar 24 07:07:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11678 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 237CAC32E7 for ; Wed, 24 Mar 2021 07:08:17 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CECAB68D69; Wed, 24 Mar 2021 08:08:16 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="Q9rxYLkG"; dkim-atps=neutral Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DB69D68D62 for ; Wed, 24 Mar 2021 08:08:12 +0100 (CET) Received: by mail-pj1-x102c.google.com with SMTP id k23-20020a17090a5917b02901043e35ad4aso650667pji.3 for ; Wed, 24 Mar 2021 00:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t5MwDzkNk5G2yMVMsAXj5zqQX2fgl2OED1OdWzHSIn0=; b=Q9rxYLkGtvYyHbKiQIxcP9Lyma7vsDI3ePqp1dX8SA1SsiqPKIYVujmytpMUGj3wZT /WnAkkKDlUXFUHmbKK/G96Q0Ige+vilkXXCuR+AJ5zq94CwEQR+5iMMyRKof7U4BMfhi qp8i8W17nxrlHqK+OZmo4K+KbUOwCVGTLHyfk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t5MwDzkNk5G2yMVMsAXj5zqQX2fgl2OED1OdWzHSIn0=; b=npukhwpzCZI12F4pmEEYnAU6QGMTFqCPHqj82kz8FxjPhxArE0tLpFVU24uNvzK0NW VLRhEUTdYnRSUGA6TX4EVdBYhHXPFR64pNysBdgmXPFfHxDN40wUEMLR6t6PQqtlhbj3 r0MxqOrJUnC336lC2BY2kXS08oymJJ0nAzd2buRWEdTBsqnfJT3tOaMCH9UdhuLfWMfO otP78ujFl77uYIu13W4nJu87anWQSV0NF3ATo8WVhwb+IAadne/MMCDD/GaoHjy/6mW+ Qh545Cqd+3ZxdjterMFY0CImG8GwYCNCtErj6EP67681mjjvkFc6zEBqeKsHX2CpmvO2 hEIw== X-Gm-Message-State: AOAM531InYCZgMKPA27hk7IQg80WEGkbI6i7TKkPvnIoxwIidp7KyjUy Sd8APqCZYqnUPF/yDtf7/MnzXUy81Zib6Q== X-Google-Smtp-Source: ABdhPJzNp109bzuscz7LbMNVD4SjfPg3LJQZ3ixrCTCExh2U5k7btTJ0N4sUhUYqAgTliuKZ3VkN9Q== X-Received: by 2002:a17:90a:868c:: with SMTP id p12mr1953197pjn.82.1616569689090; Wed, 24 Mar 2021 00:08:09 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:08 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:52 +0900 Message-Id: <20210324070757.3530377-4-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 3/8] android: CameraHalManager: Fix a function call of a moved Camera 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" libcamera::Camera::id() is called after std::move() in cameraAdded(). This fixes the issue by not executing std::move(). Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_hal_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp index b501f8db..f70cd8a8 100644 --- a/src/android/camera_hal_manager.cpp +++ b/src/android/camera_hal_manager.cpp @@ -115,7 +115,7 @@ void CameraHalManager::cameraAdded(std::shared_ptr cam) } /* Create a CameraDevice instance to wrap the libcamera Camera. */ - std::unique_ptr camera = CameraDevice::create(id, std::move(cam)); + std::unique_ptr camera = CameraDevice::create(id, cam); int ret = camera->initialize(); if (ret) { LOG(HAL, Error) << "Failed to initialize camera: " << cam->id(); From patchwork Wed Mar 24 07:07:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11679 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 B1183C32E7 for ; Wed, 24 Mar 2021 07:08:19 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6B7AC68D6A; Wed, 24 Mar 2021 08:08:19 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="TqFwzCt3"; dkim-atps=neutral Received: from mail-pg1-x52d.google.com (mail-pg1-x52d.google.com [IPv6:2607:f8b0:4864:20::52d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8039568D62 for ; Wed, 24 Mar 2021 08:08:14 +0100 (CET) Received: by mail-pg1-x52d.google.com with SMTP id l1so14000736pgb.5 for ; Wed, 24 Mar 2021 00:08:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HzUlrxUAqE+9T4gZTTau+eWKMHgxbMHPiiSANl2yyjY=; b=TqFwzCt3G5sitV7MY0b/MaOYbxteMlxeXD5Gx6TisUwUb9TDDdOmQoIt+rmq5c4vR3 hEvRbq/L2MbPAsYF4l+RVLh3vO0LlmEbrVy5j1VmswMJFQ5Ljx8goSrjRNxcEmeCAnw8 mxgZHoCiY0uo0zwFmyTHfiFM1S1NcOBbWQfgs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HzUlrxUAqE+9T4gZTTau+eWKMHgxbMHPiiSANl2yyjY=; b=jCgz0NyoQtvyDsGhhhkFV2/OHyqHJSgotTi38IFWKSx2xn7qloCta7w3zmKGTTQ4kM 45SFjUb1AFpY0Y/cmFxxEKuVka7e4/hfqR/F7aomTkbMw/nUqic1uDV5fhTyZa/1Fw4Q LZsZK7MjbWtjn/NjGuTIdiyjSYpVhJYxgjvLfIRgjQHVYLb0kTmTGNuoLARKH3Oa8ZMC bQEvwfLcUwehFlpFBK70EPS8ZgZnMgs/KtaIJI+YoVm60ZriwRAUjA0W+fuzbauGfVKZ 1+qbwJh44El6UpK4YRPDiyULVFC2/TbVgqoiZOboq82uiBWeyrHc4lTzE5oLRT7Lti0I oLOg== X-Gm-Message-State: AOAM531nPiCLfzjYqka82PJ1bF0K9XlFk67ngeQMbpFZS7UI2+20vVKm 1EtHSN1LyQKobFeUgCADTFyp+L7zwNfQuQ== X-Google-Smtp-Source: ABdhPJzEXGHg+d9rqA+Aj3koWonJmIDOZ9Byn4ObhcGZcAFIoEzNi5A1N3Qx72TW2GWMShRB7EwcVQ== X-Received: by 2002:a63:7e52:: with SMTP id o18mr1854555pgn.416.1616569690676; Wed, 24 Mar 2021 00:08:10 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:10 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:53 +0900 Message-Id: <20210324070757.3530377-5-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 4/8] android: CameraDevice: Take shared_ptr in constructor 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" CameraDevice takes the ownership of Camera. Therefore, shared_ptr would rather be used than const shared_ptr&. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 12 +++++++----- src/android/camera_device.h | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index d0955de7..c0630e53 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -312,9 +312,10 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() * back to the framework using the designated callbacks. */ -CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr &camera) - : id_(id), running_(false), camera_(camera), staticMetadata_(nullptr), - facing_(CAMERA_FACING_FRONT), orientation_(0) +CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) + : id_(id), running_(false), camera_(std::move(camera)), + staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT), + orientation_(0) { camera_->requestCompleted.connect(this, &CameraDevice::requestComplete); @@ -351,9 +352,10 @@ CameraDevice::~CameraDevice() } std::unique_ptr CameraDevice::create(unsigned int id, - const std::shared_ptr &cam) + std::shared_ptr cam) { - return std::unique_ptr(new CameraDevice(id, cam)); + return std::unique_ptr( + new CameraDevice(id, std::move(cam))); } /* diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 8be7f305..555b33e7 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -33,7 +33,7 @@ class CameraDevice : protected libcamera::Loggable { public: static std::unique_ptr create(unsigned int id, - const std::shared_ptr &cam); + std::shared_ptr cam); ~CameraDevice(); int initialize(); @@ -66,7 +66,7 @@ protected: std::string logPrefix() const override; private: - CameraDevice(unsigned int id, const std::shared_ptr &camera); + CameraDevice(unsigned int id, std::shared_ptr camera); struct Camera3RequestDescriptor { Camera3RequestDescriptor(libcamera::Camera *camera, From patchwork Wed Mar 24 07:07:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11680 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 337BDC32E7 for ; Wed, 24 Mar 2021 07:08:20 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D68F668D75; Wed, 24 Mar 2021 08:08:19 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="hLIbjgdX"; dkim-atps=neutral Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4C27768D68 for ; Wed, 24 Mar 2021 08:08:17 +0100 (CET) Received: by mail-pj1-x1032.google.com with SMTP id k23-20020a17090a5917b02901043e35ad4aso650751pji.3 for ; Wed, 24 Mar 2021 00:08:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ZP/YkVyFa4d07fX875hWeHTHDNA4NCoVHKsu7ucwRFE=; b=hLIbjgdX4DES4nihhPuE9CdDvuAkN7wCesLTq/vYREGU/A3ygRZ5pJXL1Y7S60NW7t 5toJrtlGm+c8kiPojmzlhA0UI9Lu3BgWYjw7wz7UwyZDhU+4CvrAJl+rHvIjsCkAswfv u0cRPrDNyvjxzE3EdUTbRRhtqVdsS/wCmUE1Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ZP/YkVyFa4d07fX875hWeHTHDNA4NCoVHKsu7ucwRFE=; b=JEj5psqdaBZc0fbRspNkK1zpiCJh/htOlpXPtz8Rj/nUiL8GS5RbinIfPpRJtM2Dfa y24kdkp/yz2ys+8lB6Bps24ZY7FYAqd0A+rD4OjS9hPJHkjehaymfSBgvpXXcYbgszXX KajO03aJydZYSw01wpdYqP7tq52g7bN034QNXLJXgxT0x/v+8SQInODJCt/3ssOQv2ti XiqPh/doeUysTvxim9qxXmdgMz/8P0cDunP5Wnl89evTOFFexhwgw6FLVKmSzF42WG2Y KF9D4gCP3IgmIZmZ9hBRweyoJ7ntk80Hq1tL2RxlpYd/QXZSsUBdHcUGxUnaPpcgZbUC eYPA== X-Gm-Message-State: AOAM533EDt+T//Ot652UnpzO5AG9UNVEHBAKnNOIveQs1PC4pTgPNb+X DEFk4eqIbUhTjwpXIw02bT3t0D6mwZYzqg== X-Google-Smtp-Source: ABdhPJxABgD4qHoB6erqlCG9+HtNnMyRWOVp8/SmwOFhGX0dhkfFwnlrj+4UW5/VCKsANU18e810vw== X-Received: by 2002:a17:902:d694:b029:e6:bc94:4931 with SMTP id v20-20020a170902d694b02900e6bc944931mr2261653ply.6.1616569692271; Wed, 24 Mar 2021 00:08:12 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:11 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:54 +0900 Message-Id: <20210324070757.3530377-6-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 5/8] android: CameraDevice: Return const shared_ptr& by camera() 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" CameraDevice::camera() originally returns shared_ptr. It is mandatory to make a copy by calling camera() in this way. There is no need of copying if a caller needs the reference of the camera like const shared_ptr cam = camera(). That is, it is a caller that copying is required. This changes the return type of camera() to const shared_ptr&, so that we are able to reduce one redundant copy in the above case. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 555b33e7..14e26b4d 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -43,7 +43,7 @@ public: unsigned int id() const { return id_; } camera3_device_t *camera3Device() { return &camera3Device_; } - std::shared_ptr camera() const { return camera_; } + const std::shared_ptr &camera() const { return camera_; } libcamera::CameraConfiguration *cameraConfiguration() const { return config_.get(); From patchwork Wed Mar 24 07:07:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11681 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 D38E0C32E7 for ; Wed, 24 Mar 2021 07:08:21 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8A2CC68D6C; Wed, 24 Mar 2021 08:08:21 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="ECa0aZN9"; dkim-atps=neutral Received: from mail-pg1-x52c.google.com (mail-pg1-x52c.google.com [IPv6:2607:f8b0:4864:20::52c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id B028568D6E for ; Wed, 24 Mar 2021 08:08:19 +0100 (CET) Received: by mail-pg1-x52c.google.com with SMTP id v186so14007414pgv.7 for ; Wed, 24 Mar 2021 00:08:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DhOuHdYVQ11P/k0rjoAnrIunZytTz8xbjyDa2WLJKeM=; b=ECa0aZN9HpOxVTDwc2WrfdpbUatj3c46u15U3ZbUAuPVvuq+ZlQd+jKzTcEaf7cWaw VlY55mvSPkhwjr5PVh9Sgqt62s0Tz+sLXIZfbVmudQ1tPYLVm59q25NqcNn8MKqp/+ZP qjoyzZwy+so3ylRLpMGZsO3fI9Y6QTRDi7UQY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DhOuHdYVQ11P/k0rjoAnrIunZytTz8xbjyDa2WLJKeM=; b=hvsrvou2wheDdgrD5yRlzR1miilb+2ftS+io2JA0rVD9Y2LNFKsXkEkZTTIKGECrb4 XsRl315r7y/PUqvpf5fydbzKjBhqnlP1ZWLfz3fJgPaiPthtBYm7hDWEYfxiBZmPoThp jKJ5aSmupNh4SDwHtCXeXwoIeO4nUqK2juybHch5AS9hn0hWdlFHaqJut0BC3mTDqS4B 6Xj2LCMPrEPqD6PAuU3kfUOFQLbEgFProa5ZREqEef/jJjV6Gdr+qXZDfV3hFsLkWKLb JvtZV9V+BGCUZW814tUzJeqG4gDVY3f3FXvi/kZ9T70cFlMqmkQQoXF32sW7RapxfJtp 7hNw== X-Gm-Message-State: AOAM530dQEDcPERhPb+PXTHzDUExtMUGppa5S7C6v0jYVcMpyYPi0cBQ C1NYPnpZ3hScZ5/jBHDkEns2lPWroe4lnA== X-Google-Smtp-Source: ABdhPJwm+jpDS4pj3Hccnxt8cesrC6lGk2GPnvv4966XyJDBSlVroCElure8s424NVsrZE9s9bCUqg== X-Received: by 2002:a63:d7:: with SMTP id 206mr1879669pga.30.1616569694196; Wed, 24 Mar 2021 00:08:14 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:13 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:55 +0900 Message-Id: <20210324070757.3530377-7-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 6/8] android: Camera3RequestDescriptor: Manage buffers with std::vector 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" Camera3RequestDescriptor has a length and an allocated buffer for camera_stream_buffer_t array. This replaces the variables with std::vector. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 47 ++++++++++++++++------------------- src/android/camera_device.h | 3 +-- 2 files changed, 22 insertions(+), 28 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index c0630e53..e75fd25f 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -271,16 +271,16 @@ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor( frameNumber_ = camera3Request->frame_number; /* Copy the camera3 request stream information for later access. */ - numBuffers_ = camera3Request->num_output_buffers; - buffers_ = new camera3_stream_buffer_t[numBuffers_]; - for (unsigned int i = 0; i < numBuffers_; ++i) + const uint32_t numBuffers = camera3Request->num_output_buffers; + buffers_.resize(numBuffers); + for (uint32_t i = 0; i < numBuffers; i++) buffers_[i] = camera3Request->output_buffers[i]; /* * FrameBuffer instances created by wrapping a camera3 provided dmabuf * are emplaced in this vector of unique_ptr<> for lifetime management. */ - frameBuffers_.reserve(numBuffers_); + frameBuffers_.reserve(numBuffers); /* Clone the controls associated with the camera3 request. */ settings_ = CameraMetadata(camera3Request->settings); @@ -294,10 +294,7 @@ CameraDevice::Camera3RequestDescriptor::Camera3RequestDescriptor( reinterpret_cast(this)); } -CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() -{ - delete[] buffers_; -} +CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() = default; /* * \class CameraDevice @@ -1840,10 +1837,10 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques descriptor->settings_ = lastSettings_; LOG(HAL, Debug) << "Queueing request " << descriptor->request_->cookie() - << " with " << descriptor->numBuffers_ << " streams"; - for (unsigned int i = 0; i < descriptor->numBuffers_; ++i) { - const camera3_stream_buffer_t *camera3Buffer = &descriptor->buffers_[i]; - camera3_stream *camera3Stream = camera3Buffer->stream; + << " with " << descriptor->buffers_.size() << " streams"; + for (unsigned int i = 0; i < descriptor->buffers_.size(); ++i) { + const camera3_stream_buffer_t &camera3Buffer = descriptor->buffers_[i]; + camera3_stream *camera3Stream = camera3Buffer.stream; CameraStream *cameraStream = static_cast(camera3Stream->priv); std::stringstream ss; @@ -1874,7 +1871,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques * associate it with the Camera3RequestDescriptor for * lifetime management only. */ - buffer = createFrameBuffer(*camera3Buffer->buffer); + buffer = createFrameBuffer(*camera3Buffer.buffer); descriptor->frameBuffers_.emplace_back(buffer); LOG(HAL, Debug) << ss.str() << " (direct)"; break; @@ -1899,7 +1896,7 @@ int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reques } descriptor->request_->addBuffer(cameraStream->stream(), buffer, - camera3Buffer->acquire_fence); + camera3Buffer.acquire_fence); } /* @@ -1930,7 +1927,7 @@ void CameraDevice::requestComplete(Request *request) } LOG(HAL, Debug) << "Request " << request->cookie() << " completed with " - << descriptor->numBuffers_ << " streams"; + << descriptor->buffers_.size() << " streams"; /* * \todo The timestamp used for the metadata is currently always taken @@ -1942,9 +1939,9 @@ void CameraDevice::requestComplete(Request *request) resultMetadata = getResultMetadata(descriptor, timestamp); /* Handle any JPEG compression. */ - for (unsigned int i = 0; i < descriptor->numBuffers_; ++i) { + for (camera3_stream_buffer_t &buffer : descriptor->buffers_) { CameraStream *cameraStream = - static_cast(descriptor->buffers_[i].stream->priv); + static_cast(buffer.stream->priv); if (cameraStream->camera3Stream().format != HAL_PIXEL_FORMAT_BLOB) continue; @@ -1956,7 +1953,7 @@ void CameraDevice::requestComplete(Request *request) } int ret = cameraStream->process(*src, - *descriptor->buffers_[i].buffer, + *buffer.buffer, descriptor->settings_, resultMetadata.get()); if (ret) { @@ -1975,15 +1972,13 @@ void CameraDevice::requestComplete(Request *request) /* Prepare to call back the Android camera stack. */ camera3_capture_result_t captureResult = {}; captureResult.frame_number = descriptor->frameNumber_; - captureResult.num_output_buffers = descriptor->numBuffers_; - for (unsigned int i = 0; i < descriptor->numBuffers_; ++i) { - descriptor->buffers_[i].acquire_fence = -1; - descriptor->buffers_[i].release_fence = -1; - descriptor->buffers_[i].status = status; + captureResult.num_output_buffers = descriptor->buffers_.size(); + for (camera3_stream_buffer_t &buffer : descriptor->buffers_) { + buffer.acquire_fence = -1; + buffer.release_fence = -1; + buffer.status = status; } - captureResult.output_buffers = - const_cast(descriptor->buffers_); - + captureResult.output_buffers = descriptor->buffers_.data(); if (status == CAMERA3_BUFFER_STATUS_OK) { notifyShutter(descriptor->frameNumber_, timestamp); diff --git a/src/android/camera_device.h b/src/android/camera_device.h index 14e26b4d..a11cf243 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -74,8 +74,7 @@ private: ~Camera3RequestDescriptor(); uint32_t frameNumber_; - uint32_t numBuffers_; - camera3_stream_buffer_t *buffers_; + std::vector buffers_; std::vector> frameBuffers_; CameraMetadata settings_; std::unique_ptr request_; From patchwork Wed Mar 24 07:07:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11682 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 63F8EC32E7 for ; Wed, 24 Mar 2021 07:08:22 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 2273368D62; Wed, 24 Mar 2021 08:08:22 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="Yt/eJjvy"; dkim-atps=neutral Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0536E68D47 for ; Wed, 24 Mar 2021 08:08:21 +0100 (CET) Received: by mail-pj1-x102a.google.com with SMTP id lr1-20020a17090b4b81b02900ea0a3f38c1so2180560pjb.0 for ; Wed, 24 Mar 2021 00:08:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C5yhi2t31vH+/xv/5DHYTUWdfzioA1Oz+dXxUKn6obs=; b=Yt/eJjvyATeGzvBibfGlaL1OFIU7TafCWiUk0aSkG+1JU1lGFckxM4ERvM+GSJtxmB cwvn81B32tkD+/0m4t1xU7pD353fvQZAM5zfGZ+FpfPcC7+XDmj8MZYUguIg2TewYQP4 7B9GQ3dANuB6FDc1eGZXhHePyCeUPHBI6YGXA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=C5yhi2t31vH+/xv/5DHYTUWdfzioA1Oz+dXxUKn6obs=; b=LIg/afvUWyqMAy7aaw21PwdKKBtn/UKK0ASnB2Yq4E5WIbxrKbo4FoqT9puUVKQ9ZA X+j+WflF8X0U8BC9O+YaIJIxBRrDY0s4S+Kc49IDfB/Q/2DTqfkVaMMLwTRsdSquJFQH C0xGcL+h5VJOTxMPCgZu64ru7CS8dAcem2Ju8+PTYvo1q/bgt2tSuHHsS2KGaE336H9G EtBqIhQAqJQONG3gRmRm1P9hWrHDCfNb86WU5V01ybTvTQCY2nccVy3fuJfM08IP0QkZ /hU4pT0Tq6G76KVQKQ/uZYfC9HxF4TRKXUYQPB4EASkY6yBYI7tfDBW7G4Jyjju+suZY uP1A== X-Gm-Message-State: AOAM531ra/Nan/YqAgm0y7pObMnO8XLdCZFKBP/aoFLQetjy4GcZRp58 YyQq3kxMDdGFdLmzrX0tLd2pqaJ2KQCUwQ== X-Google-Smtp-Source: ABdhPJwlr3L9m0D54YJP+5yfk6wvTo9Z6xhsugLFuzT0/f1jIRgdeYS046t83M6CBtNN1wRPAZeOXQ== X-Received: by 2002:a17:902:ce88:b029:e6:3a3c:2f65 with SMTP id f8-20020a170902ce88b02900e63a3c2f65mr2402956plg.66.1616569695822; Wed, 24 Mar 2021 00:08:15 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:15 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:56 +0900 Message-Id: <20210324070757.3530377-8-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 7/8] android: CameraDevice: Manage staticMetadata_ with std::unique_ptr 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" staticMetadata_ in CameraDevice is not necessary to be a raw pointer. This reduces the manual new/delete code by changing the type to std::unique_ptr. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 14 ++++---------- src/android/camera_device.h | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index e75fd25f..8fdcb85a 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -311,8 +311,7 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor() = default; CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) : id_(id), running_(false), camera_(std::move(camera)), - staticMetadata_(nullptr), facing_(CAMERA_FACING_FRONT), - orientation_(0) + facing_(CAMERA_FACING_FRONT), orientation_(0) { camera_->requestCompleted.connect(this, &CameraDevice::requestComplete); @@ -341,9 +340,6 @@ CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) CameraDevice::~CameraDevice() { - if (staticMetadata_) - delete staticMetadata_; - for (auto &it : requestTemplates_) delete it.second; } @@ -732,11 +728,10 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() uint32_t numEntries; uint32_t byteSize; std::tie(numEntries, byteSize) = calculateStaticMetadataSize(); - staticMetadata_ = new CameraMetadata(numEntries, byteSize); + staticMetadata_ = std::make_unique(numEntries, byteSize); if (!staticMetadata_->isValid()) { LOG(HAL, Error) << "Failed to allocate static metadata"; - delete staticMetadata_; - staticMetadata_ = nullptr; + staticMetadata_.reset(); return nullptr; } @@ -1356,8 +1351,7 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() if (!staticMetadata_->isValid()) { LOG(HAL, Error) << "Failed to construct static metadata"; - delete staticMetadata_; - staticMetadata_ = nullptr; + staticMetadata_.reset(); return nullptr; } diff --git a/src/android/camera_device.h b/src/android/camera_device.h index a11cf243..cea82b24 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -113,7 +113,7 @@ private: std::shared_ptr camera_; std::unique_ptr config_; - CameraMetadata *staticMetadata_; + std::unique_ptr staticMetadata_; std::map requestTemplates_; const camera3_callback_ops_t *callbacks_; From patchwork Wed Mar 24 07:07:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hirokazu Honda X-Patchwork-Id: 11683 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 D70A0C32E7 for ; Wed, 24 Mar 2021 07:08:26 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 964D968D63; Wed, 24 Mar 2021 08:08:26 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=chromium.org header.i=@chromium.org header.b="Mrq5NQWB"; dkim-atps=neutral Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A36BC68D58 for ; Wed, 24 Mar 2021 08:08:24 +0100 (CET) Received: by mail-pj1-x102f.google.com with SMTP id bt4so11231228pjb.5 for ; Wed, 24 Mar 2021 00:08:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CZ/yhheXZdNsy75ODPaUnOnvm2NuTPUwsZaJGHiRGDI=; b=Mrq5NQWB6cRA321dPaeC2TWVu/2qNuait/NR8RPExpyPZfYxqoc9MbB+GgSwg8UwN9 RYpYVdwQCyvSDxQhwNJCc0FZsHqNDvTbVlCwx45yBxXCAbwcFXVm+obnf15RZ4flLyFL GqW++G5XU9l4Hus/GTdT1Ky+pMh+6RXVr3peU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CZ/yhheXZdNsy75ODPaUnOnvm2NuTPUwsZaJGHiRGDI=; b=OqnL6gy4yyh7benvsfCkOHz/SLYHZbdLyCJyK2EP9ebQF1R0WJRCNvxEM16Bei1+3e 6HDfef2i3/utolQX0g7T7OtAduvSdoR+/IRQoHwEpqa0OZdAY7P65zdRgxmeAHuB97Ur ErKlHNdM0OF/Lf8Iu45HlocMWo4AG21AgZPJ1WmwnTZlfdgUACV0xVAo4MheZg7KcnS9 IjpTklHxePw8Oefuok7M56/OSc8X89kYylvRC08wCC2bjgmr5WlA/2iCzaQ/3xKStvWg /Mz41qOdaAd9hAoaXM1mQ9xX/f8tfQZ/pZG5B+7J5LQdBrgnIze2JYWvY6cSr80tsLaq zc+A== X-Gm-Message-State: AOAM533dPIEP6QwuNRbaGWHYVHKLGzuNC7fOfb6IW6uzNRdaWamAsX0V usKeU1pjMESaHaDSQPIVGb5nSd0cWC/WIg== X-Google-Smtp-Source: ABdhPJxXhsnwIqFiYbkBBll/L/NkjiVDhWNJelEJbttuc0sdzekGB26t52JtmXFgPLuhpWPPxQLZdg== X-Received: by 2002:a17:90b:1296:: with SMTP id fw22mr1975418pjb.93.1616569697466; Wed, 24 Mar 2021 00:08:17 -0700 (PDT) Received: from hiroh2.tok.corp.google.com ([2401:fa00:8f:2:7c07:24cd:c637:7fab]) by smtp.gmail.com with ESMTPSA id e63sm1246860pfe.208.2021.03.24.00.08.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Mar 2021 00:08:17 -0700 (PDT) From: Hirokazu Honda To: libcamera-devel@lists.libcamera.org Date: Wed, 24 Mar 2021 16:07:57 +0900 Message-Id: <20210324070757.3530377-9-hiroh@chromium.org> X-Mailer: git-send-email 2.31.0.291.g576ba9dcdaf-goog In-Reply-To: <20210324070757.3530377-1-hiroh@chromium.org> References: <20210324070757.3530377-1-hiroh@chromium.org> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 8/8] android: CameraDevice: Manage requestTemplates_ with std::unique_ptr 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" CameraMetadata stored in requestTemplates_ in CameraDevice is not necessary to be a raw pointer. This reduces the manual new/delete code by changing the type to std::unique_ptr. Signed-off-by: Hirokazu Honda Reviewed-by: Laurent Pinchart Reviewed-by: Jacopo Mondi --- src/android/camera_device.cpp | 22 ++++++++-------------- src/android/camera_device.h | 6 +++--- 2 files changed, 11 insertions(+), 17 deletions(-) -- 2.31.0.291.g576ba9dcdaf-goog diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp index 8fdcb85a..5fbf6f82 100644 --- a/src/android/camera_device.cpp +++ b/src/android/camera_device.cpp @@ -338,11 +338,7 @@ CameraDevice::CameraDevice(unsigned int id, std::shared_ptr camera) } } -CameraDevice::~CameraDevice() -{ - for (auto &it : requestTemplates_) - delete it.second; -} +CameraDevice::~CameraDevice() = default; std::unique_ptr CameraDevice::create(unsigned int id, std::shared_ptr cam) @@ -1358,15 +1354,14 @@ const camera_metadata_t *CameraDevice::getStaticMetadata() return staticMetadata_->get(); } -CameraMetadata *CameraDevice::requestTemplatePreview() +std::unique_ptr CameraDevice::requestTemplatePreview() { /* * \todo Keep this in sync with the actual number of entries. * Currently: 20 entries, 35 bytes */ - CameraMetadata *requestTemplate = new CameraMetadata(21, 36); + auto requestTemplate = std::make_unique(21, 36); if (!requestTemplate->isValid()) { - delete requestTemplate; return nullptr; } @@ -1454,9 +1449,9 @@ CameraMetadata *CameraDevice::requestTemplatePreview() return requestTemplate; } -CameraMetadata *CameraDevice::requestTemplateVideo() +std::unique_ptr CameraDevice::requestTemplateVideo() { - CameraMetadata *previewTemplate = requestTemplatePreview(); + std::unique_ptr previewTemplate = requestTemplatePreview(); if (!previewTemplate) return nullptr; @@ -1488,7 +1483,7 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) return it->second->get(); /* Use the capture intent matching the requested template type. */ - CameraMetadata *requestTemplate; + std::unique_ptr requestTemplate; uint8_t captureIntent; switch (type) { case CAMERA3_TEMPLATE_PREVIEW: @@ -1521,15 +1516,14 @@ const camera_metadata_t *CameraDevice::constructDefaultRequestSettings(int type) if (!requestTemplate || !requestTemplate->isValid()) { LOG(HAL, Error) << "Failed to construct request template"; - delete requestTemplate; return nullptr; } requestTemplate->updateEntry(ANDROID_CONTROL_CAPTURE_INTENT, &captureIntent, 1); - requestTemplates_[type] = requestTemplate; - return requestTemplate->get(); + requestTemplates_[type] = std::move(requestTemplate); + return requestTemplates_[type]->get(); } PixelFormat CameraDevice::toPixelFormat(int format) const diff --git a/src/android/camera_device.h b/src/android/camera_device.h index cea82b24..09c395ff 100644 --- a/src/android/camera_device.h +++ b/src/android/camera_device.h @@ -97,8 +97,8 @@ private: libcamera::FrameBuffer *createFrameBuffer(const buffer_handle_t camera3buffer); void notifyShutter(uint32_t frameNumber, uint64_t timestamp); void notifyError(uint32_t frameNumber, camera3_stream_t *stream); - CameraMetadata *requestTemplatePreview(); - CameraMetadata *requestTemplateVideo(); + std::unique_ptr requestTemplatePreview(); + std::unique_ptr requestTemplateVideo(); libcamera::PixelFormat toPixelFormat(int format) const; int processControls(Camera3RequestDescriptor *descriptor); std::unique_ptr getResultMetadata( @@ -114,7 +114,7 @@ private: std::unique_ptr config_; std::unique_ptr staticMetadata_; - std::map requestTemplates_; + std::map> requestTemplates_; const camera3_callback_ops_t *callbacks_; std::vector streamConfigurations_;