From patchwork Mon May 27 00:15:42 2019 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: 1307 Return-Path: Received: from vsp-unauthed02.binero.net (vsp-unauthed02.binero.net [195.74.38.227]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 359CB61903 for ; Mon, 27 May 2019 02:16:14 +0200 (CEST) X-Halon-ID: a150a5df-8014-11e9-8ab4-005056917a89 Authorized-sender: niklas@soderlund.pp.se Received: from bismarck.berto.se (unknown [89.233.230.99]) by bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA id a150a5df-8014-11e9-8ab4-005056917a89; Mon, 27 May 2019 02:16:10 +0200 (CEST) From: =?utf-8?q?Niklas_S=C3=B6derlund?= To: libcamera-devel@lists.libcamera.org Date: Mon, 27 May 2019 02:15:42 +0200 Message-Id: <20190527001543.13593-17-niklas.soderlund@ragnatech.se> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190527001543.13593-1-niklas.soderlund@ragnatech.se> References: <20190527001543.13593-1-niklas.soderlund@ragnatech.se> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 16/17] cam: Add --info option to print information about stream(s) X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 May 2019 00:16:15 -0000 Add a new option to cam tool which prints information about the configuration supplied by the user. If specified information is printed about the configuration after its been verified and possibly adjusted by the camera and information about each stream in the camera configuration. Signed-off-by: Niklas Söderlund --- src/cam/info.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/cam/info.h | 18 ++++++++++++++++++ src/cam/main.cpp | 8 ++++++++ src/cam/main.h | 1 + src/cam/meson.build | 1 + 5 files changed, 72 insertions(+) create mode 100644 src/cam/info.cpp create mode 100644 src/cam/info.h diff --git a/src/cam/info.cpp b/src/cam/info.cpp new file mode 100644 index 0000000000000000..35271942600494c7 --- /dev/null +++ b/src/cam/info.cpp @@ -0,0 +1,44 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * info.cpp - Displat stream information + */ + +#include +#include + +#include "info.h" + +using namespace libcamera; + +int Info::run(const CameraConfiguration *config) +{ + if (!config) { + std::cout + << "Can't display information, no configuration" + << std::endl; + return -ENODEV; + } + + unsigned int index = 0; + for (const StreamConfiguration cfg : *config) { + std::cout << index << ": " << cfg.toString() << std::endl; + + const StreamFormats &formats = cfg.formats(); + for (unsigned int pixelformat : formats.pixelformats()) { + std::cout << " * Pixelformat: 0x" << std::hex + << std::setw(8) << pixelformat << " " + << formats.range(pixelformat).toString() + << std::endl; + + for (const Size &size : formats.sizes(pixelformat)) + std::cout << " - " << size.toString() + << std::endl; + } + + index++; + } + + return 0; +} diff --git a/src/cam/info.h b/src/cam/info.h new file mode 100644 index 0000000000000000..72fd446491f95033 --- /dev/null +++ b/src/cam/info.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * info.h - Displat stream information + */ +#ifndef __CAM_INFO_H__ +#define __CAM_INFO_H__ + +#include + +class Info +{ +public: + int run(const libcamera::CameraConfiguration *config); +}; + +#endif /* __CAM_INFO_H__ */ diff --git a/src/cam/main.cpp b/src/cam/main.cpp index 25538f5ba95552d6..bf7a92b51d27c890 100644 --- a/src/cam/main.cpp +++ b/src/cam/main.cpp @@ -13,6 +13,7 @@ #include "capture.h" #include "event_loop.h" +#include "info.h" #include "main.h" #include "options.h" @@ -162,6 +163,8 @@ int CamApp::parseOptions(int argc, char *argv[]) "Set configuration of a camera stream", "stream", true); parser.addOption(OptHelp, OptionNone, "Display this help message", "help"); + parser.addOption(OptInfo, OptionNone, + "Display information about stream(s)", "info"); parser.addOption(OptList, OptionNone, "List all cameras", "list"); options_ = parser.parse(argc, argv); @@ -259,6 +262,11 @@ int CamApp::run() std::cout << "- " << cam->name() << std::endl; } + if (options_.isSet(OptInfo)) { + Info info; + info.run(config_.get()); + } + if (options_.isSet(OptCapture)) { Capture capture(camera_.get(), config_.get()); return capture.run(loop_, options_); diff --git a/src/cam/main.h b/src/cam/main.h index fff81b1f6c860b57..6324c042f89e7396 100644 --- a/src/cam/main.h +++ b/src/cam/main.h @@ -12,6 +12,7 @@ enum { OptCapture = 'C', OptFile = 'F', OptHelp = 'h', + OptInfo = 'i', OptList = 'l', OptStream = 's', }; diff --git a/src/cam/meson.build b/src/cam/meson.build index 478346c59590631d..ee5b28421e4c1235 100644 --- a/src/cam/meson.build +++ b/src/cam/meson.build @@ -2,6 +2,7 @@ cam_sources = files([ 'buffer_writer.cpp', 'capture.cpp', 'event_loop.cpp', + 'info.cpp', 'main.cpp', 'options.cpp', ])