From patchwork Thu Mar 25 13:42:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kieran Bingham X-Patchwork-Id: 11713 X-Patchwork-Delegate: kieran.bingham@ideasonboard.com 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 912ECC32EA for ; Thu, 25 Mar 2021 13:42:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id BBE7168D7B; Thu, 25 Mar 2021 14:42:43 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="kMf0D8aK"; dkim-atps=neutral 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 4FE2C68D6D for ; Thu, 25 Mar 2021 14:42:37 +0100 (CET) Received: from Q.local (cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D959B560; Thu, 25 Mar 2021 14:42:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1616679757; bh=RSzG7AEw4TJuvB9rhe+Mrc8vkXoQZBWw+Jy4hCX5WaI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kMf0D8aKNl89+uqXGmkuSlDf/D0t1uPe9JiInmat0p3BlehkDLpjnS5byShgygsDI A6Wq2Z1GsUqT2G8lT8c1k2fp8E2KqDwDqzuc/J/vnnEJkFwYX1gU3fsalvok/7fjIm am6INmiacIjvIlHsKvjJr/i5Bt3uuQMnHQsQzWLo= From: Kieran Bingham To: libcamera devel Date: Thu, 25 Mar 2021 13:42:23 +0000 Message-Id: <20210325134231.1400051-6-kieran.bingham@ideasonboard.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210325134231.1400051-1-kieran.bingham@ideasonboard.com> References: <20210325134231.1400051-1-kieran.bingham@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 03/11] libcamera: request: Provide a sequence number 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" Provide a sequence number on Requests which are added by the pipeline handler. Each pipeline handler keeps a requestSequence per CameraData and increments everytime a request is queued on that camera. The sequence number is associated with the Request and can be utilised for assisting with debugging, and printing the queueing sequence of in flight requests. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- include/libcamera/internal/pipeline_handler.h | 4 +++- include/libcamera/request.h | 2 ++ src/libcamera/pipeline_handler.cpp | 2 ++ src/libcamera/request.cpp | 11 +++++++++-- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index 6aca0b46f43d..9bdda8f3b799 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -38,7 +38,7 @@ class CameraData { public: explicit CameraData(PipelineHandler *pipe) - : pipe_(pipe) + : pipe_(pipe), requestSequence_(0) { } virtual ~CameraData() = default; @@ -48,6 +48,8 @@ public: ControlInfoMap controlInfo_; ControlList properties_; + uint32_t requestSequence_; + private: LIBCAMERA_DISABLE_COPY(CameraData) }; diff --git a/include/libcamera/request.h b/include/libcamera/request.h index 6e5aad5f6b75..cd5a24741f8a 100644 --- a/include/libcamera/request.h +++ b/include/libcamera/request.h @@ -50,6 +50,7 @@ public: int addBuffer(const Stream *stream, FrameBuffer *buffer); FrameBuffer *findBuffer(const Stream *stream) const; + uint32_t sequence() const { return sequence_; } uint64_t cookie() const { return cookie_; } Status status() const { return status_; } @@ -71,6 +72,7 @@ private: BufferMap bufferMap_; std::unordered_set pending_; + uint32_t sequence_; const uint64_t cookie_; Status status_; bool cancelled_; diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index d22991d318c9..e3d4975d9ffd 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -382,6 +382,8 @@ int PipelineHandler::queueRequest(Request *request) CameraData *data = cameraData(camera); data->queuedRequests_.push_back(request); + request->sequence_ = data->requestSequence_++; + int ret = queueRequestDevice(camera, request); if (ret) data->queuedRequests_.remove(request); diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp index 3ad83f3b8418..fc16b148a599 100644 --- a/src/libcamera/request.cpp +++ b/src/libcamera/request.cpp @@ -72,8 +72,8 @@ LOG_DEFINE_CATEGORY(Request) * */ Request::Request(Camera *camera, uint64_t cookie) - : camera_(camera), cookie_(cookie), status_(RequestPending), - cancelled_(false) + : camera_(camera), sequence_(0), cookie_(cookie), + status_(RequestPending), cancelled_(false) { /** * \todo Should the Camera expose a validator instance, to avoid @@ -126,6 +126,7 @@ void Request::reuse(ReuseFlag flags) bufferMap_.clear(); } + sequence_ = 0; status_ = RequestPending; cancelled_ = false; @@ -227,6 +228,12 @@ FrameBuffer *Request::findBuffer(const Stream *stream) const * \return The metadata associated with the request */ +/** + * \fn Request::sequence() + * \brief Retrieve the sequence number for the request + * \return The request sequence number + */ + /** * \fn Request::cookie() * \brief Retrieve the cookie set when the request was created