From patchwork Thu Jul 4 14:59:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 1618 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id EF8946157B for ; Thu, 4 Jul 2019 16:59:47 +0200 (CEST) Received: from localhost.localdomain (cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7DC742AF; Thu, 4 Jul 2019 16:59:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1562252387; bh=SmEDt2vdm7wf1fhUB5FuqYR9+6h5HD1FrHFWr5tWWjg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mePJG7yR4IRcwO+uKYnpvcvY17G7c+yo0bhJxQXayh8czyqKsOUcz/3mAV1elevAe AX6g9S9bsx6kOkw9O8Gca5s5U9F1UlMRSo9s4c7ZzUM4BtbdjKhFHg5Qnrqqlgb4m3 UlYVaHJLFU9yGYDeSbo+2DhR1/p9bxJjlgWXKaHw= From: Kieran Bingham To: LibCamera Devel Date: Thu, 4 Jul 2019 15:59:41 +0100 Message-Id: <20190704145942.17879-6-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190704145942.17879-1-kieran.bingham@ideasonboard.com> References: <20190704145942.17879-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 5/6] qcam: Update window title with FPS X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Jul 2019 14:59:49 -0000 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 Reviewed-by: Laurent Pinchart --- 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 */ + 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 #include + +#include #include +#include +#include #include #include @@ -28,10 +32,15 @@ enum { class MainWindow : public QMainWindow { + Q_OBJECT + public: MainWindow(const OptionsParser::Options &options); ~MainWindow(); +public Q_SLOTS: + void updateTitle(); + private: int openCamera(); @@ -43,6 +52,8 @@ private: int display(Buffer *buffer); QString title_; + QTimer titleTimer_; + const OptionsParser::Options &options_; std::shared_ptr 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')