From cd8368f0deb02f750d19a11e06044c07458e01b8 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Sun, 3 Aug 2014 22:40:37 +0000 Subject: [PATCH] Added Camera::finished() signal git-svn-id: http://find-object.googlecode.com/svn/trunk/find_object@368 620bd6b2-0a58-f614-fd9a-1bd335dccda9 --- app/main.cpp | 1 + include/find_object/Camera.h | 1 + src/Camera.cpp | 3 ++- src/MainWindow.cpp | 10 +++++----- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/main.cpp b/app/main.cpp index efb1202d..d2d18c22 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -376,6 +376,7 @@ int main(int argc, char* argv[]) // [Camera] ---Image---> [FindObject] QObject::connect(&camera, SIGNAL(imageReceived(const cv::Mat &)), findObject, SLOT(detect(const cv::Mat &))); + QObject::connect(&camera, SIGNAL(finished()), &app, SLOT(quit())); //use camera in settings setupQuitSignal(); diff --git a/include/find_object/Camera.h b/include/find_object/Camera.h index 0a555f29..64612b84 100644 --- a/include/find_object/Camera.h +++ b/include/find_object/Camera.h @@ -32,6 +32,7 @@ public: Q_SIGNALS: void imageReceived(const cv::Mat & image); + void finished(); public Q_SLOTS: virtual void updateImageRate(); diff --git a/src/Camera.cpp b/src/Camera.cpp index 502d759d..57caa4b0 100644 --- a/src/Camera.cpp +++ b/src/Camera.cpp @@ -128,7 +128,8 @@ void Camera::takeImage() else { // In case of a directory of images or a video - Q_EMIT imageReceived(cv::Mat()); // empty image to notify that there are no more images + this->stop(); + Q_EMIT finished(); // notify that there are no more images } } else diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 873b7094..eceac0b1 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -221,6 +221,7 @@ MainWindow::MainWindow(FindObject * findObject, Camera * camera, QWidget * paren MainWindow::~MainWindow() { disconnect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &))); + disconnect(camera_, SIGNAL(finished()), this, SLOT(stopProcessing())); camera_->stop(); qDeleteAll(objWidgets_); objWidgets_.clear(); @@ -496,6 +497,7 @@ void MainWindow::showHideControls() void MainWindow::addObjectFromScene() { disconnect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &))); + disconnect(camera_, SIGNAL(finished()), this, SLOT(stopProcessing())); AddObjectDialog * dialog; bool resumeCamera = camera_->isRunning(); if(camera_->isRunning() || sceneImage_.empty()) @@ -529,6 +531,7 @@ void MainWindow::addObjectFromScene() else { connect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &)), Qt::UniqueConnection); + connect(camera_, SIGNAL(finished()), this, SLOT(stopProcessing()), Qt::UniqueConnection); if(!sceneImage_.empty()) { this->update(sceneImage_); @@ -779,6 +782,7 @@ void MainWindow::startProcessing() if(camera_->start()) { connect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &)), Qt::UniqueConnection); + connect(camera_, SIGNAL(finished()), this, SLOT(stopProcessing()), Qt::UniqueConnection); ui_->actionStop_camera->setEnabled(true); ui_->actionPause_camera->setEnabled(true); ui_->actionStart_camera->setEnabled(false); @@ -835,6 +839,7 @@ void MainWindow::stopProcessing() if(camera_) { disconnect(camera_, SIGNAL(imageReceived(const cv::Mat &)), this, SLOT(update(const cv::Mat &))); + disconnect(camera_, SIGNAL(finished()), this, SLOT(stopProcessing())); camera_->stop(); } ui_->actionStop_camera->setEnabled(false); @@ -901,11 +906,6 @@ void MainWindow::update(const cv::Mat & image) if(image.empty()) { UWARN("The image received is empty..."); - if(!Settings::getCamera_6useTcpCamera()) - { - UINFO("Stopping the camera..."); - this->stopProcessing(); - } return; } sceneImage_ = image.clone();