[libcamera-devel] [PATCH v4 5/6] qcam: Update window title with FPS

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jul 4 22:33:46 CEST 2019


Hi Kieran,

Thank you for the patch.

On Thu, Jul 04, 2019 at 03:59:41PM +0100, Kieran Bingham wrote:
> Provide an average FPS in the QCam title bar to show the current rate of
> frame processing.
> 
> The QCam compilation is updated to process the QT MoC headers to support

s/QT/Qt/

> signals and slots accordingly.
> 
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> ---
> v4
>  - Start and stop title timer with the stream
> ---
>  src/qcam/main_window.cpp | 23 +++++++++++++++++++++++
>  src/qcam/main_window.h   | 15 +++++++++++++++
>  src/qcam/meson.build     | 11 +++++++++--
>  3 files changed, 47 insertions(+), 2 deletions(-)
> 
> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
> index d61369109d66..5693b9256a08 100644
> --- a/src/qcam/main_window.cpp
> +++ b/src/qcam/main_window.cpp
> @@ -28,6 +28,7 @@ MainWindow::MainWindow(const OptionsParser::Options &options)
>  
>  	title_ = "QCam " + QString::fromStdString(libcamera::version);
>  	setWindowTitle(title_);
> +	connect(&titleTimer_, SIGNAL(timeout()), this, SLOT(updateTitle()));
>  
>  	viewfinder_ = new ViewFinder(this);
>  	setCentralWidget(viewfinder_);
> @@ -54,6 +55,19 @@ MainWindow::~MainWindow()
>  	CameraManager::instance()->stop();
>  }
>  
> +void MainWindow::updateTitle()
> +{
> +	unsigned int duration = frameRateInterval_.elapsed();
> +	unsigned int frames = framesCaptured_ - previousFrames_;
> +	double fps = frames * 1000.0 / duration;
> +
> +	/* Restart counters */

s/counters/counters./

> +	frameRateInterval_.start();
> +	previousFrames_ = framesCaptured_;
> +
> +	setWindowTitle(title_ + " : " + QString::number(fps, 'f', 2) + " fps");
> +}
> +
>  int MainWindow::openCamera()
>  {
>  	CameraManager *cm = CameraManager::instance();
> @@ -148,6 +162,10 @@ int MainWindow::startCapture()
>  		requests.push_back(request);
>  	}
>  
> +	titleTimer_.start(2000);
> +	frameRateInterval_.start();
> +	previousFrames_ = 0;
> +	framesCaptured_ = 0;
>  	lastBufferTime_ = 0;
>  
>  	ret = camera_->start();
> @@ -188,6 +206,9 @@ void MainWindow::stopCapture()
>  	isCapturing_ = false;
>  
>  	config_.reset();
> +
> +	titleTimer_.stop();
> +	setWindowTitle(title_);
>  }
>  
>  void MainWindow::requestComplete(Request *request,
> @@ -196,6 +217,8 @@ void MainWindow::requestComplete(Request *request,
>  	if (request->status() == Request::RequestCancelled)
>  		return;
>  
> +	framesCaptured_++;
> +
>  	Buffer *buffer = buffers.begin()->second;
>  
>  	double fps = buffer->timestamp() - lastBufferTime_;
> diff --git a/src/qcam/main_window.h b/src/qcam/main_window.h
> index 46a494a9d783..e97d92402f1e 100644
> --- a/src/qcam/main_window.h
> +++ b/src/qcam/main_window.h
> @@ -10,7 +10,11 @@
>  #include <map>
>  #include <memory>
>  
> +

No need for this blank line.

> +#include <QElapsedTimer>
>  #include <QMainWindow>
> +#include <QObject>
> +#include <QTimer>
>  
>  #include <libcamera/camera.h>
>  #include <libcamera/stream.h>
> @@ -28,10 +32,15 @@ enum {
>  
>  class MainWindow : public QMainWindow
>  {
> +	Q_OBJECT
> +
>  public:
>  	MainWindow(const OptionsParser::Options &options);
>  	~MainWindow();
>  
> +public Q_SLOTS:
> +	void updateTitle();

Can't you make this private ?

With those small issues fixed,

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> +
>  private:
>  	int openCamera();
>  
> @@ -43,6 +52,8 @@ private:
>  	int display(Buffer *buffer);
>  
>  	QString title_;
> +	QTimer titleTimer_;
> +
>  	const OptionsParser::Options &options_;
>  
>  	std::shared_ptr<Camera> camera_;
> @@ -51,6 +62,10 @@ private:
>  
>  	uint64_t lastBufferTime_;
>  
> +	QElapsedTimer frameRateInterval_;
> +	uint32_t previousFrames_;
> +	uint32_t framesCaptured_;
> +
>  	ViewFinder *viewfinder_;
>  };
>  
> diff --git a/src/qcam/meson.build b/src/qcam/meson.build
> index 9f1fa75f9813..21f91f25cec0 100644
> --- a/src/qcam/meson.build
> +++ b/src/qcam/meson.build
> @@ -7,14 +7,21 @@ qcam_sources = files([
>      'viewfinder.cpp',
>  ])
>  
> -import('qt5')
> +qcam_moc_headers = files([
> +    'main_window.h',
> +])
> +
> +qt5 = import('qt5')
>  qt5_dep = dependency('qt5',
>                       method : 'pkg-config',
>                       modules : ['Core', 'Gui', 'Widgets'],
>                       required : false)
>  
>  if qt5_dep.found()
> -    qcam  = executable('qcam', qcam_sources,
> +    moc_files = qt5.preprocess(moc_headers: qcam_moc_headers,
> +                               dependencies: qt5_dep)
> +
> +    qcam  = executable('qcam', qcam_sources, moc_files,
>                         install : true,
>                         dependencies : [libcamera_dep, qt5_dep],
>                         cpp_args : '-DQT_NO_KEYWORDS')

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list