{"id":1446,"url":"https://patchwork.libcamera.org/api/1.1/patches/1446/?format=json","web_url":"https://patchwork.libcamera.org/patch/1446/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20190616133402.21934-16-niklas.soderlund@ragnatech.se>","date":"2019-06-16T13:34:01","name":"[libcamera-devel,v3,15/16] cam: Add --info option to print information about stream(s)","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"be0bf505ddea78fee59bac255c42d7358ec1b2c6","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/1.1/people/5/?format=json","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/1446/mbox/","series":[{"id":358,"url":"https://patchwork.libcamera.org/api/1.1/series/358/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=358","date":"2019-06-16T13:33:46","name":"libcamera: Add support for format information and validation","version":3,"mbox":"https://patchwork.libcamera.org/series/358/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/1446/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/1446/checks/","tags":{},"headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from bin-mail-out-06.binero.net (bin-mail-out-06.binero.net\n\t[195.74.38.229])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AD56A6478C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 16 Jun 2019 15:35:42 +0200 (CEST)","from bismarck.berto.se (unknown [89.233.230.99])\n\tby bin-vsp-out-01.atm.binero.net (Halon) with ESMTPA\n\tid 9bc9a9ef-903b-11e9-8ab4-005056917a89;\n\tSun, 16 Jun 2019 15:35:30 +0200 (CEST)"],"X-Halon-ID":"9bc9a9ef-903b-11e9-8ab4-005056917a89","Authorized-sender":"niklas@soderlund.pp.se","From":"=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>","To":"libcamera-devel@lists.libcamera.org","Date":"Sun, 16 Jun 2019 15:34:01 +0200","Message-Id":"<20190616133402.21934-16-niklas.soderlund@ragnatech.se>","X-Mailer":"git-send-email 2.21.0","In-Reply-To":"<20190616133402.21934-1-niklas.soderlund@ragnatech.se>","References":"<20190616133402.21934-1-niklas.soderlund@ragnatech.se>","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v3 15/16] cam: Add --info option to print\n\tinformation about stream(s)","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","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>","X-List-Received-Date":"Sun, 16 Jun 2019 13:35:43 -0000"},"content":"Add a new option to the cam tool that prints information about the\nconfiguration supplied by the user. If the option is specified,\ninformation about the configuration is printed after the configuration\nhas been verified possibly adjusted by the camera.\n\nSigned-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n---\n src/cam/info.cpp    | 37 +++++++++++++++++++++++++++++++++++++\n src/cam/info.h      | 14 ++++++++++++++\n src/cam/main.cpp    | 13 +++++++++++++\n src/cam/main.h      |  1 +\n src/cam/meson.build |  1 +\n 5 files changed, 66 insertions(+)\n create mode 100644 src/cam/info.cpp\n create mode 100644 src/cam/info.h","diff":"diff --git a/src/cam/info.cpp b/src/cam/info.cpp\nnew file mode 100644\nindex 0000000000000000..fe32ceb614e85794\n--- /dev/null\n+++ b/src/cam/info.cpp\n@@ -0,0 +1,37 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+/*\n+ * Copyright (C) 2019, Google Inc.\n+ *\n+ * info.cpp - Display stream information\n+ */\n+\n+#include <iomanip>\n+#include <iostream>\n+\n+#include \"info.h\"\n+\n+using namespace libcamera;\n+\n+int infoConfiguration(const libcamera::CameraConfiguration &config)\n+{\n+\tunsigned int index = 0;\n+\tfor (const StreamConfiguration &cfg : config) {\n+\t\tstd::cout << index << \": \" << cfg.toString() << std::endl;\n+\n+\t\tconst StreamFormats &formats = cfg.formats();\n+\t\tfor (unsigned int pixelformat : formats.pixelformats()) {\n+\t\t\tstd::cout << \" * Pixelformat: 0x\" << std::hex\n+\t\t\t\t  << std::setw(8) << pixelformat << \" \"\n+\t\t\t\t  << formats.range(pixelformat).toString()\n+\t\t\t\t  << std::endl;\n+\n+\t\t\tfor (const Size &size : formats.sizes(pixelformat))\n+\t\t\t\tstd::cout << \"  - \" << size.toString()\n+\t\t\t\t\t  << std::endl;\n+\t\t}\n+\n+\t\tindex++;\n+\t}\n+\n+\treturn 0;\n+}\ndiff --git a/src/cam/info.h b/src/cam/info.h\nnew file mode 100644\nindex 0000000000000000..65e31497e5cac358\n--- /dev/null\n+++ b/src/cam/info.h\n@@ -0,0 +1,14 @@\n+/* SPDX-License-Identifier: GPL-2.0-or-later */\n+/*\n+ * Copyright (C) 2019, Google Inc.\n+ *\n+ * info.h - Display stream information\n+ */\n+#ifndef __CAM_INFO_H__\n+#define __CAM_INFO_H__\n+\n+#include <libcamera/camera.h>\n+\n+int infoConfiguration(const libcamera::CameraConfiguration &config);\n+\n+#endif /* __CAM_INFO_H__ */\ndiff --git a/src/cam/main.cpp b/src/cam/main.cpp\nindex 191fef3a3c8a2b64..7c68cb290d597430 100644\n--- a/src/cam/main.cpp\n+++ b/src/cam/main.cpp\n@@ -13,6 +13,7 @@\n \n #include \"capture.h\"\n #include \"event_loop.h\"\n+#include \"info.h\"\n #include \"main.h\"\n #include \"options.h\"\n \n@@ -162,6 +163,8 @@ int CamApp::parseOptions(int argc, char *argv[])\n \t\t\t \"Set configuration of a camera stream\", \"stream\", true);\n \tparser.addOption(OptHelp, OptionNone, \"Display this help message\",\n \t\t\t \"help\");\n+\tparser.addOption(OptInfo, OptionNone,\n+\t\t\t \"Display information about stream(s)\", \"info\");\n \tparser.addOption(OptList, OptionNone, \"List all cameras\", \"list\");\n \n \toptions_ = parser.parse(argc, argv);\n@@ -259,6 +262,16 @@ int CamApp::run()\n \t\t\tstd::cout << \"- \" << cam->name() << std::endl;\n \t}\n \n+\tif (options_.isSet(OptInfo)) {\n+\t\tif (!config_.get()) {\n+\t\t\tstd::cout << \"Can't print information without a camera\"\n+\t\t\t\t  << std::endl;\n+\t\t\treturn -ENODEV;\n+\t\t}\n+\n+\t\tinfoConfiguration(*config_.get());\n+\t}\n+\n \tif (options_.isSet(OptCapture)) {\n \t\tCapture capture(camera_.get(), config_.get());\n \t\treturn capture.run(loop_, options_);\ndiff --git a/src/cam/main.h b/src/cam/main.h\nindex fff81b1f6c860b57..0997476bb335e446 100644\n--- a/src/cam/main.h\n+++ b/src/cam/main.h\n@@ -12,6 +12,7 @@ enum {\n \tOptCapture = 'C',\n \tOptFile = 'F',\n \tOptHelp = 'h',\n+\tOptInfo = 'I',\n \tOptList = 'l',\n \tOptStream = 's',\n };\ndiff --git a/src/cam/meson.build b/src/cam/meson.build\nindex 478346c59590631d..ee5b28421e4c1235 100644\n--- a/src/cam/meson.build\n+++ b/src/cam/meson.build\n@@ -2,6 +2,7 @@ cam_sources = files([\n     'buffer_writer.cpp',\n     'capture.cpp',\n     'event_loop.cpp',\n+    'info.cpp',\n     'main.cpp',\n     'options.cpp',\n ])\n","prefixes":["libcamera-devel","v3","15/16"]}