[{"id":36527,"web_url":"https://patchwork.libcamera.org/comment/36527/","msgid":"<59372884e309a7deb10b28fd82727f4bb4f85f3d.camel@collabora.com>","date":"2025-10-28T16:18:50","subject":"Re: [PATCH v3 4/4] gstreamer: Track RequestWrap's GstBuffer using\n\tGstPad","submitter":{"id":31,"url":"https://patchwork.libcamera.org/api/people/31/","name":"Nicolas Dufresne","email":"nicolas.dufresne@collabora.com"},"content":"Le samedi 25 octobre 2025 à 15:23 +0100, Umang Jain a écrit :\n> GstPad is the link point where the buffers are pushed/pulled in the\n> gstreamer pipeline hence, it makes more sense to associate and\n> track GstBuffer(s) using GstPad rather than libcamera::Stream in\n> RequestWrap.\n> \n> No functional changes intended as there is only one stream per pad\n> configuration followed in libcamerasrc.\n> \n> Signed-off-by: Umang Jain <uajain@igalia.com>\n\nReviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>\n\n> ---\n>  src/gstreamer/gstlibcamerasrc.cpp | 24 ++++++++++++------------\n>  1 file changed, 12 insertions(+), 12 deletions(-)\n> \n> diff --git a/src/gstreamer/gstlibcamerasrc.cpp\n> b/src/gstreamer/gstlibcamerasrc.cpp\n> index 7bf42be2..5ca9e3b9 100644\n> --- a/src/gstreamer/gstlibcamerasrc.cpp\n> +++ b/src/gstreamer/gstlibcamerasrc.cpp\n> @@ -48,11 +48,11 @@ struct RequestWrap {\n>  \tRequestWrap(std::unique_ptr<Request> request);\n>  \t~RequestWrap();\n>  \n> -\tvoid attachBuffer(Stream *stream, GstBuffer *buffer);\n> -\tGstBuffer *detachBuffer(Stream *stream);\n> +\tvoid attachBuffer(GstPad *srcpad, GstBuffer *buffer);\n> +\tGstBuffer *detachBuffer(GstPad *srcpad);\n>  \n>  \tstd::unique_ptr<Request> request_;\n> -\tstd::map<Stream *, GstBuffer *> buffers_;\n> +\tstd::map<GstPad *, GstBuffer *> buffers_;\n>  \n>  \tGstClockTime latency_;\n>  \tGstClockTime pts_;\n> @@ -65,32 +65,33 @@ RequestWrap::RequestWrap(std::unique_ptr<Request> request)\n>  \n>  RequestWrap::~RequestWrap()\n>  {\n> -\tfor (std::pair<Stream *const, GstBuffer *> &item : buffers_) {\n> +\tfor (std::pair<GstPad *const, GstBuffer *> &item : buffers_) {\n>  \t\tif (item.second)\n>  \t\t\tgst_buffer_unref(item.second);\n>  \t}\n>  }\n>  \n> -void RequestWrap::attachBuffer(Stream *stream, GstBuffer *buffer)\n> +void RequestWrap::attachBuffer(GstPad *srcpad, GstBuffer *buffer)\n>  {\n>  \tFrameBuffer *fb = gst_libcamera_buffer_get_frame_buffer(buffer);\n> +\tStream *stream = gst_libcamera_pad_get_stream(srcpad);\n>  \n>  \trequest_->addBuffer(stream, fb);\n>  \n> -\tauto item = buffers_.find(stream);\n> +\tauto item = buffers_.find(srcpad);\n>  \tif (item != buffers_.end()) {\n>  \t\tgst_buffer_unref(item->second);\n>  \t\titem->second = buffer;\n>  \t} else {\n> -\t\tbuffers_[stream] = buffer;\n> +\t\tbuffers_[srcpad] = buffer;\n>  \t}\n>  }\n>  \n> -GstBuffer *RequestWrap::detachBuffer(Stream *stream)\n> +GstBuffer *RequestWrap::detachBuffer(GstPad *srcpad)\n>  {\n>  \tGstBuffer *buffer = nullptr;\n>  \n> -\tauto item = buffers_.find(stream);\n> +\tauto item = buffers_.find(srcpad);\n>  \tif (item != buffers_.end()) {\n>  \t\tbuffer = item->second;\n>  \t\titem->second = nullptr;\n> @@ -189,7 +190,6 @@ int GstLibcameraSrcState::queueRequest()\n>  \t\tstd::make_unique<RequestWrap>(std::move(request));\n>  \n>  \tfor (GstPad *srcpad : srcpads_) {\n> -\t\tStream *stream = gst_libcamera_pad_get_stream(srcpad);\n>  \t\tGstLibcameraPool *pool = gst_libcamera_pad_get_pool(srcpad);\n>  \t\tGstBuffer *buffer;\n>  \t\tGstFlowReturn ret;\n> @@ -204,7 +204,7 @@ int GstLibcameraSrcState::queueRequest()\n>  \t\t\treturn -ENOBUFS;\n>  \t\t}\n>  \n> -\t\twrap->attachBuffer(stream, buffer);\n> +\t\twrap->attachBuffer(srcpad, buffer);\n>  \t}\n>  \n>  \tGST_TRACE_OBJECT(src_, \"Requesting buffers\");\n> @@ -354,7 +354,7 @@ int GstLibcameraSrcState::processRequest()\n>  \tfor (gsize i = 0; i < srcpads_.size(); i++) {\n>  \t\tGstPad *srcpad = srcpads_[i];\n>  \t\tStream *stream = gst_libcamera_pad_get_stream(srcpad);\n> -\t\tGstBuffer *buffer = wrap->detachBuffer(stream);\n> +\t\tGstBuffer *buffer = wrap->detachBuffer(srcpad);\n>  \n>  \t\tFrameBuffer *fb =\n> gst_libcamera_buffer_get_frame_buffer(buffer);\n>  \t\tconst StreamConfiguration &stream_cfg = stream-\n> >configuration();","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id B75D6BE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Oct 2025 16:21:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D0444607F6;\n\tTue, 28 Oct 2025 17:21:04 +0100 (CET)","from bali.collaboradmins.com (bali.collaboradmins.com\n\t[IPv6:2a01:4f8:201:9162::2])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1A3A6606DE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Oct 2025 17:21:03 +0100 (CET)","from [192.168.11.9] (ip-217-65-134-16.ptr.icomera.net\n\t[217.65.134.16])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (4096 bits)\n\tserver-digest SHA256)\n\t(No client certificate requested) (Authenticated sender: nicolas)\n\tby bali.collaboradmins.com (Postfix) with ESMTPSA id 1D6BF17E1278;\n\tTue, 28 Oct 2025 17:20:40 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=collabora.com header.i=@collabora.com\n\theader.b=\"lFid02id\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com;\n\ts=mail; t=1761668462;\n\tbh=movRxtA6Uv3CQRy/2TySWfZ6KTh6KlrkP8hGdZ8WFp8=;\n\th=Subject:From:To:Cc:Date:In-Reply-To:References:From;\n\tb=lFid02idmvuhlI4RJVgfeH1bt/D8KAzVU5dpgYrcZIdgEpULM4HPkSe+tv6LOQX0Z\n\tXZ1+ekaKY2HYWLr99QSNLmCw+TuAHaS/ykD7ez4NYDVxTjb25EtGN4EyC7csHH2ubm\n\t7VVlSoEEPm0SPFJv/XSPqCZLBMQDwZ9/ccTI+5VdX3rH4l/JuOcnfHfBW7EdtkeM/M\n\twx3N3MmHIFknjhV7iq6sMA58bmAOZZC/p+OFhEvP6tEXB36piHpS+7M6s129BYw30Q\n\taCYX2VET4i3WZvJ6yKpghJkyfxMcP/23XFAv6hyIpHC/rJOGM9qdf4zNwyc/5gxWno\n\t9tmnmmdpDc/hw==","Message-ID":"<59372884e309a7deb10b28fd82727f4bb4f85f3d.camel@collabora.com>","Subject":"Re: [PATCH v3 4/4] gstreamer: Track RequestWrap's GstBuffer using\n\tGstPad","From":"Nicolas Dufresne <nicolas.dufresne@collabora.com>","To":"Umang Jain <uajain@igalia.com>, libcamera-devel@lists.libcamera.org","Cc":"barnabas.pocze@ideasonboard.com","Date":"Tue, 28 Oct 2025 16:18:50 +0000","In-Reply-To":"<20251025142300.64480-5-uajain@igalia.com>","References":"<20251025142300.64480-1-uajain@igalia.com>\n\t<20251025142300.64480-5-uajain@igalia.com>","Autocrypt":"addr=nicolas.dufresne@collabora.com; prefer-encrypt=mutual;\n\tkeydata=mDMEaCN2ixYJKwYBBAHaRw8BAQdAM0EHepTful3JOIzcPv6ekHOenE1u0vDG1gdHFrChD\n\t/e0J05pY29sYXMgRHVmcmVzbmUgPG5pY29sYXNAbmR1ZnJlc25lLmNhPoicBBMWCgBEAhsDBQsJCA\n\tcCAiICBhUKCQgLAgQWAgMBAh4HAheABQkJZfd1FiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrjo\n\tCGQEACgkQ2UGUUSlgcvQlQwD/RjpU1SZYcKG6pnfnQ8ivgtTkGDRUJ8gP3fK7+XUjRNIA/iXfhXMN\n\tabIWxO2oCXKf3TdD7aQ4070KO6zSxIcxgNQFtDFOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzLmR1Z\n\tnJlc25lQGNvbGxhYm9yYS5jb20+iJkEExYKAEECGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4\n\tAWIQTvDVKBFcTDwhoEbxLZQZRRKWBy9AUCaCyyxgUJCWX3dQAKCRDZQZRRKWBy9ARJAP96pFmLffZ\n\tsmBUpkyVBfFAf+zq6BJt769R0al3kHvUKdgD9G7KAHuioxD2v6SX7idpIazjzx8b8rfzwTWyOQWHC\n\tAAS0LU5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAZ21haWwuY29tPoiZBBMWCgBBF\n\tiEE7w1SgRXEw8IaBG8S2UGUUSlgcvQFAmibrGYCGwMFCQll93UFCwkIBwICIgIGFQoJCAsCBBYCAw\n\tECHgcCF4AACgkQ2UGUUSlgcvRObgD/YnQjfi4+L8f4fI7p1pPMTwRTcaRdy6aqkKEmKsCArzQBAK8\n\tbRLv9QjuqsE6oQZra/RB4widZPvphs78H0P6NmpIJ","Organization":"Collabora Canada","Content-Type":"multipart/signed; micalg=\"pgp-sha512\";\n\tprotocol=\"application/pgp-signature\";\n\tboundary=\"=-P0RZ+SFc0LkbCgtuwOOW\"","User-Agent":"Evolution 3.56.2 (3.56.2-2.fc42) ","MIME-Version":"1.0","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]