From patchwork Fri Jul 24 17:48:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 8986 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 C89D8BD879 for ; Fri, 24 Jul 2020 17:48:45 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8A4EB61253; Fri, 24 Jul 2020 19:48:45 +0200 (CEST) Received: from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net [195.74.38.227]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 188C261236 for ; Fri, 24 Jul 2020 19:48:43 +0200 (CEST) X-Halon-ID: e92456e2-cdd5-11ea-8fb8-005056917f90 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (p4fca2eca.dip0.t-ipconnect.de [79.202.46.202]) by bin-vsp-out-02.atm.binero.net (Halon) with ESMTPA id e92456e2-cdd5-11ea-8fb8-005056917f90; Fri, 24 Jul 2020 19:48:42 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Fri, 24 Jul 2020 19:48:27 +0200 Message-Id: <20200724174827.757493-4-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724174827.757493-1-niklas.soderlund@ragnatech.se> References: <20200724174827.757493-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 3/3] cam: Add optional argument to --capture to specify how many frames to capture 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" Extend the '--capture' option with and optional numerical argument to be able to specify how many frames to capture before exiting. If the optional argument is not provided the old behavior of running until the user interrupts with a SIGINT is retained. Signed-off-by: Niklas Söderlund Reviewed-by: Laurent Pinchart --- * Changes since v1 - Extend --capture option instead of adding a new --count option. --- src/cam/capture.cpp | 17 +++++++++++++++-- src/cam/capture.h | 2 ++ src/cam/main.cpp | 5 +++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/cam/capture.cpp b/src/cam/capture.cpp index aa53c407d7b71b44..2378c1c737e9f419 100644 --- a/src/cam/capture.cpp +++ b/src/cam/capture.cpp @@ -17,7 +17,8 @@ using namespace libcamera; Capture::Capture(std::shared_ptr camera, CameraConfiguration *config) - : camera_(camera), config_(config), writer_(nullptr), loop_(nullptr) + : camera_(camera), config_(config), writer_(nullptr), loop_(nullptr), + captureCount_(0), captureLimit_(0) { } @@ -26,6 +27,8 @@ int Capture::run(EventLoop *loop, const OptionsParser::Options &options) int ret; loop_ = loop; + captureCount_ = 0; + captureLimit_ = options[OptCapture].toInteger(); if (!camera_) { std::cout << "Can't capture without a camera" << std::endl; @@ -133,7 +136,11 @@ int Capture::capture(FrameBufferAllocator *allocator) } } - std::cout << "Capture until user interrupts by SIGINT" << std::endl; + if (captureLimit_) + std::cout << "Capture " << captureLimit_ << " frames" << std::endl; + else + std::cout << "Capture until user interrupts by SIGINT" << std::endl; + ret = loop_->exec(); if (ret) std::cout << "Failed to run capture loop" << std::endl; @@ -202,5 +209,11 @@ void Capture::requestComplete(Request *request) request->addBuffer(stream, buffer); } + captureCount_++; + if (captureLimit_ && captureCount_ >= captureLimit_) { + loop_->exit(0); + return; + } + camera_->queueRequest(request); } diff --git a/src/cam/capture.h b/src/cam/capture.h index 67c6260bfe24aefc..0a1cbc519f2a90c5 100644 --- a/src/cam/capture.h +++ b/src/cam/capture.h @@ -40,6 +40,8 @@ private: std::chrono::steady_clock::time_point last_; EventLoop *loop_; + unsigned int captureCount_; + unsigned int captureLimit_; }; #endif /* __CAM_CAPTURE_H__ */ diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 2009f11b6c336f2c..adbb1c657de0f053 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -167,8 +167,9 @@ int CamApp::parseOptions(int argc, char *argv[]) parser.addOption(OptCamera, OptionString, "Specify which camera to operate on, by name or by index", "camera", ArgumentRequired, "camera"); - parser.addOption(OptCapture, OptionNone, - "Capture until interrupted by user", "capture"); + parser.addOption(OptCapture, OptionInteger, + "Capture until interrupted by user or until frames captured", + "capture", ArgumentOptional, "count"); parser.addOption(OptFile, OptionString, "Write captured frames to disk\n" "The first '#' character in the file name is expanded to the stream name and frame sequence number.\n"