[libcamera-devel] [PATCH v2 15/16] cam: Add --info option to print information about stream(s)

Jacopo Mondi jacopo at jmondi.org
Thu Jun 13 19:09:39 CEST 2019


Hi Niklas,

On Wed, Jun 12, 2019 at 02:43:58AM +0200, Niklas Söderlund wrote:
> 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 possibly adjusted by the camera.
>

Sorry, I don't get it, how is cam supposed to be launched to print the
stream informations?

Just running
$ cam -I
segfaults for me...

I tried passing a few arguments, like some permutation of the
following:
$ ./src/cam/cam -I width=1920,height=1080,role=viewfinder
but I still get a segfault...

What am I doing wrong?

> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  src/cam/info.cpp    | 37 +++++++++++++++++++++++++++++++++++++
>  src/cam/info.h      | 14 ++++++++++++++
>  src/cam/main.cpp    |  6 ++++++
>  src/cam/main.h      |  1 +
>  src/cam/meson.build |  1 +
>  5 files changed, 59 insertions(+)
>  create mode 100644 src/cam/info.cpp
>  create mode 100644 src/cam/info.h
>
> diff --git a/src/cam/info.cpp b/src/cam/info.cpp
> new file mode 100644
> index 0000000000000000..fe32ceb614e85794
> --- /dev/null
> +++ b/src/cam/info.cpp
> @@ -0,0 +1,37 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * info.cpp - Display stream information
> + */
> +
> +#include <iomanip>
> +#include <iostream>
> +
> +#include "info.h"
> +
> +using namespace libcamera;
> +
> +int infoConfiguration(const libcamera::CameraConfiguration &config)
> +{
> +	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;
> +}
> diff --git a/src/cam/info.h b/src/cam/info.h
> new file mode 100644
> index 0000000000000000..d4b4fc7e73d261b6
> --- /dev/null
> +++ b/src/cam/info.h
> @@ -0,0 +1,14 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * info.h - Displat stream information

display

> + */
> +#ifndef __CAM_INFO_H__
> +#define __CAM_INFO_H__
> +
> +#include <libcamera/camera.h>
> +
> +int infoConfiguration(const libcamera::CameraConfiguration &config);
> +
> +#endif /* __CAM_INFO_H__ */
> diff --git a/src/cam/main.cpp b/src/cam/main.cpp
> index 191fef3a3c8a2b64..c0a5601316d1959d 100644
> --- a/src/cam/main.cpp
> +++ b/src/cam/main.cpp
> @@ -13,6 +13,7 @@
>
>  #include "capture.h"
>  #include "event_loop.h"
> +#include "info.h"
>  #include "main.h"
>  #include "options.h"
>
> @@ -162,6 +163,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);
> @@ -259,6 +262,9 @@ int CamApp::run()
>  			std::cout << "- " << cam->name() << std::endl;
>  	}
>
> +	if (options_.isSet(OptInfo))
> +		infoConfiguration(*config_.get());
> +
>  	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 fff81b1f6c860b57..0997476bb335e446 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',
>  };
> diff --git a/src/cam/meson.build b/src/cam/meson.build
> index 478346c59590631d..ee5b28421e4c1235 100644
> --- a/src/cam/meson.build
> +++ b/src/cam/meson.build
> @@ -2,6 +2,7 @@ cam_sources = files([
>      'buffer_writer.cpp',
>      'capture.cpp',
>      'event_loop.cpp',
> +    'info.cpp',
>      'main.cpp',
>      'options.cpp',
>  ])
> --
> 2.21.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- 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/20190613/29cc3ca4/attachment.sig>


More information about the libcamera-devel mailing list