qcam: Make log less verbose by default

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@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Laurent Pinchart 2020-11-24 18:55:55 +02:00
parent ed895fd0d5
commit 02b129dab5
6 changed files with 61 additions and 1 deletions

View file

@ -16,6 +16,7 @@
#include "../cam/options.h" #include "../cam/options.h"
#include "../cam/stream_options.h" #include "../cam/stream_options.h"
#include "main_window.h" #include "main_window.h"
#include "message_handler.h"
void signalHandler([[maybe_unused]] int signal) void signalHandler([[maybe_unused]] int signal)
{ {
@ -38,6 +39,8 @@ OptionsParser::Options parseOptions(int argc, char *argv[])
"renderer", ArgumentRequired, "renderer"); "renderer", ArgumentRequired, "renderer");
parser.addOption(OptStream, &streamKeyValue, parser.addOption(OptStream, &streamKeyValue,
"Set configuration of a camera stream", "stream", true); "Set configuration of a camera stream", "stream", true);
parser.addOption(OptVerbose, OptionNone,
"Print verbose log messages", "verbose");
OptionsParser::Options options = parser.parse(argc, argv); OptionsParser::Options options = parser.parse(argc, argv);
if (options.isSet(OptHelp)) if (options.isSet(OptHelp))
@ -57,6 +60,8 @@ int main(int argc, char **argv)
if (options.isSet(OptHelp)) if (options.isSet(OptHelp))
return 0; return 0;
MessageHandler msgHandler(options.isSet(OptVerbose));
struct sigaction sa = {}; struct sigaction sa = {};
sa.sa_handler = &signalHandler; sa.sa_handler = &signalHandler;
sigaction(SIGINT, &sa, nullptr); sigaction(SIGINT, &sa, nullptr);

View file

@ -746,7 +746,7 @@ void MainWindow::processViewfinder(FrameBuffer *buffer)
fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0; fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
lastBufferTime_ = metadata.timestamp; lastBufferTime_ = metadata.timestamp;
qInfo().noquote() qDebug().noquote()
<< QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0')) << QString("seq: %1").arg(metadata.sequence, 6, 10, QLatin1Char('0'))
<< "bytesused:" << metadata.planes[0].bytesused << "bytesused:" << metadata.planes[0].bytesused
<< "timestamp:" << metadata.timestamp << "timestamp:" << metadata.timestamp

View file

@ -41,6 +41,7 @@ enum {
OptHelp = 'h', OptHelp = 'h',
OptRenderer = 'r', OptRenderer = 'r',
OptStream = 's', OptStream = 's',
OptVerbose = 'v',
}; };
class MainWindow : public QMainWindow class MainWindow : public QMainWindow

View file

@ -6,6 +6,7 @@ qcam_sources = files([
'format_converter.cpp', 'format_converter.cpp',
'main.cpp', 'main.cpp',
'main_window.cpp', 'main_window.cpp',
'message_handler.cpp',
'viewfinder_qt.cpp', 'viewfinder_qt.cpp',
]) ])

View file

@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2020, Laurent Pinchart <laurent.pinchart@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);
}

View file

@ -0,0 +1,26 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2020, Laurent Pinchart <laurent.pinchart@ideasonboard.com>
*
* message_handler.cpp - qcam - Log message handling
*/
#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__ */