diff options
author | Jacopo Mondi <jacopo@jmondi.org> | 2019-07-13 16:51:19 +0200 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2019-07-17 04:49:38 +0200 |
commit | a5ebcea8c0080bea478514c6fa6dd83c28adb986 (patch) | |
tree | df2ad6b86d40a8c12bdb339d8f9a460a6f26dda4 /src/qcam/main_window.cpp | |
parent | fae053307dcc6807dd8ab127294c1fe5c5bb2d72 (diff) |
libcamera: qcam: Allow specifying sizes on command line
Add a '-s|--size' option to qcam to allow selecting the stream
resolution using a command line option.
If the sizes are not supported by the camera, they get automatically
adjusted and the user notified via an output message.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Diffstat (limited to 'src/qcam/main_window.cpp')
-rw-r--r-- | src/qcam/main_window.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index 5c26ab8e..dcb653e8 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -116,13 +116,41 @@ int MainWindow::startCapture() int ret; config_ = camera_->generateConfiguration({ StreamRole::VideoRecording }); + + StreamConfiguration &cfg = config_->at(0); + if (options_.isSet(OptSize)) { + const std::vector<OptionValue> &sizeOptions = + options_[OptSize].toArray(); + + /* Set desired stream size if requested. */ + for (const auto &value : sizeOptions) { + KeyValueParser::Options opt = value.toKeyValues(); + + if (opt.isSet("width")) + cfg.size.width = opt["width"]; + + if (opt.isSet("height")) + cfg.size.height = opt["height"]; + } + } + + CameraConfiguration::Status validation = config_->validate(); + if (validation == CameraConfiguration::Invalid) { + std::cerr << "Failed to create valid camera configuration"; + return -EINVAL; + } + + if (validation == CameraConfiguration::Adjusted) { + std::cout << "Stream size adjusted to " + << cfg.size.toString() << std::endl; + } + ret = camera_->configure(config_.get()); if (ret < 0) { std::cout << "Failed to configure camera" << std::endl; return ret; } - const StreamConfiguration &cfg = config_->at(0); Stream *stream = cfg.stream(); ret = viewfinder_->setFormat(cfg.pixelFormat, cfg.size.width, cfg.size.height); |