From patchwork Mon Jul 12 21:56:28 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 12926 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 4BEE0C3229 for ; Mon, 12 Jul 2021 21:57:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D0E8B6855B; Mon, 12 Jul 2021 23:57:48 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="vJ/PHTx1"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2ED8E68531 for ; Mon, 12 Jul 2021 23:57:40 +0200 (CEST) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C9BC33F1 for ; Mon, 12 Jul 2021 23:57:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1626127059; bh=rIhvtB3w5fduVbqUYzhKblh9+JsjkCTndBVFakGjcgQ=; h=From:To:Subject:Date:In-Reply-To:References:From; b=vJ/PHTx1sK5Ok2b7sIKUK4KsIZbDa3fjuTxdX/Mk8biBAv41KlSKmOTLFUU15QV8w 1xKekwN6hkqyKjS6emYwbk5xpssQMUxkbeoAwu31wkCd5ICghZMIG3HaifYokHXC1s kQL1FkkiouBtaXYMhDc6fpTX1Kz25bCTH1H4mJSM= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Tue, 13 Jul 2021 00:56:28 +0300 Message-Id: <20210712215645.30478-14-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210712215645.30478-1-laurent.pinchart@ideasonboard.com> References: <20210712215645.30478-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 13/30] cam: camera_session: Access event loop through global instance 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" Don't pass the event loop to the CameraSession constructor, as passing this global object explicitly isn't a design that can scale. Signed-off-by: Laurent Pinchart Reviewed-by: Kieran Bingham --- src/cam/camera_session.cpp | 11 ++++++----- src/cam/camera_session.h | 6 ++---- src/cam/main.cpp | 2 +- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp index 439dcdb29ad7..b26c7974056d 100644 --- a/src/cam/camera_session.cpp +++ b/src/cam/camera_session.cpp @@ -13,13 +13,14 @@ #include #include "camera_session.h" +#include "event_loop.h" #include "main.h" using namespace libcamera; CameraSession::CameraSession(std::shared_ptr camera, - CameraConfiguration *config, EventLoop *loop) - : camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop), + CameraConfiguration *config) + : camera_(camera), config_(config), writer_(nullptr), last_(0), queueCount_(0), captureCount_(0), captureLimit_(0), printMetadata_(false) { @@ -145,7 +146,7 @@ int CameraSession::capture(FrameBufferAllocator *allocator) else std::cout << "Capture until user interrupts by SIGINT" << std::endl; - ret = loop_->exec(); + ret = EventLoop::instance()->exec(); if (ret) std::cout << "Failed to run capture loop" << std::endl; @@ -175,7 +176,7 @@ void CameraSession::requestComplete(Request *request) * Defer processing of the completed request to the event loop, to avoid * blocking the camera manager thread. */ - loop_->callLater([=]() { processRequest(request); }); + EventLoop::instance()->callLater([=]() { processRequest(request); }); } void CameraSession::processRequest(Request *request) @@ -231,7 +232,7 @@ void CameraSession::processRequest(Request *request) captureCount_++; if (captureLimit_ && captureCount_ >= captureLimit_) { - loop_->exit(0); + EventLoop::instance()->exit(0); return; } diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h index ef8a11c3bfb4..270ba3e929e7 100644 --- a/src/cam/camera_session.h +++ b/src/cam/camera_session.h @@ -18,17 +18,16 @@ #include #include "buffer_writer.h" -#include "event_loop.h" #include "options.h" class CameraSession { public: CameraSession(std::shared_ptr camera, - libcamera::CameraConfiguration *config, - EventLoop *loop); + libcamera::CameraConfiguration *config); int run(const OptionsParser::Options &options); + private: int capture(libcamera::FrameBufferAllocator *allocator); @@ -43,7 +42,6 @@ private: BufferWriter *writer_; uint64_t last_; - EventLoop *loop_; unsigned int queueCount_; unsigned int captureCount_; unsigned int captureLimit_; diff --git a/src/cam/main.cpp b/src/cam/main.cpp index f71b65a20fe2..90435206d386 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -363,7 +363,7 @@ int CamApp::run() } if (options_.isSet(OptCapture)) { - CameraSession session(camera_, config_.get(), &loop_); + CameraSession session(camera_, config_.get()); return session.run(options_); }