summaryrefslogtreecommitdiff
path: root/src/qcam/main_window.cpp
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-07-13 16:51:19 +0200
committerJacopo Mondi <jacopo@jmondi.org>2019-07-17 04:49:38 +0200
commita5ebcea8c0080bea478514c6fa6dd83c28adb986 (patch)
treedf2ad6b86d40a8c12bdb339d8f9a460a6f26dda4 /src/qcam/main_window.cpp
parentfae053307dcc6807dd8ab127294c1fe5c5bb2d72 (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.cpp30
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);