summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-05-26 02:26:55 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-06-19 12:25:12 +0200
commit802d47068b734f33b2e1c102202e19c227cfb291 (patch)
tree8083543a5b21213f79f7bcfe98dbee286cb4263f
parent7c856201c7fdf6758589d0573378f18b6a04af49 (diff)
cam: Add --info option to print information about stream(s)
Add a new option to the cam tool that prints information about the configuration supplied by the user. If the option is specified, information about the configuration is printed after the configuration has been verified and possibly adjusted by the camera. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/cam/main.cpp42
-rw-r--r--src/cam/main.h1
2 files changed, 43 insertions, 0 deletions
diff --git a/src/cam/main.cpp b/src/cam/main.cpp
index 4e9abf66..77bb20e9 100644
--- a/src/cam/main.cpp
+++ b/src/cam/main.cpp
@@ -5,6 +5,7 @@
* main.cpp - cam - The libcamera swiss army knife
*/
+#include <iomanip>
#include <iostream>
#include <signal.h>
#include <string.h>
@@ -34,6 +35,7 @@ public:
private:
int parseOptions(int argc, char *argv[]);
int prepareConfig();
+ int infoConfiguration();
int run();
static CamApp *app_;
@@ -169,6 +171,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);
@@ -258,8 +262,40 @@ int CamApp::prepareConfig()
return 0;
}
+int CamApp::infoConfiguration()
+{
+ if (!config_) {
+ std::cout << "Cannot print stream information without a camera"
+ << std::endl;
+ return -EINVAL;
+ }
+
+ 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;
+}
+
int CamApp::run()
{
+ int ret;
+
if (options_.isSet(OptList)) {
std::cout << "Available cameras:" << std::endl;
@@ -270,6 +306,12 @@ int CamApp::run()
}
}
+ if (options_.isSet(OptInfo)) {
+ ret = infoConfiguration();
+ if (ret)
+ return ret;
+ }
+
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 fff81b1f..0997476b 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',
};