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

Niklas Söderlund niklas.soderlund at ragnatech.se
Sun Jun 16 15:19:56 CEST 2019


Hi Jacopo,

Thanks for your feedback and great catch.

On 2019-06-13 19:09:39 +0200, Jacopo Mondi wrote:
> 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...

The idea is to print information about a camera

    $ ./cam -c "Venus USB2.0 Camera: Venus USB2" -I
    [123:40:14.524077360]   ERR IPAManager ipa_manager.cpp:96 Invalid path /usr/local/lib/libcamera for IPA modules: No such file or directory
    [123:40:14.524167583]  WARN VIMC vimc.cpp:258 no matching IPA found
    Using camera Venus USB2.0 Camera: Venus USB2
    0: 1600x1200-0x47504a4d
     * Pixelformat: 0x47504a4d (160x120)-(1600x1200)/(+0,+0)
      - 160x120
      - 176x144
      - 320x240
      - 352x288
      - 640x480
      - 800x600
      - 1280x960
      - 1280x1024
      - 1600x1200
     * Pixelformat: 0x56595559 (160x120)-(1600x1200)/(+0,+0)
      - 160x120
      - 176x144
      - 320x240
      - 352x288
      - 640x480
      - 800x600
      - 1280x960
      - 1280x1024
      - 1600x120

But you finding this segfault was really nice, I will fix it for v3.

> 
> 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



-- 
Regards,
Niklas Söderlund


More information about the libcamera-devel mailing list