[libcamera-devel] [PATCH v2 5/5] qcam: Update window title with FPS
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jul 4 16:33:40 CEST 2019
Hi Laurent,
On 04/07/2019 14:52, Laurent Pinchart wrote:
> Hi Kieran,
>
> Thank you for the patch.
>
> On Thu, Jul 04, 2019 at 02:03:47PM +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
>> signals and slots accordingly.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>> ---
>> src/qcam/main_window.cpp | 22 ++++++++++++++++++++++
>> src/qcam/main_window.h | 11 +++++++++++
>> src/qcam/meson.build | 11 ++++++++++-
>> 3 files changed, 43 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp
>> index d61369109d66..9f05ec05549f 100644
>> --- a/src/qcam/main_window.cpp
>> +++ b/src/qcam/main_window.cpp
>> @@ -29,6 +29,10 @@ MainWindow::MainWindow(const OptionsParser::Options &options)
>> title_ = "QCam " + QString::fromStdString(libcamera::version);
>> setWindowTitle(title_);
>>
>> + QTimer *timer = new QTimer(this);
>> + connect(timer, SIGNAL(timeout()), this, SLOT(updateTitle()));
>> + timer->start(2000);
>> +
>
> Should you start the timer only when starting capture ? And stop it when
> stopping capture (and reset the title there to remove the fps) ?
Done.
>
>> viewfinder_ = new ViewFinder(this);
>> setCentralWidget(viewfinder_);
>> viewfinder_->setFixedSize(500, 500);
>> @@ -54,6 +58,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 */
>> + frameRateInterval_.start();
>> + previousFrames_ = framesCaptured_;
>> +
>> + setWindowTitle(title_ + " : " + QString::number(fps, 'f', 2) + " fps");
>> +}
>> +
>> int MainWindow::openCamera()
>> {
>> CameraManager *cm = CameraManager::instance();
>> @@ -148,6 +165,9 @@ int MainWindow::startCapture()
>> requests.push_back(request);
>> }
>>
>> + frameRateInterval_.start();
>> + previousFrames_ = 0;
>> + framesCaptured_ = 0;
>> lastBufferTime_ = 0;
>>
>> ret = camera_->start();
>> @@ -196,6 +216,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..6b3dcab6d490 100644
>> --- a/src/qcam/main_window.h
>> +++ b/src/qcam/main_window.h
>> @@ -10,7 +10,9 @@
>> #include <map>
>> #include <memory>
>>
>> +#include <QElapsedTimer>
>> #include <QMainWindow>
>> +#include <QObject>
>>
>> #include <libcamera/camera.h>
>> #include <libcamera/stream.h>
>> @@ -28,10 +30,15 @@ enum {
>>
>> class MainWindow : public QMainWindow
>> {
>> + Q_OBJECT
>> +
>> public:
>> MainWindow(const OptionsParser::Options &options);
>> ~MainWindow();
>>
>> +public Q_SLOTS:
>> + void updateTitle();
>> +
>> private:
>> int openCamera();
>>
>> @@ -51,6 +58,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..c2c4d7cc9787 100644
>> --- a/src/qcam/meson.build
>> +++ b/src/qcam/meson.build
>> @@ -7,13 +7,22 @@ qcam_sources = files([
>> 'viewfinder.cpp',
>> ])
>>
>> -import('qt5')
>> +qcam_headers = files([
>> + 'main_window.h',
>
> Should you list all the headers here ? Otherwise I would name this
> variable qcam_moc_headers.
Renamed to qcam_moc_headers
>
>> +])
>> +
>> +qt5 = import('qt5')
>> qt5_dep = dependency('qt5',
>> method : 'pkg-config',
>> modules : ['Core', 'Gui', 'Widgets'],
>> required : false)
>>
>> if qt5_dep.found()
>> + moc_files = qt5.preprocess(moc_headers: qcam_headers,
>> + dependencies: qt5_dep)
>> +
>> + qcam_sources += moc_files
>> +
>> qcam = executable('qcam', qcam_sources,
>
> You don't need to update qcam_sources, you can list the moc files here:
Updated.
>
> qcam = executable('qcam', qcam_sources, moc_files,
>
>> install : true,
>> dependencies : [libcamera_dep, qt5_dep],
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list