From patchwork Fri Feb 14 00:18:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 2827 Return-Path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 78BE861A27 for ; Fri, 14 Feb 2020 01:18:14 +0100 (CET) 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 0EFEDACB; Fri, 14 Feb 2020 01:18:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1581639494; bh=ShGOxG420dnZpKSx4t3QMA9CliIH3Z8xwUWWjw5g+sM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lUE8d8Pnb1g56012UZAKKseqJZNNXd2YwEqem5vUdQKHZ7O2sQrxvX4l02tsYOtId QMrpgRX4yOaaAS0CqfKFS94WG69oLw849ohWb1K39CgK7DPNHhVxmzRXASvazsPcrF zWH6uhYTs/WdNKI5v+WcXNC2pUHQ6MqGnVu+9Flk= From: Kieran Bingham To: libcamera devel Date: Fri, 14 Feb 2020 00:18:05 +0000 Message-Id: <20200214001810.19302-3-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214001810.19302-1-kieran.bingham@ideasonboard.com> References: <20200214001810.19302-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/7] qcam: Move requestCompleted signal mapping X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Feb 2020 00:18:14 -0000 The MainWindow connects a handler to the Camera requestCompleted signal when the camera is opened, but never disconnects it. Move the connection to the startCapture() function, and ensure that it is disconnected again when the stream is stopped. This ensures that we can successfully tear down the stream, and restart with a new camera. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- src/qcam/main_window.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/qcam/main_window.cpp b/src/qcam/main_window.cpp index db14245d7f51..38d7063363f0 100644 --- a/src/qcam/main_window.cpp +++ b/src/qcam/main_window.cpp @@ -113,8 +113,6 @@ int MainWindow::openCamera(CameraManager *cm) std::cout << "Using camera " << camera_->name() << std::endl; - camera_->requestCompleted.connect(this, &MainWindow::requestComplete); - return 0; } @@ -212,17 +210,23 @@ int MainWindow::startCapture() goto error; } + camera_->requestCompleted.connect(this, &MainWindow::requestComplete); + for (Request *request : requests) { ret = camera_->queueRequest(request); if (ret < 0) { std::cerr << "Can't queue request" << std::endl; - goto error; + goto error_disconnect; } } isCapturing_ = true; return 0; +error_disconnect: + camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete); + camera_->stop(); + error: for (Request *request : requests) delete request; @@ -249,6 +253,8 @@ void MainWindow::stopCapture() if (ret) std::cout << "Failed to stop capture" << std::endl; + camera_->requestCompleted.disconnect(this, &MainWindow::requestComplete); + for (auto &iter : mappedBuffers_) { void *memory = iter.second.first; unsigned int length = iter.second.second;