[libcamera-devel] [PATCH 3/3] qcam: Make log less verbose by default

Jacopo Mondi jacopo at jmondi.org
Tue Nov 24 21:28:02 CET 2020


Hi Laurent,

On Tue, Nov 24, 2020 at 07:43:42PM +0200, Laurent Pinchart wrote:
> The qcam log prints one message per frame, which is pretty verbose. This
> feature is useful for debugging, but not necessarily as a default
> option. Silence it by default, and add a -v/--verbose command line
> parameter to make the log verbose.
>
> While this could have been handled manually by checking a verbose flag
> when printing the message, the feature is instead integrated with the Qt
> log infrastructure to make it more flexible. Messages printed by
> qDebug() are now silenced by default and controlled by the -v/--verbose
> argument.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
>  src/qcam/main.cpp            |  5 +++++
>  src/qcam/main_window.cpp     |  2 +-
>  src/qcam/main_window.h       |  2 ++
>  src/qcam/meson.build         |  1 +
>  src/qcam/message_handler.cpp | 27 +++++++++++++++++++++++++++
>  src/qcam/message_handler.h   | 26 ++++++++++++++++++++++++++
>  6 files changed, 62 insertions(+), 1 deletion(-)
>  create mode 100644 src/qcam/message_handler.cpp
>  create mode 100644 src/qcam/message_handler.h
>
> diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> index 5505a5d88ef6..5eff90a3fa66 100644
> --- a/src/qcam/main.cpp
> +++ b/src/qcam/main.cpp
> @@ -16,6 +16,7 @@
>  #include "../cam/options.h"
>  #include "../cam/stream_options.h"
>  #include "main_window.h"
> +#include "message_handler.h"
>
>  void signalHandler([[maybe_unused]] int signal)
>  {
> @@ -38,6 +39,8 @@ OptionsParser::Options parseOptions(int argc, char *argv[])
>  			 "renderer", ArgumentRequired, "renderer");
>  	parser.addOption(OptStream, &streamKeyValue,
>  			 "Set configuration of a camera stream", "stream", true);
> +	parser.addOption(OptVerbose, OptionNone,
> +			 "Print verbose log messages", "verbose");
>
>  	OptionsParser::Options options = parser.parse(argc, argv);
>  	if (options.isSet(OptHelp))
> @@ -57,6 +60,8 @@ int main(int argc, char **argv)
>  	if (options.isSet(OptHelp))
>  		return 0;
>
> +	MessageHandler msgHandler(options.isSet(OptVerbose));
> +
>  	struct sigaction sa = {};
>  	sa.sa_handler = &signalHandler;
>  	sigaction(SIGINT, &sa, nullptr);
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index 2502ecd40abe..39d034de6bb2 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -746,7 +746,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
>  	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
>  	lastBufferTime_ = metadata.timestamp;
>
> -	qInfo().noquote()
> +	qDebug().noquote()
>  		<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
>  		<< "bytesused:" << metadata.planes[0].bytesused
>  		<< "timestamp:" << metadata.timestamp
> diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> index 64bcfebc7dbd..a9aa8ffcd8fd 100644
> --- a/src/qcam/main_window.h
> +++ b/src/qcam/main_window.h
> @@ -41,6 +41,7 @@ enum {
>  	OptHelp = 'h',
>  	OptRenderer = 'r',
>  	OptStream = 's',
> +	OptVerbose = 'v',
>  };
>
>  class MainWindow : public QMainWindow
> @@ -98,6 +99,7 @@ private:
>
>  	/* Options */
>  	const OptionsParser::Options &options_;
> +	bool verbose_;

Is this used ?
It seems you pass the result of options.isSet() directly.

>
>  	/* Camera manager, camera, configuration and buffers */
>  	CameraManager *cm_;
> diff --git a/src/qcam/meson.build b/src/qcam/meson.build
> index 9bb48c0d06c5..ebcd5ca010cf 100644
> --- a/src/qcam/meson.build
> +++ b/src/qcam/meson.build
> @@ -6,6 +6,7 @@ qcam_sources = files([
>      'format_converter.cpp',
>      'main.cpp',
>      'main_window.cpp',
> +    'message_handler.cpp',
>      'viewfinder_qt.cpp',
>  ])
>
> diff --git a/src/qcam/message_handler.cpp b/src/qcam/message_handler.cpp
> new file mode 100644
> index 000000000000..261623e19ca9
> --- /dev/null
> +++ b/src/qcam/message_handler.cpp
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2020, Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + *
> + * message_handler.cpp - qcam - Log message handling
> + */
> +
> +#include "message_handler.h"
> +
> +QtMessageHandler MessageHandler::handler_ = nullptr;
> +bool MessageHandler::verbose_ = false;
> +
> +MessageHandler::MessageHandler(bool verbose)
> +{
> +	verbose_ = verbose;
> +	handler_ = qInstallMessageHandler(&MessageHandler::handleMessage);
> +}
> +
> +void MessageHandler::handleMessage(QtMsgType type,
> +				   const QMessageLogContext &context,
> +				   const QString &msg)
> +{
> +	if (type == QtDebugMsg && !verbose_)
> +		return;
> +
> +	handler_(type, context, msg);
> +}
> diff --git a/src/qcam/message_handler.h b/src/qcam/message_handler.h
> new file mode 100644
> index 000000000000..4534db9d93f7
> --- /dev/null
> +++ b/src/qcam/message_handler.h
> @@ -0,0 +1,26 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2020, Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + *
> + * message_handler.cpp - qcam - Log message handling

s/.cpp/.h

> + */
> +#ifndef __QCAM_MESSAGE_HANDLER_H__
> +#define __QCAM_MESSAGE_HANDLER_H__
> +
> +#include <QtGlobal>
> +
> +class MessageHandler
> +{
> +public:
> +	MessageHandler(bool verbose);
> +
> +private:
> +	static void handleMessage(QtMsgType type,
> +				  const QMessageLogContext &context,
> +				  const QString &msg);
> +
> +	static QtMessageHandler handler_;
> +	static bool verbose_;
> +};
> +
> +#endif /* __QCAM_MESSAGE_HANDLER_H__ */

As Kieran said, potentially an overkill, but if we want more control
we can filter on the QtMsgType with this

Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>

Thanks
  j

> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list