[libcamera-devel] [PATCH] libcamera: qcam: Allow specifying sizes on command line
Jacopo Mondi
jacopo at jmondi.org
Mon Jul 15 08:02:22 CEST 2019
Hi Niklas,
On Sun, Jul 14, 2019 at 04:19:30PM +0900, Niklas Söderlund wrote:
> Hi Jacopo,
>
> Thanks for your work.
>
> On 2019-07-13 16:51:19 +0200, Jacopo Mondi wrote:
> > 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 at jmondi.org>
> > ---
> > src/qcam/main.cpp | 8 ++++++++
> > src/qcam/main_window.cpp | 31 ++++++++++++++++++++++++++++++-
> > src/qcam/main_window.h | 1 +
> > 3 files changed, 39 insertions(+), 1 deletion(-)
> >
> > diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> > index 106b8a162d9f..da942f3daed6 100644
> > --- a/src/qcam/main.cpp
> > +++ b/src/qcam/main.cpp
> > @@ -25,12 +25,20 @@ void signalHandler(int signal)
> >
> > OptionsParser::Options parseOptions(int argc, char *argv[])
> > {
> > + KeyValueParser sizeParser;
> > + sizeParser.addOption("width", OptionInteger, "Width in pixels",
> > + ArgumentRequired);
> > + sizeParser.addOption("height", OptionInteger, "Height in pixels",
> > + ArgumentRequired);
> > +
> > OptionsParser parser;
> > parser.addOption(OptCamera, OptionString,
> > "Specify which camera to operate on", "camera",
> > ArgumentRequired, "camera");
> > parser.addOption(OptHelp, OptionNone, "Display this help message",
> > "help");
> > + parser.addOption(OptSize, &sizeParser, "Set the stream size",
> > + "size", true);
>
> I wonder if we should not call this --stream to match with the cam
> utility, whit this and the comments pointed out by you.
>
As qcam does not support multiple streams, and this option only
configure sizes (not even pixel formats), I would keep using 'sizes'
as the option name.
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
Thanks, I'll fix Laurent's comments, take your tag in and then push.
>
> >
> > OptionsParser::Options options = parser.parse(argc, argv);
> > if (options.isSet(OptHelp))
> > diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> > index 907d2423ed15..d9a30aa15db0 100644
> > --- a/src/qcam/main_window.cpp
> > +++ b/src/qcam/main_window.cpp
> > @@ -116,13 +116,42 @@ 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 (auto const &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 << "Faild to apply camera configuration";
> > + return -EINVAL;
> > + }
> > +
> > + if (validation == CameraConfiguration::Adjusted) {
> > + std::cout << "Stream sizes adjusted to "
> > + << cfg.size.width << "x" << cfg.size.height
> > + << 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);
> > diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> > index f58cb6a65b2b..b45cbca725fa 100644
> > --- a/src/qcam/main_window.h
> > +++ b/src/qcam/main_window.h
> > @@ -27,6 +27,7 @@ class ViewFinder;
> > enum {
> > OptCamera = 'c',
> > OptHelp = 'h',
> > + OptSize = 's',
> > };
> >
> > class MainWindow : public QMainWindow
> > --
> > 2.21.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
> --
> Regards,
> Niklas Söderlund
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190715/d7882e03/attachment.sig>
More information about the libcamera-devel
mailing list