[{"id":18125,"web_url":"https://patchwork.libcamera.org/comment/18125/","msgid":"<8d1be3c8-0609-ee56-142e-03c892a47dc6@ideasonboard.com>","date":"2021-07-12T15:14:51","subject":"Re: [libcamera-devel] [PATCH 13/30] cam: camera_session: Access\n\tevent loop through global instance","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 07/07/2021 03:19, Laurent Pinchart wrote:\n> Don't pass the event loop to the CameraSession constructor, as passing\n> this global object explicitly isn't a design that can scale.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nHrm ...\n\nI don't really have much to say, or an alternative so I won't object..\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n\n> ---\n>  src/cam/camera_session.cpp | 11 ++++++-----\n>  src/cam/camera_session.h   |  6 ++----\n>  src/cam/main.cpp           |  2 +-\n>  3 files changed, 9 insertions(+), 10 deletions(-)\n> \n> diff --git a/src/cam/camera_session.cpp b/src/cam/camera_session.cpp\n> index 439dcdb29ad7..b26c7974056d 100644\n> --- a/src/cam/camera_session.cpp\n> +++ b/src/cam/camera_session.cpp\n> @@ -13,13 +13,14 @@\n>  #include <libcamera/control_ids.h>\n>  \n>  #include \"camera_session.h\"\n> +#include \"event_loop.h\"\n>  #include \"main.h\"\n>  \n>  using namespace libcamera;\n>  \n>  CameraSession::CameraSession(std::shared_ptr<Camera> camera,\n> -\t\t\t     CameraConfiguration *config, EventLoop *loop)\n> -\t: camera_(camera), config_(config), writer_(nullptr), last_(0), loop_(loop),\n> +\t\t\t     CameraConfiguration *config)\n> +\t: camera_(camera), config_(config), writer_(nullptr), last_(0),\n>  \t  queueCount_(0), captureCount_(0), captureLimit_(0),\n>  \t  printMetadata_(false)\n>  {\n> @@ -145,7 +146,7 @@ int CameraSession::capture(FrameBufferAllocator *allocator)\n>  \telse\n>  \t\tstd::cout << \"Capture until user interrupts by SIGINT\" << std::endl;\n>  \n> -\tret = loop_->exec();\n> +\tret = EventLoop::instance()->exec();\n>  \tif (ret)\n>  \t\tstd::cout << \"Failed to run capture loop\" << std::endl;\n>  \n> @@ -175,7 +176,7 @@ void CameraSession::requestComplete(Request *request)\n>  \t * Defer processing of the completed request to the event loop, to avoid\n>  \t * blocking the camera manager thread.\n>  \t */\n> -\tloop_->callLater([=]() { processRequest(request); });\n> +\tEventLoop::instance()->callLater([=]() { processRequest(request); });\n>  }\n>  \n>  void CameraSession::processRequest(Request *request)\n> @@ -231,7 +232,7 @@ void CameraSession::processRequest(Request *request)\n>  \n>  \tcaptureCount_++;\n>  \tif (captureLimit_ && captureCount_ >= captureLimit_) {\n> -\t\tloop_->exit(0);\n> +\t\tEventLoop::instance()->exit(0);\n>  \t\treturn;\n>  \t}\n>  \n> diff --git a/src/cam/camera_session.h b/src/cam/camera_session.h\n> index ef8a11c3bfb4..270ba3e929e7 100644\n> --- a/src/cam/camera_session.h\n> +++ b/src/cam/camera_session.h\n> @@ -18,17 +18,16 @@\n>  #include <libcamera/stream.h>\n>  \n>  #include \"buffer_writer.h\"\n> -#include \"event_loop.h\"\n>  #include \"options.h\"\n>  \n>  class CameraSession\n>  {\n>  public:\n>  \tCameraSession(std::shared_ptr<libcamera::Camera> camera,\n> -\t\t      libcamera::CameraConfiguration *config,\n> -\t\t      EventLoop *loop);\n> +\t\t      libcamera::CameraConfiguration *config);\n>  \n>  \tint run(const OptionsParser::Options &options);\n> +\n>  private:\n>  \tint capture(libcamera::FrameBufferAllocator *allocator);\n>  \n> @@ -43,7 +42,6 @@ private:\n>  \tBufferWriter *writer_;\n>  \tuint64_t last_;\n>  \n> -\tEventLoop *loop_;\n>  \tunsigned int queueCount_;\n>  \tunsigned int captureCount_;\n>  \tunsigned int captureLimit_;\n> diff --git a/src/cam/main.cpp b/src/cam/main.cpp\n> index f71b65a20fe2..90435206d386 100644\n> --- a/src/cam/main.cpp\n> +++ b/src/cam/main.cpp\n> @@ -363,7 +363,7 @@ int CamApp::run()\n>  \t}\n>  \n>  \tif (options_.isSet(OptCapture)) {\n> -\t\tCameraSession session(camera_, config_.get(), &loop_);\n> +\t\tCameraSession session(camera_, config_.get());\n>  \t\treturn session.run(options_);\n>  \t}\n>  \n>","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 70B05C3226\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 12 Jul 2021 15:14:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2477068521;\n\tMon, 12 Jul 2021 17:14:55 +0200 (CEST)","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 E102468513\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 12 Jul 2021 17:14:53 +0200 (CEST)","from [192.168.0.20]\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 79CD9CC;\n\tMon, 12 Jul 2021 17:14:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"nnX4YjdX\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1626102893;\n\tbh=3dPDqfjRLiZdzdvzv33/LLimrnLIGKMcWvFXJleS8J8=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=nnX4YjdXfj/5wHuYpTwiHdxggqYmWbFFlJSnIlXzV6WQONY/3D576hUqLrg7aHiuY\n\tpzpeOqgTaRG+i01kO/IiUvPKfex5FyfuQHSN2YZICYUgBB9errCDnXP8cdyb6Mtl6u\n\tDsVuEtxVFiS5zp+4DRktE+0U5+HKZ+yO8pb4F+pM=","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20210707021941.20804-1-laurent.pinchart@ideasonboard.com>\n\t<20210707021941.20804-14-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<8d1be3c8-0609-ee56-142e-03c892a47dc6@ideasonboard.com>","Date":"Mon, 12 Jul 2021 16:14:51 +0100","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.11.0","MIME-Version":"1.0","In-Reply-To":"<20210707021941.20804-14-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH 13/30] cam: camera_session: Access\n\tevent loop through global instance","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]