From patchwork Mon Jan 11 16:33:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 10846 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 63951BD808 for ; Mon, 11 Jan 2021 16:34:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 307B9680BF; Mon, 11 Jan 2021 17:34:11 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=uajain.com header.i=@uajain.com header.b="Su56msAC"; dkim-atps=neutral Received: from mail.uajain.com (static.126.159.217.95.clients.your-server.de [95.217.159.126]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 6D261680BE for ; Mon, 11 Jan 2021 17:34:09 +0100 (CET) From: Umang Jain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=uajain.com; s=mail; t=1610382848; bh=yEAuvXQFdaBYNhs8tGW61ncgf9ds2rojtN/vn1cnXr0=; h=From:To:Cc:Subject:In-Reply-To:References; b=Su56msACe6MTvho7qZo2tanPGp8cMUhVRMAtS4OqoNWeYWub7lyeObxi/emzbffpK hP2Dfdw6b4vd/ut2k8eOqIb+GiOmk1cOjaZtDtp7mBUllg31FB9pcuVmRCGeUcIuQV dAQMnob4mDe0PFqLMOrI1UvDHsg6zuKR0kdzZOj/abGDfup8j2Tb7pbTja3TeA/zRg z5kndA9f2NB7+fDdmHJ/7EwBNsnB5Xr3VFkl6Q+FG8Cs/rr6L/r7dnZH4TM2tLnuva Fuc4d5rhAw1aeMFiUIlM+qwFBzIUDYIirESVI5quLOTS3tiFKtb6R9jHeLHkPR8+Hw V70xMjtxvh2qg== To: libcamera-devel@lists.libcamera.org Date: Mon, 11 Jan 2021 22:03:58 +0530 Message-Id: <20210111163359.43637-2-email@uajain.com> In-Reply-To: <20210111163359.43637-1-email@uajain.com> References: <20210111163359.43637-1-email@uajain.com> Mime-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/2] libcamera: v4l2_videodevice: Track streaming state 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Kieran Bingham Track the state of streamon/streamoff calls to simplify error paths. Ensuring that streamOff() can be called on non-streaming streams facilitates simpler error code paths, where a set of devices can all call streamOff regardless of their initialisation state. Signed-off-by: Kieran Bingham Signed-off-by: Umang Jain --- include/libcamera/internal/v4l2_videodevice.h | 2 ++ src/libcamera/v4l2_videodevice.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h index 529ca0e3..626dfbcd 100644 --- a/include/libcamera/internal/v4l2_videodevice.h +++ b/include/libcamera/internal/v4l2_videodevice.h @@ -249,6 +249,8 @@ private: std::map queuedBuffers_; EventNotifier *fdBufferNotifier_; + + bool streaming_; }; class V4L2M2MDevice diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp index baf683d6..164954f2 100644 --- a/src/libcamera/v4l2_videodevice.cpp +++ b/src/libcamera/v4l2_videodevice.cpp @@ -481,7 +481,8 @@ const std::string V4L2DeviceFormat::toString() const * \param[in] deviceNode The file-system path to the video device node */ V4L2VideoDevice::V4L2VideoDevice(const std::string &deviceNode) - : V4L2Device(deviceNode), cache_(nullptr), fdBufferNotifier_(nullptr) + : V4L2Device(deviceNode), cache_(nullptr), fdBufferNotifier_(nullptr), + streaming_(false) { /* * We default to an MMAP based CAPTURE video device, however this will @@ -1554,6 +1555,8 @@ int V4L2VideoDevice::streamOn() return ret; } + streaming_ = true; + return 0; } @@ -1571,6 +1574,9 @@ int V4L2VideoDevice::streamOff() { int ret; + if (!streaming_ && queuedBuffers_.empty()) + return 0; + ret = ioctl(VIDIOC_STREAMOFF, &bufferType_); if (ret < 0) { LOG(V4L2, Error) @@ -1588,6 +1594,7 @@ int V4L2VideoDevice::streamOff() queuedBuffers_.clear(); fdBufferNotifier_->setEnabled(false); + streaming_ = false; return 0; } From patchwork Mon Jan 11 16:33:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 10847 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 0C678BD808 for ; Mon, 11 Jan 2021 16:34:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D0B3C680BE; Mon, 11 Jan 2021 17:34:12 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=uajain.com header.i=@uajain.com header.b="kUKvgeSG"; dkim-atps=neutral Received: from mail.uajain.com (static.126.159.217.95.clients.your-server.de [95.217.159.126]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0A54C680BE for ; Mon, 11 Jan 2021 17:34:12 +0100 (CET) From: Umang Jain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=uajain.com; s=mail; t=1610382851; bh=yZW2MmJhm1SRNzcqFX+Be/eDcmIZUiLB573/Jnrb3z8=; h=From:To:Cc:Subject:In-Reply-To:References; b=kUKvgeSG/eZA87qi0/sGD262SOAmSXwTSGxs3MBcZEh7uymXmPJito87jTogRUegD 8Umr++RbcAz6C4vEThzJ3eFU19X5NTucD0IQDqvlBMMn+4cT0p0BsOMTmn3TGleEqO hBUxEPQ6KneWe0ok8vKPLFYGH+mDey4xJEmToiR/hRSZXXaU0Fq2hnGifF4I0O/K2s G08eM3uXRztT3L29pew9aurM+n7hSAa8Q0FtMVKWNRYmmCVj6DZ80WhYKznagK+ZFr Gc8tsmUSuK0Krmnz99tySCZ5IigukJRpx2bvvZNq1WcuvoGRRZWiH7WhRzP5ymhOzW WZJmL1zy89f/g== To: libcamera-devel@lists.libcamera.org Date: Mon, 11 Jan 2021 22:03:59 +0530 Message-Id: <20210111163359.43637-3-email@uajain.com> In-Reply-To: <20210111163359.43637-1-email@uajain.com> References: <20210111163359.43637-1-email@uajain.com> Mime-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/2] libcamera: pipelines: ipu3: Simplify error bail out path on start() 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: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" On the bail out path, always ensure that ImgU and CIO2 are stopped before freeing the buffers. V4L2VideoDevice class guarantees that calling stop() without having to call start() is harmless, hence use this guarantee to simplify error paths. Signed-off-by: Umang Jain --- src/libcamera/pipeline/ipu3/ipu3.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index f1151733..73304ea7 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -617,15 +617,14 @@ int PipelineHandlerIPU3::start(Camera *camera, [[maybe_unused]] ControlList *con goto error; ret = imgu->start(); - if (ret) { - imgu->stop(); - cio2->stop(); + if (ret) goto error; - } return 0; error: + imgu->stop(); + cio2->stop(); freeBuffers(camera); LOG(IPU3, Error) << "Failed to start camera " << camera->id();