Patch Detail
Show a patch.
GET /api/1.1/patches/16903/?format=api
{ "id": 16903, "url": "https://patchwork.libcamera.org/api/1.1/patches/16903/?format=api", "web_url": "https://patchwork.libcamera.org/patch/16903/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20220802102943.3221109-5-chenghaoyang@google.com>", "date": "2022-08-02T10:29:38", "name": "[libcamera-devel,v4,4/9] ipu3: Add StillCapture stream and imgu1 param buffers", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "2d3aa444cf0e9b8ba575c0ec7856313e899468fe", "submitter": { "id": 117, "url": "https://patchwork.libcamera.org/api/1.1/people/117/?format=api", "name": "Cheng-Hao Yang", "email": "chenghaoyang@chromium.org" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/16903/mbox/", "series": [ { "id": 3357, "url": "https://patchwork.libcamera.org/api/1.1/series/3357/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3357", "date": "2022-08-02T10:29:34", "name": "Use two imgus in ipu3 pipeline handler", "version": 4, "mbox": "https://patchwork.libcamera.org/series/3357/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/16903/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/16903/checks/", "tags": {}, "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 51D3BC3276\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 2 Aug 2022 10:29:58 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0F5246331C;\n\tTue, 2 Aug 2022 12:29:58 +0200 (CEST)", "from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com\n\t[IPv6:2607:f8b0:4864:20::52f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DA7F86331B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 2 Aug 2022 12:29:56 +0200 (CEST)", "by mail-pg1-x52f.google.com with SMTP id d7so8949308pgc.13\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 02 Aug 2022 03:29:56 -0700 (PDT)", "from chenghaoyang-low.c.googlers.com.com\n\t(231.137.80.34.bc.googleusercontent.com. [34.80.137.231])\n\tby smtp.gmail.com with ESMTPSA id\n\tt15-20020a170902e84f00b0016db88f69a2sm1955128plg.141.2022.08.02.03.29.53\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 02 Aug 2022 03:29:54 -0700 (PDT)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1659436198;\n\tbh=FtFd22lL6VR968rYEokrScVZxJZYgXXbbuNzHEkOY4w=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=Pt0kopp1g9hNtfJ+rL5GyvpdNp/sGcaLQG8M7xu3biiQRB9gI95/V5kLLFc8WxMdc\n\tE3A6ifywcZn+yJCTl+zOvErbiPZZYcjPJ115f/1Ve5oR3qffcRNsZHhpzFKSD25kyF\n\t7PYGbVXyw1rM3PBZ2QX+2aik+D8KWK1HOwIGIdaNpNEYrFTkQ0w8gtK187o1SbjpeJ\n\tK+B+hALupTLDJq/m96Mf2/TN6eRLwhhWFqc+65hvu6u9XrPwWsbTcPyonInBcm+NFg\n\tp+HO355tm4k+RpP1RjyHZX5qDtZY871LWct5wWbU06JnDnHvRU6gqDUoh0X/Qmjo8k\n\tVI0M5Pujm7BFw==", "v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org;\n\ts=google; \n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=Jbu0snkTEI4cpm0JAWs7QyslODoBJyLzd9cT/bBu3p8=;\n\tb=TqJKO6sHdAVQnSl5XEzzBzWpHxLfK3iOW1TwtUk8ocGRSQN7Me50Wn+Hzxy37zFlE7\n\tsRkLha/EKt2/kjuGRqQb6QUdOSXA0rlGoYwTB2a7hPnAhSncEYom1OggBW/LBhWGT3jw\n\tnokv/LAQOB5GWNkrIM2mma9T1XwdwcFotxisI=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=chromium.org\n\theader.i=@chromium.org header.b=\"TqJKO6sH\"; \n\tdkim-atps=neutral", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=Jbu0snkTEI4cpm0JAWs7QyslODoBJyLzd9cT/bBu3p8=;\n\tb=aVig1wFGs4Kr8cbaasi9RFC13tVfKYNkY6+cvutRUEtlzSCnWKSt5l9sbt/xwCvW/J\n\tB/GvGLluvNDd7fMpY9ardFcUw89X0UdCnT2UUi6tBqcH6MZ6M0OGVVGZUnFgW1IrjvUy\n\tb1GfxHg7Zpfoj9XmjXYTikYVvihcyvC6JbxvNL1CUlOTdhCwiyuJYAuKMfCXGgW/BlQf\n\t3LtmDtlq/evRcHiuRvFjZGRzxcAdLlSTRyed8hEv65OqCSXwqDuwC4E2H6f05Ph49XXF\n\t6bZ99+MTuU2VHmEgi54ocAaaSOBzMpJsawVXFM3ZFt3DnVAWc2Qpu6q57gFy4PvxMa/T\n\tCS2w==", "X-Gm-Message-State": "AJIora86Jp9QJlnPTq+tH1QJb+uQwV9MpbRw60prNQn60zWIutaBYWMz\n\tbkU1a+gABglVOSlCUQXa6hWouQWww4Zadw==", "X-Google-Smtp-Source": "AGRyM1uyXNcUn/uagE6Ic0VubDA6blZ/Qn2VKURU9OQPQmC9KJdJLsUk5EGULNbYFOxzOsd7PaetjA==", "X-Received": "by 2002:a63:1510:0:b0:41b:3901:2c13 with SMTP id\n\tv16-20020a631510000000b0041b39012c13mr15835487pgl.341.1659436194957; \n\tTue, 02 Aug 2022 03:29:54 -0700 (PDT)", "X-Google-Original-From": "Harvey Yang <chenghaoyang@google.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 2 Aug 2022 10:29:38 +0000", "Message-Id": "<20220802102943.3221109-5-chenghaoyang@google.com>", "X-Mailer": "git-send-email 2.37.1.455.g008518b4e5-goog", "In-Reply-To": "<20220802102943.3221109-1-chenghaoyang@google.com>", "References": "<20220802102943.3221109-1-chenghaoyang@google.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v4 4/9] ipu3: Add StillCapture stream and\n\timgu1 param buffers", "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>", "From": "Harvey Yang via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "Harvey Yang <chenghaoyang@chromium.org>", "Cc": "Harvey Yang <chenghaoyang@chromium.org>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "From: Harvey Yang <chenghaoyang@chromium.org>\n\nThis patch adds the StillCapture stream and ImgU1 param buffers. ImgU1\nstatistics buffers will be ignored, as they're not needed for 3A.\nThe following patches will enable imgu1 to handle StillCapture stream\nspecifically, when the imgu0 is needed to handle video/preview streams.\n\nSigned-off-by: Harvey Yang <chenghaoyang@chromium.org>\n---\n src/libcamera/pipeline/ipu3/frames.cpp | 23 +++++++++++++++++++++--\n src/libcamera/pipeline/ipu3/frames.h | 8 +++++++-\n src/libcamera/pipeline/ipu3/ipu3.cpp | 20 +++++++++++++++++++-\n 3 files changed, 47 insertions(+), 4 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/ipu3/frames.cpp b/src/libcamera/pipeline/ipu3/frames.cpp\nindex a4c3477c..f9b705a5 100644\n--- a/src/libcamera/pipeline/ipu3/frames.cpp\n+++ b/src/libcamera/pipeline/ipu3/frames.cpp\n@@ -23,7 +23,8 @@ IPU3Frames::IPU3Frames()\n }\n \n void IPU3Frames::init(const std::vector<std::unique_ptr<FrameBuffer>> ¶mBuffers,\n-\t\t const std::vector<std::unique_ptr<FrameBuffer>> &statBuffers)\n+\t\t const std::vector<std::unique_ptr<FrameBuffer>> &statBuffers,\n+\t\t const std::vector<std::unique_ptr<FrameBuffer>> &captureParamBuffers)\n {\n \tfor (const std::unique_ptr<FrameBuffer> &buffer : paramBuffers)\n \t\tavailableParamBuffers_.push(buffer.get());\n@@ -31,6 +32,9 @@ void IPU3Frames::init(const std::vector<std::unique_ptr<FrameBuffer>> ¶mBuff\n \tfor (const std::unique_ptr<FrameBuffer> &buffer : statBuffers)\n \t\tavailableStatBuffers_.push(buffer.get());\n \n+\tfor (const std::unique_ptr<FrameBuffer> &buffer : captureParamBuffers)\n+\t\tavailableCaptureParamBuffers_.push(buffer.get());\n+\n \tframeInfo_.clear();\n }\n \n@@ -38,6 +42,7 @@ void IPU3Frames::clear()\n {\n \tavailableParamBuffers_ = {};\n \tavailableStatBuffers_ = {};\n+\tavailableCaptureParamBuffers_ = {};\n }\n \n IPU3Frames::Info *IPU3Frames::create(Request *request)\n@@ -54,14 +59,22 @@ IPU3Frames::Info *IPU3Frames::create(Request *request)\n \t\treturn nullptr;\n \t}\n \n+\tif (availableCaptureParamBuffers_.empty()) {\n+\t\tLOG(IPU3, Debug) << \"Capture parameters buffer underrun\";\n+\t\treturn nullptr;\n+\t}\n+\n \tFrameBuffer *paramBuffer = availableParamBuffers_.front();\n \tFrameBuffer *statBuffer = availableStatBuffers_.front();\n+\tFrameBuffer *captureParamBuffer = availableCaptureParamBuffers_.front();\n \n \tparamBuffer->_d()->setRequest(request);\n \tstatBuffer->_d()->setRequest(request);\n+\tcaptureParamBuffer->_d()->setRequest(request);\n \n \tavailableParamBuffers_.pop();\n \tavailableStatBuffers_.pop();\n+\tavailableCaptureParamBuffers_.pop();\n \n \t/* \\todo Remove the dynamic allocation of Info */\n \tstd::unique_ptr<Info> info = std::make_unique<Info>();\n@@ -71,7 +84,9 @@ IPU3Frames::Info *IPU3Frames::create(Request *request)\n \tinfo->rawBuffer = nullptr;\n \tinfo->paramBuffer = paramBuffer;\n \tinfo->statBuffer = statBuffer;\n+\tinfo->captureParamBuffer = captureParamBuffer;\n \tinfo->paramDequeued = false;\n+\tinfo->captureParamDequeued = false;\n \tinfo->metadataProcessed = false;\n \n \tframeInfo_[id] = std::move(info);\n@@ -84,6 +99,7 @@ void IPU3Frames::remove(IPU3Frames::Info *info)\n \t/* Return params and stat buffer for reuse. */\n \tavailableParamBuffers_.push(info->paramBuffer);\n \tavailableStatBuffers_.push(info->statBuffer);\n+\tavailableCaptureParamBuffers_.push(info->captureParamBuffer);\n \n \t/* Delete the extended frame information. */\n \tframeInfo_.erase(info->id);\n@@ -102,6 +118,9 @@ bool IPU3Frames::tryComplete(IPU3Frames::Info *info)\n \tif (!info->paramDequeued)\n \t\treturn false;\n \n+\tif (!info->captureParamDequeued)\n+\t\treturn false;\n+\n \tremove(info);\n \n \tbufferAvailable.emit();\n@@ -131,7 +150,7 @@ IPU3Frames::Info *IPU3Frames::find(FrameBuffer *buffer)\n \t\t\t\treturn info;\n \n \t\tif (info->rawBuffer == buffer || info->paramBuffer == buffer ||\n-\t\t info->statBuffer == buffer)\n+\t\t info->statBuffer == buffer || info->captureParamBuffer == buffer)\n \t\t\treturn info;\n \t}\n \ndiff --git a/src/libcamera/pipeline/ipu3/frames.h b/src/libcamera/pipeline/ipu3/frames.h\nindex 6e3cb915..8fcb8a14 100644\n--- a/src/libcamera/pipeline/ipu3/frames.h\n+++ b/src/libcamera/pipeline/ipu3/frames.h\n@@ -36,16 +36,20 @@ public:\n \t\tFrameBuffer *paramBuffer;\n \t\tFrameBuffer *statBuffer;\n \n+\t\tFrameBuffer *captureParamBuffer;\n+\n \t\tControlList effectiveSensorControls;\n \n \t\tbool paramDequeued;\n+\t\tbool captureParamDequeued;\n \t\tbool metadataProcessed;\n \t};\n \n \tIPU3Frames();\n \n \tvoid init(const std::vector<std::unique_ptr<FrameBuffer>> ¶mBuffers,\n-\t\t const std::vector<std::unique_ptr<FrameBuffer>> &statBuffers);\n+\t\t const std::vector<std::unique_ptr<FrameBuffer>> &statBuffers,\n+\t\t const std::vector<std::unique_ptr<FrameBuffer>> &captureParamBuffers);\n \tvoid clear();\n \n \tInfo *create(Request *request);\n@@ -61,6 +65,8 @@ private:\n \tstd::queue<FrameBuffer *> availableParamBuffers_;\n \tstd::queue<FrameBuffer *> availableStatBuffers_;\n \n+\tstd::queue<FrameBuffer *> availableCaptureParamBuffers_;\n+\n \tstd::map<unsigned int, std::unique_ptr<Info>> frameInfo_;\n };\n \ndiff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\nindex c3e90f22..4efa1019 100644\n--- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n@@ -70,6 +70,7 @@ public:\n \tStream outStream_;\n \tStream vfStream_;\n \tStream rawStream_;\n+\tStream outCaptureStream_;\n \n \tRectangle cropRegion_;\n \tbool supportsFlips_;\n@@ -693,6 +694,8 @@ int PipelineHandlerIPU3::exportFrameBuffers(Camera *camera, Stream *stream,\n \t\treturn imgu0_.viewfinder_->exportBuffers(count, buffers);\n \telse if (stream == &data->rawStream_)\n \t\treturn data->cio2_.exportBuffers(count, buffers);\n+\telse if (stream == &data->outCaptureStream_)\n+\t\treturn imgu1_.output_->exportBuffers(count, buffers);\n \n \treturn -EINVAL;\n }\n@@ -715,11 +718,17 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)\n \t\tdata->outStream_.configuration().bufferCount,\n \t\tdata->vfStream_.configuration().bufferCount,\n \t\tdata->rawStream_.configuration().bufferCount,\n+\t\tdata->outCaptureStream_.configuration().bufferCount,\n \t});\n \n \tret = imgu0_.allocateBuffers(bufferCount);\n \tif (ret < 0)\n \t\treturn ret;\n+\tret = imgu1_.allocateBuffers(bufferCount);\n+\tif (ret < 0) {\n+\t\timgu0_.freeBuffers();\n+\t\treturn ret;\n+\t}\n \n \t/* Map buffers to the IPA. */\n \tunsigned int ipaBufferId = 1;\n@@ -734,9 +743,14 @@ int PipelineHandlerIPU3::allocateBuffers(Camera *camera)\n \t\tipaBuffers_.emplace_back(buffer->cookie(), buffer->planes());\n \t}\n \n+\tfor (const std::unique_ptr<FrameBuffer> &buffer : imgu1_.paramBuffers_) {\n+\t\tbuffer->setCookie(ipaBufferId++);\n+\t\tipaBuffers_.emplace_back(buffer->cookie(), buffer->planes());\n+\t}\n+\n \tdata->ipa_->mapBuffers(ipaBuffers_);\n \n-\tdata->frameInfos_.init(imgu0_.paramBuffers_, imgu0_.statBuffers_);\n+\tdata->frameInfos_.init(imgu0_.paramBuffers_, imgu0_.statBuffers_, imgu1_.paramBuffers_);\n \tdata->frameInfos_.bufferAvailable.connect(\n \t\tdata, &IPU3CameraData::queuePendingRequests);\n \n@@ -757,6 +771,7 @@ int PipelineHandlerIPU3::freeBuffers(Camera *camera)\n \tipaBuffers_.clear();\n \n \timgu0_.freeBuffers();\n+\timgu1_.freeBuffers();\n \n \treturn 0;\n }\n@@ -1135,6 +1150,7 @@ int PipelineHandlerIPU3::registerCameras()\n \t\t\t&data->outStream_,\n \t\t\t&data->vfStream_,\n \t\t\t&data->rawStream_,\n+\t\t\t&data->outCaptureStream_,\n \t\t};\n \t\tCIO2Device *cio2 = &data->cio2_;\n \n@@ -1310,6 +1326,8 @@ void IPU3CameraData::paramsBufferReady(unsigned int id)\n \timgu0_->param_->queueBuffer(info->paramBuffer);\n \timgu0_->stat_->queueBuffer(info->statBuffer);\n \timgu0_->input_->queueBuffer(info->rawBuffer);\n+\n+\tinfo->captureParamDequeued = true;\n }\n \n void IPU3CameraData::metadataReady(unsigned int id, const ControlList &metadata)\n", "prefixes": [ "libcamera-devel", "v4", "4/9" ] }