[libcamera-devel,12/21] qcam: Use Qt qInfo() and qWarning() logging facilities

Message ID 20200323142205.28342-13-laurent.pinchart@ideasonboard.com
State Superseded
Headers show
Series
  • qcam: Bypass format conversion when not required
Related show

Commit Message

Laurent Pinchart March 23, 2020, 2:21 p.m. UTC
Replace manual usage of std::cout and std::cerr with the Qt logging
facilities. This allows redirection log output if needed, and integrates
better with Qt.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 src/qcam/main.cpp        |  8 +++----
 src/qcam/main_window.cpp | 45 ++++++++++++++++++++--------------------
 2 files changed, 26 insertions(+), 27 deletions(-)

Comments

Kieran Bingham March 23, 2020, 2:56 p.m. UTC | #1
Hi Laurent,

On 23/03/2020 14:21, Laurent Pinchart wrote:
> Replace manual usage of std::cout and std::cerr with the Qt logging
> facilities. This allows redirection log output if needed, and integrates
> better with Qt.
> 

This fails to compile for me...

> [2/3] Compiling C++ object 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o'.
> FAILED: src/qcam/9916d8b@@qcam@exe/main_window.cpp.o 
> ccache c++ -Isrc/qcam/9916d8b@@qcam@exe -Isrc/qcam -I../src/qcam -Iinclude -I../include -Iinclude/libcamera -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Werror -std=c++14 -g -Wno-unused-parameter -include config.h -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -fPIC -DQT_NO_KEYWORDS -MD -MQ 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -MF 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o.d' -o 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -c ../src/qcam/main_window.cpp
> ../src/qcam/main_window.cpp: In member function ‘void MainWindow::processCapture()’:
> ../src/qcam/main_window.cpp:516:31: error: ‘reset’ is not a member of ‘Qt’
>    << metadata.sequence << Qt::reset
>                                ^~~~~
> ../src/qcam/main_window.cpp:516:31: note: suggested alternative:
> In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
>                  from ../src/qcam/main_window.cpp:26:
> /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:262:28: note:   ‘reset’
>  Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
>                             ^~~~~
> ../src/qcam/main_window.cpp:519:20: error: ‘fixed’ is not a member of ‘Qt’
>    << "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>                     ^~~~~
> ../src/qcam/main_window.cpp:519:20: note: suggested alternatives:
> In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
>                  from ../src/qcam/main_window.cpp:26:
> /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:253:28: note:   ‘fixed’
>  Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
>                             ^~~~~
> In file included from /usr/include/c++/8/ios:42,
>                  from /usr/include/c++/8/ostream:38,
>                  from /usr/include/c++/8/iterator:64,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:53,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qstring.h:49,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:47,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qwidget.h:45,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qmainwindow.h:44,
>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/QMainWindow:1,
>                  from ../src/qcam/main_window.h:13,
>                  from ../src/qcam/main_window.cpp:8:
> /usr/include/c++/8/bits/ios_base.h:1043:3: note:   ‘std::fixed’
>    fixed(ios_base& __base)
>    ^~~~~
> ninja: build stopped: subcommand failed.
> make: *** [m:24: libcamera] Error 1





> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
>  src/qcam/main.cpp        |  8 +++----
>  src/qcam/main_window.cpp | 45 ++++++++++++++++++++--------------------
>  2 files changed, 26 insertions(+), 27 deletions(-)
> 
> diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> index 297453914ae9..862d714f467c 100644
> --- a/src/qcam/main.cpp
> +++ b/src/qcam/main.cpp
> @@ -5,11 +5,11 @@
>   * main.cpp - cam - The libcamera swiss army knife
>   */
>  
> -#include <iostream>
>  #include <signal.h>
>  #include <string.h>
>  
>  #include <QApplication>
> +#include <QtDebug>
>  
>  #include <libcamera/camera_manager.h>
>  
> @@ -18,7 +18,7 @@
>  
>  void signalHandler(int signal)
>  {
> -	std::cout << "Exiting" << std::endl;
> +	qInfo() << "Exiting";
>  	qApp->quit();
>  }
>  
> @@ -65,8 +65,8 @@ int main(int argc, char **argv)
>  
>  	ret = cm->start();
>  	if (ret) {
> -		std::cout << "Failed to start camera manager: "
> -			  << strerror(-ret) << std::endl;
> +		qInfo() << "Failed to start camera manager:"
> +			<< strerror(-ret);
>  		return EXIT_FAILURE;
>  	}
>  
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index ed8301502fb2..184345b0e2a6 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -8,7 +8,6 @@
>  #include "main_window.h"
>  
>  #include <iomanip>
> -#include <iostream>
>  #include <string>
>  #include <sys/mman.h>
>  
> @@ -24,6 +23,7 @@
>  #include <QTimer>
>  #include <QToolBar>
>  #include <QToolButton>
> +#include <QtDebug>
>  
>  #include <libcamera/camera_manager.h>
>  #include <libcamera/version.h>
> @@ -177,11 +177,11 @@ void MainWindow::switchCamera(int index)
>  	const std::shared_ptr<Camera> &cam = cameras[index];
>  
>  	if (cam->acquire()) {
> -		std::cout << "Failed to acquire camera " << cam->name() << std::endl;
> +		qInfo() << "Failed to acquire camera" << cam->name().c_str();
>  		return;
>  	}
>  
> -	std::cout << "Switching to camera " << cam->name() << std::endl;
> +	qInfo() << "Switching to camera" << cam->name().c_str();
>  
>  	/*
>  	 * Stop the capture session, release the current camera, replace it with
> @@ -236,13 +236,12 @@ int MainWindow::openCamera()
>  	/* Get and acquire the camera. */
>  	camera_ = cm_->get(cameraName);
>  	if (!camera_) {
> -		std::cout << "Camera " << cameraName << " not found"
> -			  << std::endl;
> +		qInfo() << "Camera" << cameraName.c_str() << "not found";
>  		return -ENODEV;
>  	}
>  
>  	if (camera_->acquire()) {
> -		std::cout << "Failed to acquire camera" << std::endl;
> +		qInfo() << "Failed to acquire camera";
>  		camera_.reset();
>  		return -EBUSY;
>  	}
> @@ -296,18 +295,18 @@ int MainWindow::startCapture()
>  
>  	CameraConfiguration::Status validation = config_->validate();
>  	if (validation == CameraConfiguration::Invalid) {
> -		std::cerr << "Failed to create valid camera configuration";
> +		qWarning() << "Failed to create valid camera configuration";
>  		return -EINVAL;
>  	}
>  
>  	if (validation == CameraConfiguration::Adjusted) {
> -		std::cout << "Stream size adjusted to "
> -			  << cfg.size.toString() << std::endl;
> +		qInfo() << "Stream size adjusted to"
> +			<< cfg.size.toString().c_str();
>  	}
>  
>  	ret = camera_->configure(config_.get());
>  	if (ret < 0) {
> -		std::cout << "Failed to configure camera" << std::endl;
> +		qInfo() << "Failed to configure camera";
>  		return ret;
>  	}
>  
> @@ -316,7 +315,7 @@ int MainWindow::startCapture()
>  	ret = viewfinder_->setFormat(cfg.pixelFormat,
>  				     QSize(cfg.size.width, cfg.size.height));
>  	if (ret < 0) {
> -		std::cout << "Failed to set viewfinder format" << std::endl;
> +		qInfo() << "Failed to set viewfinder format";
>  		return ret;
>  	}
>  
> @@ -326,7 +325,7 @@ int MainWindow::startCapture()
>  	allocator_ = new FrameBufferAllocator(camera_);
>  	ret = allocator_->allocate(stream);
>  	if (ret < 0) {
> -		std::cerr << "Failed to allocate capture buffers" << std::endl;
> +		qWarning() << "Failed to allocate capture buffers";
>  		return ret;
>  	}
>  
> @@ -334,14 +333,14 @@ int MainWindow::startCapture()
>  	for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) {
>  		Request *request = camera_->createRequest();
>  		if (!request) {
> -			std::cerr << "Can't create request" << std::endl;
> +			qWarning() << "Can't create request";
>  			ret = -ENOMEM;
>  			goto error;
>  		}
>  
>  		ret = request->addBuffer(stream, buffer.get());
>  		if (ret < 0) {
> -			std::cerr << "Can't set buffer for request" << std::endl;
> +			qWarning() << "Can't set buffer for request";
>  			goto error;
>  		}
>  
> @@ -364,7 +363,7 @@ int MainWindow::startCapture()
>  
>  	ret = camera_->start();
>  	if (ret) {
> -		std::cout << "Failed to start capture" << std::endl;
> +		qInfo() << "Failed to start capture";
>  		goto error;
>  	}
>  
> @@ -374,7 +373,7 @@ int MainWindow::startCapture()
>  	for (Request *request : requests) {
>  		ret = camera_->queueRequest(request);
>  		if (ret < 0) {
> -			std::cerr << "Can't queue request" << std::endl;
> +			qWarning() << "Can't queue request";
>  			goto error_disconnect;
>  		}
>  	}
> @@ -417,7 +416,7 @@ void MainWindow::stopCapture()
>  
>  	int ret = camera_->stop();
>  	if (ret)
> -		std::cout << "Failed to stop capture" << std::endl;
> +		qInfo() << "Failed to stop capture";
>  
>  	camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete);
>  
> @@ -513,11 +512,11 @@ void MainWindow::processCapture()
>  	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
>  	lastBufferTime_ = metadata.timestamp;
>  
> -	std::cout << "seq: " << std::setw(6) << std::setfill('0') << metadata.sequence
> -		  << " bytesused: " << metadata.planes[0].bytesused
> -		  << " timestamp: " << metadata.timestamp
> -		  << " fps: " << std::fixed << std::setprecision(2) << fps
> -		  << std::endl;
> +	qInfo() << "seq:" << qSetFieldWidth(6) << qSetPadChar('0')
> +		<< metadata.sequence << Qt::reset
> +		<< "bytesused:" << metadata.planes[0].bytesused
> +		<< "timestamp:" << metadata.timestamp
> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>  
>  	/* Display the buffer and requeue it to the camera. */
>  	display(buffer);
> @@ -542,7 +541,7 @@ void MainWindow::queueRequest(FrameBuffer *buffer)
>  {
>  	Request *request = camera_->createRequest();
>  	if (!request) {
> -		std::cerr << "Can't create request" << std::endl;
> +		qWarning() << "Can't create request";
>  		return;
>  	}
>  
>
Laurent Pinchart March 23, 2020, 3:27 p.m. UTC | #2
Hi Kieran,

On Mon, Mar 23, 2020 at 02:56:06PM +0000, Kieran Bingham wrote:
> On 23/03/2020 14:21, Laurent Pinchart wrote:
> > Replace manual usage of std::cout and std::cerr with the Qt logging
> > facilities. This allows redirection log output if needed, and integrates
> > better with Qt.
> 
> This fails to compile for me...
> 
> > [2/3] Compiling C++ object 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o'.
> > FAILED: src/qcam/9916d8b@@qcam@exe/main_window.cpp.o 
> > ccache c++ -Isrc/qcam/9916d8b@@qcam@exe -Isrc/qcam -I../src/qcam -Iinclude -I../include -Iinclude/libcamera -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Werror -std=c++14 -g -Wno-unused-parameter -include config.h -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -fPIC -DQT_NO_KEYWORDS -MD -MQ 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -MF 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o.d' -o 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -c ../src/qcam/main_window.cpp
> > ../src/qcam/main_window.cpp: In member function ‘void MainWindow::processCapture()’:
> > ../src/qcam/main_window.cpp:516:31: error: ‘reset’ is not a member of ‘Qt’
> >    << metadata.sequence << Qt::reset
> >                                ^~~~~
> > ../src/qcam/main_window.cpp:516:31: note: suggested alternative:
> > In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
> >                  from ../src/qcam/main_window.cpp:26:
> > /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:262:28: note:   ‘reset’
> >  Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
> >                             ^~~~~
> > ../src/qcam/main_window.cpp:519:20: error: ‘fixed’ is not a member of ‘Qt’
> >    << "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
> >                     ^~~~~
> > ../src/qcam/main_window.cpp:519:20: note: suggested alternatives:
> > In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
> >                  from ../src/qcam/main_window.cpp:26:
> > /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:253:28: note:   ‘fixed’
> >  Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
> >                             ^~~~~
> > In file included from /usr/include/c++/8/ios:42,
> >                  from /usr/include/c++/8/ostream:38,
> >                  from /usr/include/c++/8/iterator:64,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:53,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qstring.h:49,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:47,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qwidget.h:45,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qmainwindow.h:44,
> >                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/QMainWindow:1,
> >                  from ../src/qcam/main_window.h:13,
> >                  from ../src/qcam/main_window.cpp:8:
> > /usr/include/c++/8/bits/ios_base.h:1043:3: note:   ‘std::fixed’
> >    fixed(ios_base& __base)
> >    ^~~~~
> > ninja: build stopped: subcommand failed.
> > make: *** [m:24: libcamera] Error 1

It seems to be a Qt version issue. Could you try to remove the Qt::
prefix from reset and fixed ?

> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > ---
> >  src/qcam/main.cpp        |  8 +++----
> >  src/qcam/main_window.cpp | 45 ++++++++++++++++++++--------------------
> >  2 files changed, 26 insertions(+), 27 deletions(-)
> > 
> > diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> > index 297453914ae9..862d714f467c 100644
> > --- a/src/qcam/main.cpp
> > +++ b/src/qcam/main.cpp
> > @@ -5,11 +5,11 @@
> >   * main.cpp - cam - The libcamera swiss army knife
> >   */
> >  
> > -#include <iostream>
> >  #include <signal.h>
> >  #include <string.h>
> >  
> >  #include <QApplication>
> > +#include <QtDebug>
> >  
> >  #include <libcamera/camera_manager.h>
> >  
> > @@ -18,7 +18,7 @@
> >  
> >  void signalHandler(int signal)
> >  {
> > -	std::cout << "Exiting" << std::endl;
> > +	qInfo() << "Exiting";
> >  	qApp->quit();
> >  }
> >  
> > @@ -65,8 +65,8 @@ int main(int argc, char **argv)
> >  
> >  	ret = cm->start();
> >  	if (ret) {
> > -		std::cout << "Failed to start camera manager: "
> > -			  << strerror(-ret) << std::endl;
> > +		qInfo() << "Failed to start camera manager:"
> > +			<< strerror(-ret);
> >  		return EXIT_FAILURE;
> >  	}
> >  
> > diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> > index ed8301502fb2..184345b0e2a6 100644
> > --- a/src/qcam/main_window.cpp
> > +++ b/src/qcam/main_window.cpp
> > @@ -8,7 +8,6 @@
> >  #include "main_window.h"
> >  
> >  #include <iomanip>
> > -#include <iostream>
> >  #include <string>
> >  #include <sys/mman.h>
> >  
> > @@ -24,6 +23,7 @@
> >  #include <QTimer>
> >  #include <QToolBar>
> >  #include <QToolButton>
> > +#include <QtDebug>
> >  
> >  #include <libcamera/camera_manager.h>
> >  #include <libcamera/version.h>
> > @@ -177,11 +177,11 @@ void MainWindow::switchCamera(int index)
> >  	const std::shared_ptr<Camera> &cam = cameras[index];
> >  
> >  	if (cam->acquire()) {
> > -		std::cout << "Failed to acquire camera " << cam->name() << std::endl;
> > +		qInfo() << "Failed to acquire camera" << cam->name().c_str();
> >  		return;
> >  	}
> >  
> > -	std::cout << "Switching to camera " << cam->name() << std::endl;
> > +	qInfo() << "Switching to camera" << cam->name().c_str();
> >  
> >  	/*
> >  	 * Stop the capture session, release the current camera, replace it with
> > @@ -236,13 +236,12 @@ int MainWindow::openCamera()
> >  	/* Get and acquire the camera. */
> >  	camera_ = cm_->get(cameraName);
> >  	if (!camera_) {
> > -		std::cout << "Camera " << cameraName << " not found"
> > -			  << std::endl;
> > +		qInfo() << "Camera" << cameraName.c_str() << "not found";
> >  		return -ENODEV;
> >  	}
> >  
> >  	if (camera_->acquire()) {
> > -		std::cout << "Failed to acquire camera" << std::endl;
> > +		qInfo() << "Failed to acquire camera";
> >  		camera_.reset();
> >  		return -EBUSY;
> >  	}
> > @@ -296,18 +295,18 @@ int MainWindow::startCapture()
> >  
> >  	CameraConfiguration::Status validation = config_->validate();
> >  	if (validation == CameraConfiguration::Invalid) {
> > -		std::cerr << "Failed to create valid camera configuration";
> > +		qWarning() << "Failed to create valid camera configuration";
> >  		return -EINVAL;
> >  	}
> >  
> >  	if (validation == CameraConfiguration::Adjusted) {
> > -		std::cout << "Stream size adjusted to "
> > -			  << cfg.size.toString() << std::endl;
> > +		qInfo() << "Stream size adjusted to"
> > +			<< cfg.size.toString().c_str();
> >  	}
> >  
> >  	ret = camera_->configure(config_.get());
> >  	if (ret < 0) {
> > -		std::cout << "Failed to configure camera" << std::endl;
> > +		qInfo() << "Failed to configure camera";
> >  		return ret;
> >  	}
> >  
> > @@ -316,7 +315,7 @@ int MainWindow::startCapture()
> >  	ret = viewfinder_->setFormat(cfg.pixelFormat,
> >  				     QSize(cfg.size.width, cfg.size.height));
> >  	if (ret < 0) {
> > -		std::cout << "Failed to set viewfinder format" << std::endl;
> > +		qInfo() << "Failed to set viewfinder format";
> >  		return ret;
> >  	}
> >  
> > @@ -326,7 +325,7 @@ int MainWindow::startCapture()
> >  	allocator_ = new FrameBufferAllocator(camera_);
> >  	ret = allocator_->allocate(stream);
> >  	if (ret < 0) {
> > -		std::cerr << "Failed to allocate capture buffers" << std::endl;
> > +		qWarning() << "Failed to allocate capture buffers";
> >  		return ret;
> >  	}
> >  
> > @@ -334,14 +333,14 @@ int MainWindow::startCapture()
> >  	for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) {
> >  		Request *request = camera_->createRequest();
> >  		if (!request) {
> > -			std::cerr << "Can't create request" << std::endl;
> > +			qWarning() << "Can't create request";
> >  			ret = -ENOMEM;
> >  			goto error;
> >  		}
> >  
> >  		ret = request->addBuffer(stream, buffer.get());
> >  		if (ret < 0) {
> > -			std::cerr << "Can't set buffer for request" << std::endl;
> > +			qWarning() << "Can't set buffer for request";
> >  			goto error;
> >  		}
> >  
> > @@ -364,7 +363,7 @@ int MainWindow::startCapture()
> >  
> >  	ret = camera_->start();
> >  	if (ret) {
> > -		std::cout << "Failed to start capture" << std::endl;
> > +		qInfo() << "Failed to start capture";
> >  		goto error;
> >  	}
> >  
> > @@ -374,7 +373,7 @@ int MainWindow::startCapture()
> >  	for (Request *request : requests) {
> >  		ret = camera_->queueRequest(request);
> >  		if (ret < 0) {
> > -			std::cerr << "Can't queue request" << std::endl;
> > +			qWarning() << "Can't queue request";
> >  			goto error_disconnect;
> >  		}
> >  	}
> > @@ -417,7 +416,7 @@ void MainWindow::stopCapture()
> >  
> >  	int ret = camera_->stop();
> >  	if (ret)
> > -		std::cout << "Failed to stop capture" << std::endl;
> > +		qInfo() << "Failed to stop capture";
> >  
> >  	camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete);
> >  
> > @@ -513,11 +512,11 @@ void MainWindow::processCapture()
> >  	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
> >  	lastBufferTime_ = metadata.timestamp;
> >  
> > -	std::cout << "seq: " << std::setw(6) << std::setfill('0') << metadata.sequence
> > -		  << " bytesused: " << metadata.planes[0].bytesused
> > -		  << " timestamp: " << metadata.timestamp
> > -		  << " fps: " << std::fixed << std::setprecision(2) << fps
> > -		  << std::endl;
> > +	qInfo() << "seq:" << qSetFieldWidth(6) << qSetPadChar('0')
> > +		<< metadata.sequence << Qt::reset
> > +		<< "bytesused:" << metadata.planes[0].bytesused
> > +		<< "timestamp:" << metadata.timestamp
> > +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
> >  
> >  	/* Display the buffer and requeue it to the camera. */
> >  	display(buffer);
> > @@ -542,7 +541,7 @@ void MainWindow::queueRequest(FrameBuffer *buffer)
> >  {
> >  	Request *request = camera_->createRequest();
> >  	if (!request) {
> > -		std::cerr << "Can't create request" << std::endl;
> > +		qWarning() << "Can't create request";
> >  		return;
> >  	}
> >
Kieran Bingham March 23, 2020, 3:45 p.m. UTC | #3
Hi Laurent,

On 23/03/2020 15:27, Laurent Pinchart wrote:
> Hi Kieran,
> 
> On Mon, Mar 23, 2020 at 02:56:06PM +0000, Kieran Bingham wrote:
>> On 23/03/2020 14:21, Laurent Pinchart wrote:
>>> Replace manual usage of std::cout and std::cerr with the Qt logging
>>> facilities. This allows redirection log output if needed, and integrates
>>> better with Qt.
>>
>> This fails to compile for me...
>>
>>> [2/3] Compiling C++ object 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o'.
>>> FAILED: src/qcam/9916d8b@@qcam@exe/main_window.cpp.o 
>>> ccache c++ -Isrc/qcam/9916d8b@@qcam@exe -Isrc/qcam -I../src/qcam -Iinclude -I../include -Iinclude/libcamera -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/x86_64-linux-gnu/qt5 -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Werror -std=c++14 -g -Wno-unused-parameter -include config.h -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -fPIC -DQT_NO_KEYWORDS -MD -MQ 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -MF 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o.d' -o 'src/qcam/9916d8b@@qcam@exe/main_window.cpp.o' -c ../src/qcam/main_window.cpp
>>> ../src/qcam/main_window.cpp: In member function ‘void MainWindow::processCapture()’:
>>> ../src/qcam/main_window.cpp:516:31: error: ‘reset’ is not a member of ‘Qt’
>>>    << metadata.sequence << Qt::reset
>>>                                ^~~~~
>>> ../src/qcam/main_window.cpp:516:31: note: suggested alternative:
>>> In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
>>>                  from ../src/qcam/main_window.cpp:26:
>>> /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:262:28: note:   ‘reset’
>>>  Q_CORE_EXPORT QTextStream &reset(QTextStream &s);
>>>                             ^~~~~
>>> ../src/qcam/main_window.cpp:519:20: error: ‘fixed’ is not a member of ‘Qt’
>>>    << "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>>>                     ^~~~~
>>> ../src/qcam/main_window.cpp:519:20: note: suggested alternatives:
>>> In file included from /usr/include/x86_64-linux-gnu/qt5/QtCore/qdebug.h:49,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/QtDebug:1,
>>>                  from ../src/qcam/main_window.cpp:26:
>>> /usr/include/x86_64-linux-gnu/qt5/QtCore/qtextstream.h:253:28: note:   ‘fixed’
>>>  Q_CORE_EXPORT QTextStream &fixed(QTextStream &s);
>>>                             ^~~~~
>>> In file included from /usr/include/c++/8/ios:42,
>>>                  from /usr/include/c++/8/ostream:38,
>>>                  from /usr/include/c++/8/iterator:64,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qbytearray.h:53,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qstring.h:49,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtCore/qobject.h:47,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qwidget.h:45,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/qmainwindow.h:44,
>>>                  from /usr/include/x86_64-linux-gnu/qt5/QtWidgets/QMainWindow:1,
>>>                  from ../src/qcam/main_window.h:13,
>>>                  from ../src/qcam/main_window.cpp:8:
>>> /usr/include/c++/8/bits/ios_base.h:1043:3: note:   ‘std::fixed’
>>>    fixed(ios_base& __base)
>>>    ^~~~~
>>> ninja: build stopped: subcommand failed.
>>> make: *** [m:24: libcamera] Error 1
> 
> It seems to be a Qt version issue. Could you try to remove the Qt::
> prefix from reset and fixed ?

That appears to have fixed things yes,

> 
>>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>>> ---
>>>  src/qcam/main.cpp        |  8 +++----
>>>  src/qcam/main_window.cpp | 45 ++++++++++++++++++++--------------------
>>>  2 files changed, 26 insertions(+), 27 deletions(-)
>>>
>>> diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
>>> index 297453914ae9..862d714f467c 100644
>>> --- a/src/qcam/main.cpp
>>> +++ b/src/qcam/main.cpp
>>> @@ -5,11 +5,11 @@
>>>   * main.cpp - cam - The libcamera swiss army knife
>>>   */
>>>  
>>> -#include <iostream>
>>>  #include <signal.h>
>>>  #include <string.h>
>>>  
>>>  #include <QApplication>
>>> +#include <QtDebug>
>>>  
>>>  #include <libcamera/camera_manager.h>
>>>  
>>> @@ -18,7 +18,7 @@
>>>  
>>>  void signalHandler(int signal)
>>>  {
>>> -	std::cout << "Exiting" << std::endl;
>>> +	qInfo() << "Exiting";
>>>  	qApp->quit();
>>>  }
>>>  
>>> @@ -65,8 +65,8 @@ int main(int argc, char **argv)
>>>  
>>>  	ret = cm->start();
>>>  	if (ret) {
>>> -		std::cout << "Failed to start camera manager: "
>>> -			  << strerror(-ret) << std::endl;
>>> +		qInfo() << "Failed to start camera manager:"
>>> +			<< strerror(-ret);
>>>  		return EXIT_FAILURE;
>>>  	}
>>>  
>>> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
>>> index ed8301502fb2..184345b0e2a6 100644
>>> --- a/src/qcam/main_window.cpp
>>> +++ b/src/qcam/main_window.cpp
>>> @@ -8,7 +8,6 @@
>>>  #include "main_window.h"
>>>  
>>>  #include <iomanip>
>>> -#include <iostream>
>>>  #include <string>
>>>  #include <sys/mman.h>
>>>  
>>> @@ -24,6 +23,7 @@
>>>  #include <QTimer>
>>>  #include <QToolBar>
>>>  #include <QToolButton>
>>> +#include <QtDebug>
>>>  
>>>  #include <libcamera/camera_manager.h>
>>>  #include <libcamera/version.h>
>>> @@ -177,11 +177,11 @@ void MainWindow::switchCamera(int index)
>>>  	const std::shared_ptr<Camera> &cam = cameras[index];
>>>  
>>>  	if (cam->acquire()) {
>>> -		std::cout << "Failed to acquire camera " << cam->name() << std::endl;
>>> +		qInfo() << "Failed to acquire camera" << cam->name().c_str();
>>>  		return;
>>>  	}
>>>  
>>> -	std::cout << "Switching to camera " << cam->name() << std::endl;
>>> +	qInfo() << "Switching to camera" << cam->name().c_str();
>>>  
>>>  	/*
>>>  	 * Stop the capture session, release the current camera, replace it with
>>> @@ -236,13 +236,12 @@ int MainWindow::openCamera()
>>>  	/* Get and acquire the camera. */
>>>  	camera_ = cm_->get(cameraName);
>>>  	if (!camera_) {
>>> -		std::cout << "Camera " << cameraName << " not found"
>>> -			  << std::endl;
>>> +		qInfo() << "Camera" << cameraName.c_str() << "not found";
>>>  		return -ENODEV;
>>>  	}
>>>  
>>>  	if (camera_->acquire()) {
>>> -		std::cout << "Failed to acquire camera" << std::endl;
>>> +		qInfo() << "Failed to acquire camera";
>>>  		camera_.reset();
>>>  		return -EBUSY;
>>>  	}
>>> @@ -296,18 +295,18 @@ int MainWindow::startCapture()
>>>  
>>>  	CameraConfiguration::Status validation = config_->validate();
>>>  	if (validation == CameraConfiguration::Invalid) {
>>> -		std::cerr << "Failed to create valid camera configuration";
>>> +		qWarning() << "Failed to create valid camera configuration";
>>>  		return -EINVAL;
>>>  	}
>>>  
>>>  	if (validation == CameraConfiguration::Adjusted) {
>>> -		std::cout << "Stream size adjusted to "
>>> -			  << cfg.size.toString() << std::endl;
>>> +		qInfo() << "Stream size adjusted to"
>>> +			<< cfg.size.toString().c_str();
>>>  	}
>>>  
>>>  	ret = camera_->configure(config_.get());
>>>  	if (ret < 0) {
>>> -		std::cout << "Failed to configure camera" << std::endl;
>>> +		qInfo() << "Failed to configure camera";
>>>  		return ret;
>>>  	}
>>>  
>>> @@ -316,7 +315,7 @@ int MainWindow::startCapture()
>>>  	ret = viewfinder_->setFormat(cfg.pixelFormat,
>>>  				     QSize(cfg.size.width, cfg.size.height));
>>>  	if (ret < 0) {
>>> -		std::cout << "Failed to set viewfinder format" << std::endl;
>>> +		qInfo() << "Failed to set viewfinder format";
>>>  		return ret;
>>>  	}
>>>  
>>> @@ -326,7 +325,7 @@ int MainWindow::startCapture()
>>>  	allocator_ = new FrameBufferAllocator(camera_);
>>>  	ret = allocator_->allocate(stream);
>>>  	if (ret < 0) {
>>> -		std::cerr << "Failed to allocate capture buffers" << std::endl;
>>> +		qWarning() << "Failed to allocate capture buffers";
>>>  		return ret;
>>>  	}
>>>  
>>> @@ -334,14 +333,14 @@ int MainWindow::startCapture()
>>>  	for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) {
>>>  		Request *request = camera_->createRequest();
>>>  		if (!request) {
>>> -			std::cerr << "Can't create request" << std::endl;
>>> +			qWarning() << "Can't create request";
>>>  			ret = -ENOMEM;
>>>  			goto error;
>>>  		}
>>>  
>>>  		ret = request->addBuffer(stream, buffer.get());
>>>  		if (ret < 0) {
>>> -			std::cerr << "Can't set buffer for request" << std::endl;
>>> +			qWarning() << "Can't set buffer for request";
>>>  			goto error;
>>>  		}
>>>  
>>> @@ -364,7 +363,7 @@ int MainWindow::startCapture()
>>>  
>>>  	ret = camera_->start();
>>>  	if (ret) {
>>> -		std::cout << "Failed to start capture" << std::endl;
>>> +		qInfo() << "Failed to start capture";
>>>  		goto error;
>>>  	}
>>>  
>>> @@ -374,7 +373,7 @@ int MainWindow::startCapture()
>>>  	for (Request *request : requests) {
>>>  		ret = camera_->queueRequest(request);
>>>  		if (ret < 0) {
>>> -			std::cerr << "Can't queue request" << std::endl;
>>> +			qWarning() << "Can't queue request";
>>>  			goto error_disconnect;
>>>  		}
>>>  	}
>>> @@ -417,7 +416,7 @@ void MainWindow::stopCapture()
>>>  
>>>  	int ret = camera_->stop();
>>>  	if (ret)
>>> -		std::cout << "Failed to stop capture" << std::endl;
>>> +		qInfo() << "Failed to stop capture";
>>>  
>>>  	camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete);
>>>  
>>> @@ -513,11 +512,11 @@ void MainWindow::processCapture()
>>>  	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
>>>  	lastBufferTime_ = metadata.timestamp;
>>>  
>>> -	std::cout << "seq: " << std::setw(6) << std::setfill('0') << metadata.sequence
>>> -		  << " bytesused: " << metadata.planes[0].bytesused
>>> -		  << " timestamp: " << metadata.timestamp
>>> -		  << " fps: " << std::fixed << std::setprecision(2) << fps
>>> -		  << std::endl;
>>> +	qInfo() << "seq:" << qSetFieldWidth(6) << qSetPadChar('0')
>>> +		<< metadata.sequence << Qt::reset
>>> +		<< "bytesused:" << metadata.planes[0].bytesused
>>> +		<< "timestamp:" << metadata.timestamp
>>> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>>>  
>>>  	/* Display the buffer and requeue it to the camera. */
>>>  	display(buffer);
>>> @@ -542,7 +541,7 @@ void MainWindow::queueRequest(FrameBuffer *buffer)
>>>  {
>>>  	Request *request = camera_->createRequest();
>>>  	if (!request) {
>>> -		std::cerr << "Can't create request" << std::endl;
>>> +		qWarning() << "Can't create request";
>>>  		return;
>>>  	}
>>>  
>
Kieran Bingham March 23, 2020, 3:55 p.m. UTC | #4
Hi Laurent,

On 23/03/2020 14:21, Laurent Pinchart wrote:
> Replace manual usage of std::cout and std::cerr with the Qt logging
> facilities. This allows redirection log output if needed, and integrates
> better with Qt.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

With the compile issues fixed...

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> ---
>  src/qcam/main.cpp        |  8 +++----
>  src/qcam/main_window.cpp | 45 ++++++++++++++++++++--------------------
>  2 files changed, 26 insertions(+), 27 deletions(-)
> 
> diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
> index 297453914ae9..862d714f467c 100644
> --- a/src/qcam/main.cpp
> +++ b/src/qcam/main.cpp
> @@ -5,11 +5,11 @@
>   * main.cpp - cam - The libcamera swiss army knife
>   */
>  
> -#include <iostream>
>  #include <signal.h>
>  #include <string.h>
>  
>  #include <QApplication>
> +#include <QtDebug>
>  
>  #include <libcamera/camera_manager.h>
>  
> @@ -18,7 +18,7 @@
>  
>  void signalHandler(int signal)
>  {
> -	std::cout << "Exiting" << std::endl;
> +	qInfo() << "Exiting";
>  	qApp->quit();
>  }
>  
> @@ -65,8 +65,8 @@ int main(int argc, char **argv)
>  
>  	ret = cm->start();
>  	if (ret) {
> -		std::cout << "Failed to start camera manager: "
> -			  << strerror(-ret) << std::endl;
> +		qInfo() << "Failed to start camera manager:"
> +			<< strerror(-ret);
>  		return EXIT_FAILURE;
>  	}
>  
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index ed8301502fb2..184345b0e2a6 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -8,7 +8,6 @@
>  #include "main_window.h"
>  
>  #include <iomanip>
> -#include <iostream>
>  #include <string>
>  #include <sys/mman.h>
>  
> @@ -24,6 +23,7 @@
>  #include <QTimer>
>  #include <QToolBar>
>  #include <QToolButton>
> +#include <QtDebug>
>  
>  #include <libcamera/camera_manager.h>
>  #include <libcamera/version.h>
> @@ -177,11 +177,11 @@ void MainWindow::switchCamera(int index)
>  	const std::shared_ptr<Camera> &cam = cameras[index];
>  
>  	if (cam->acquire()) {
> -		std::cout << "Failed to acquire camera " << cam->name() << std::endl;
> +		qInfo() << "Failed to acquire camera" << cam->name().c_str();
>  		return;
>  	}
>  
> -	std::cout << "Switching to camera " << cam->name() << std::endl;
> +	qInfo() << "Switching to camera" << cam->name().c_str();
>  
>  	/*
>  	 * Stop the capture session, release the current camera, replace it with
> @@ -236,13 +236,12 @@ int MainWindow::openCamera()
>  	/* Get and acquire the camera. */
>  	camera_ = cm_->get(cameraName);
>  	if (!camera_) {
> -		std::cout << "Camera " << cameraName << " not found"
> -			  << std::endl;
> +		qInfo() << "Camera" << cameraName.c_str() << "not found";
>  		return -ENODEV;
>  	}
>  
>  	if (camera_->acquire()) {
> -		std::cout << "Failed to acquire camera" << std::endl;
> +		qInfo() << "Failed to acquire camera";
>  		camera_.reset();
>  		return -EBUSY;
>  	}
> @@ -296,18 +295,18 @@ int MainWindow::startCapture()
>  
>  	CameraConfiguration::Status validation = config_->validate();
>  	if (validation == CameraConfiguration::Invalid) {
> -		std::cerr << "Failed to create valid camera configuration";
> +		qWarning() << "Failed to create valid camera configuration";
>  		return -EINVAL;
>  	}
>  
>  	if (validation == CameraConfiguration::Adjusted) {
> -		std::cout << "Stream size adjusted to "
> -			  << cfg.size.toString() << std::endl;
> +		qInfo() << "Stream size adjusted to"
> +			<< cfg.size.toString().c_str();
>  	}
>  
>  	ret = camera_->configure(config_.get());
>  	if (ret < 0) {
> -		std::cout << "Failed to configure camera" << std::endl;
> +		qInfo() << "Failed to configure camera";
>  		return ret;
>  	}
>  
> @@ -316,7 +315,7 @@ int MainWindow::startCapture()
>  	ret = viewfinder_->setFormat(cfg.pixelFormat,
>  				     QSize(cfg.size.width, cfg.size.height));
>  	if (ret < 0) {
> -		std::cout << "Failed to set viewfinder format" << std::endl;
> +		qInfo() << "Failed to set viewfinder format";
>  		return ret;
>  	}
>  
> @@ -326,7 +325,7 @@ int MainWindow::startCapture()
>  	allocator_ = new FrameBufferAllocator(camera_);
>  	ret = allocator_->allocate(stream);
>  	if (ret < 0) {
> -		std::cerr << "Failed to allocate capture buffers" << std::endl;
> +		qWarning() << "Failed to allocate capture buffers";
>  		return ret;
>  	}
>  
> @@ -334,14 +333,14 @@ int MainWindow::startCapture()
>  	for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) {
>  		Request *request = camera_->createRequest();
>  		if (!request) {
> -			std::cerr << "Can't create request" << std::endl;
> +			qWarning() << "Can't create request";
>  			ret = -ENOMEM;
>  			goto error;
>  		}
>  
>  		ret = request->addBuffer(stream, buffer.get());
>  		if (ret < 0) {
> -			std::cerr << "Can't set buffer for request" << std::endl;
> +			qWarning() << "Can't set buffer for request";
>  			goto error;
>  		}
>  
> @@ -364,7 +363,7 @@ int MainWindow::startCapture()
>  
>  	ret = camera_->start();
>  	if (ret) {
> -		std::cout << "Failed to start capture" << std::endl;
> +		qInfo() << "Failed to start capture";
>  		goto error;
>  	}
>  
> @@ -374,7 +373,7 @@ int MainWindow::startCapture()
>  	for (Request *request : requests) {
>  		ret = camera_->queueRequest(request);
>  		if (ret < 0) {
> -			std::cerr << "Can't queue request" << std::endl;
> +			qWarning() << "Can't queue request";
>  			goto error_disconnect;
>  		}
>  	}
> @@ -417,7 +416,7 @@ void MainWindow::stopCapture()
>  
>  	int ret = camera_->stop();
>  	if (ret)
> -		std::cout << "Failed to stop capture" << std::endl;
> +		qInfo() << "Failed to stop capture";
>  
>  	camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete);
>  
> @@ -513,11 +512,11 @@ void MainWindow::processCapture()
>  	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
>  	lastBufferTime_ = metadata.timestamp;
>  
> -	std::cout << "seq: " << std::setw(6) << std::setfill('0') << metadata.sequence
> -		  << " bytesused: " << metadata.planes[0].bytesused
> -		  << " timestamp: " << metadata.timestamp
> -		  << " fps: " << std::fixed << std::setprecision(2) << fps
> -		  << std::endl;
> +	qInfo() << "seq:" << qSetFieldWidth(6) << qSetPadChar('0')
> +		<< metadata.sequence << Qt::reset
> +		<< "bytesused:" << metadata.planes[0].bytesused
> +		<< "timestamp:" << metadata.timestamp
> +		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
>  
>  	/* Display the buffer and requeue it to the camera. */
>  	display(buffer);
> @@ -542,7 +541,7 @@ void MainWindow::queueRequest(FrameBuffer *buffer)
>  {
>  	Request *request = camera_->createRequest();
>  	if (!request) {
> -		std::cerr << "Can't create request" << std::endl;
> +		qWarning() << "Can't create request";
>  		return;
>  	}
>  
>

Patch

diff --git a/src/qcam/main.cpp b/src/qcam/main.cpp
index 297453914ae9..862d714f467c 100644
--- a/src/qcam/main.cpp
+++ b/src/qcam/main.cpp
@@ -5,11 +5,11 @@ 
  * main.cpp - cam - The libcamera swiss army knife
  */
 
-#include <iostream>
 #include <signal.h>
 #include <string.h>
 
 #include <QApplication>
+#include <QtDebug>
 
 #include <libcamera/camera_manager.h>
 
@@ -18,7 +18,7 @@ 
 
 void signalHandler(int signal)
 {
-	std::cout << "Exiting" << std::endl;
+	qInfo() << "Exiting";
 	qApp->quit();
 }
 
@@ -65,8 +65,8 @@  int main(int argc, char **argv)
 
 	ret = cm->start();
 	if (ret) {
-		std::cout << "Failed to start camera manager: "
-			  << strerror(-ret) << std::endl;
+		qInfo() << "Failed to start camera manager:"
+			<< strerror(-ret);
 		return EXIT_FAILURE;
 	}
 
diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
index ed8301502fb2..184345b0e2a6 100644
--- a/src/qcam/main_window.cpp
+++ b/src/qcam/main_window.cpp
@@ -8,7 +8,6 @@ 
 #include "main_window.h"
 
 #include <iomanip>
-#include <iostream>
 #include <string>
 #include <sys/mman.h>
 
@@ -24,6 +23,7 @@ 
 #include <QTimer>
 #include <QToolBar>
 #include <QToolButton>
+#include <QtDebug>
 
 #include <libcamera/camera_manager.h>
 #include <libcamera/version.h>
@@ -177,11 +177,11 @@  void MainWindow::switchCamera(int index)
 	const std::shared_ptr<Camera> &cam = cameras[index];
 
 	if (cam->acquire()) {
-		std::cout << "Failed to acquire camera " << cam->name() << std::endl;
+		qInfo() << "Failed to acquire camera" << cam->name().c_str();
 		return;
 	}
 
-	std::cout << "Switching to camera " << cam->name() << std::endl;
+	qInfo() << "Switching to camera" << cam->name().c_str();
 
 	/*
 	 * Stop the capture session, release the current camera, replace it with
@@ -236,13 +236,12 @@  int MainWindow::openCamera()
 	/* Get and acquire the camera. */
 	camera_ = cm_->get(cameraName);
 	if (!camera_) {
-		std::cout << "Camera " << cameraName << " not found"
-			  << std::endl;
+		qInfo() << "Camera" << cameraName.c_str() << "not found";
 		return -ENODEV;
 	}
 
 	if (camera_->acquire()) {
-		std::cout << "Failed to acquire camera" << std::endl;
+		qInfo() << "Failed to acquire camera";
 		camera_.reset();
 		return -EBUSY;
 	}
@@ -296,18 +295,18 @@  int MainWindow::startCapture()
 
 	CameraConfiguration::Status validation = config_->validate();
 	if (validation == CameraConfiguration::Invalid) {
-		std::cerr << "Failed to create valid camera configuration";
+		qWarning() << "Failed to create valid camera configuration";
 		return -EINVAL;
 	}
 
 	if (validation == CameraConfiguration::Adjusted) {
-		std::cout << "Stream size adjusted to "
-			  << cfg.size.toString() << std::endl;
+		qInfo() << "Stream size adjusted to"
+			<< cfg.size.toString().c_str();
 	}
 
 	ret = camera_->configure(config_.get());
 	if (ret < 0) {
-		std::cout << "Failed to configure camera" << std::endl;
+		qInfo() << "Failed to configure camera";
 		return ret;
 	}
 
@@ -316,7 +315,7 @@  int MainWindow::startCapture()
 	ret = viewfinder_->setFormat(cfg.pixelFormat,
 				     QSize(cfg.size.width, cfg.size.height));
 	if (ret < 0) {
-		std::cout << "Failed to set viewfinder format" << std::endl;
+		qInfo() << "Failed to set viewfinder format";
 		return ret;
 	}
 
@@ -326,7 +325,7 @@  int MainWindow::startCapture()
 	allocator_ = new FrameBufferAllocator(camera_);
 	ret = allocator_->allocate(stream);
 	if (ret < 0) {
-		std::cerr << "Failed to allocate capture buffers" << std::endl;
+		qWarning() << "Failed to allocate capture buffers";
 		return ret;
 	}
 
@@ -334,14 +333,14 @@  int MainWindow::startCapture()
 	for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) {
 		Request *request = camera_->createRequest();
 		if (!request) {
-			std::cerr << "Can't create request" << std::endl;
+			qWarning() << "Can't create request";
 			ret = -ENOMEM;
 			goto error;
 		}
 
 		ret = request->addBuffer(stream, buffer.get());
 		if (ret < 0) {
-			std::cerr << "Can't set buffer for request" << std::endl;
+			qWarning() << "Can't set buffer for request";
 			goto error;
 		}
 
@@ -364,7 +363,7 @@  int MainWindow::startCapture()
 
 	ret = camera_->start();
 	if (ret) {
-		std::cout << "Failed to start capture" << std::endl;
+		qInfo() << "Failed to start capture";
 		goto error;
 	}
 
@@ -374,7 +373,7 @@  int MainWindow::startCapture()
 	for (Request *request : requests) {
 		ret = camera_->queueRequest(request);
 		if (ret < 0) {
-			std::cerr << "Can't queue request" << std::endl;
+			qWarning() << "Can't queue request";
 			goto error_disconnect;
 		}
 	}
@@ -417,7 +416,7 @@  void MainWindow::stopCapture()
 
 	int ret = camera_->stop();
 	if (ret)
-		std::cout << "Failed to stop capture" << std::endl;
+		qInfo() << "Failed to stop capture";
 
 	camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete);
 
@@ -513,11 +512,11 @@  void MainWindow::processCapture()
 	fps = lastBufferTime_ && fps ? 1000000000.0 / fps : 0.0;
 	lastBufferTime_ = metadata.timestamp;
 
-	std::cout << "seq: " << std::setw(6) << std::setfill('0') << metadata.sequence
-		  << " bytesused: " << metadata.planes[0].bytesused
-		  << " timestamp: " << metadata.timestamp
-		  << " fps: " << std::fixed << std::setprecision(2) << fps
-		  << std::endl;
+	qInfo() << "seq:" << qSetFieldWidth(6) << qSetPadChar('0')
+		<< metadata.sequence << Qt::reset
+		<< "bytesused:" << metadata.planes[0].bytesused
+		<< "timestamp:" << metadata.timestamp
+		<< "fps:" << Qt::fixed << qSetRealNumberPrecision(2) << fps;
 
 	/* Display the buffer and requeue it to the camera. */
 	display(buffer);
@@ -542,7 +541,7 @@  void MainWindow::queueRequest(FrameBuffer *buffer)
 {
 	Request *request = camera_->createRequest();
 	if (!request) {
-		std::cerr << "Can't create request" << std::endl;
+		qWarning() << "Can't create request";
 		return;
 	}