[{"id":17520,"web_url":"https://patchwork.libcamera.org/comment/17520/","msgid":"<20210614034435.GC940767@pyrite.rasen.tech>","date":"2021-06-14T03:44:35","subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: Support return values from\n\tconfigure()","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Fri, Jun 11, 2021 at 01:52:39PM +0100, Kieran Bingham wrote:\n> The IPU3 IPA interface does not define a return value from configure().\n> This prevents errors from being reported back to the pipeline handler\n> when they occur in the IPA.\n> \n> Update the IPU3 IPA interface and add return values to the checks in\n> IPAIPU3::configure() accordingly\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nReviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n\n> ---\n>  include/libcamera/ipa/ipu3.mojom     |  2 +-\n>  src/ipa/ipu3/ipu3.cpp                | 18 +++++++++++-------\n>  src/libcamera/pipeline/ipu3/ipu3.cpp |  6 +++++-\n>  3 files changed, 17 insertions(+), 9 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> index 000c494dbff9..911a3a072464 100644\n> --- a/include/libcamera/ipa/ipu3.mojom\n> +++ b/include/libcamera/ipa/ipu3.mojom\n> @@ -42,7 +42,7 @@ interface IPAIPU3Interface {\n>  \tstart() => (int32 ret);\n>  \tstop();\n>  \n> -\tconfigure(IPAConfigInfo configInfo) => ();\n> +\tconfigure(IPAConfigInfo configInfo) => (int32 ret);\n>  \n>  \tmapBuffers(array<libcamera.IPABuffer> buffers);\n>  \tunmapBuffers(array<uint32> ids);\n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index 415ea9e58cf4..8b4c7351e9db 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -43,7 +43,7 @@ public:\n>  \tint start() override;\n>  \tvoid stop() override {}\n>  \n> -\tvoid configure(const IPAConfigInfo &configInfo) override;\n> +\tint configure(const IPAConfigInfo &configInfo) override;\n>  \n>  \tvoid mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>  \tvoid unmapBuffers(const std::vector<unsigned int> &ids) override;\n> @@ -142,10 +142,12 @@ void IPAIPU3::calculateBdsGrid(const Size &bdsOutputSize)\n>  \t\t\t    << (int)bdsGrid_.height << \" << \" << (int)bdsGrid_.block_height_log2 << \")\";\n>  }\n>  \n> -void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n> +int IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>  {\n> -\tif (configInfo.entityControls.empty())\n> -\t\treturn;\n> +\tif (configInfo.entityControls.empty()) {\n> +\t\tLOG(IPAIPU3, Error) << \"No controls provided\";\n> +\t\treturn -ENODATA;\n> +\t}\n>  \n>  \tsensorInfo_ = configInfo.sensorInfo;\n>  \n> @@ -154,19 +156,19 @@ void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>  \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n>  \tif (itExp == ctrls_.end()) {\n>  \t\tLOG(IPAIPU3, Error) << \"Can't find exposure control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>  \t}\n>  \n>  \tconst auto itGain = ctrls_.find(V4L2_CID_ANALOGUE_GAIN);\n>  \tif (itGain == ctrls_.end()) {\n>  \t\tLOG(IPAIPU3, Error) << \"Can't find gain control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>  \t}\n>  \n>  \tconst auto itVBlank = ctrls_.find(V4L2_CID_VBLANK);\n>  \tif (itVBlank == ctrls_.end()) {\n>  \t\tLOG(IPAIPU3, Error) << \"Can't find VBLANK control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>  \t}\n>  \n>  \tminExposure_ = std::max(itExp->second.min().get<int32_t>(), 1);\n> @@ -188,6 +190,8 @@ void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>  \n>  \tagcAlgo_ = std::make_unique<IPU3Agc>();\n>  \tagcAlgo_->initialise(bdsGrid_, sensorInfo_);\n> +\n> +\treturn 0;\n>  }\n>  \n>  void IPAIPU3::mapBuffers(const std::vector<IPABuffer> &buffers)\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index b986bb7035fa..87f6bac83927 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -642,7 +642,11 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n>  \tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n>  \tconfigInfo.iif = config->imguConfig().iif;\n>  \n> -\tdata->ipa_->configure(configInfo);\n> +\tret = data->ipa_->configure(configInfo);\n> +\tif (ret) {\n> +\t\tLOG(IPU3, Error) << \"Failed to configure IPA\";\n> +\t\treturn ret;\n> +\t}\n>  \n>  \treturn 0;\n>  }\n> -- \n> 2.30.2\n>","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 7B496BD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 14 Jun 2021 03:44:59 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C94E068931;\n\tMon, 14 Jun 2021 05:44:58 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 10FA660297\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 14 Jun 2021 05:44:44 +0200 (CEST)","from pyrite.rasen.tech (unknown\n\t[IPv6:2400:4051:61:600:2c71:1b79:d06d:5032])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C82688C4;\n\tMon, 14 Jun 2021 05:44:41 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Ejx9rwGn\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1623642283;\n\tbh=cSmKU2HRJG6p+ugzmShznw+a1vWK2EeHEbkmB+RVjlU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Ejx9rwGnmb+WNuOE7qhVTU0h7YgU4ugZOnnPt2YawYh9Gt7pFj1hmk5Bu06RWrkwP\n\txPox/aDWW1kgCaMYQcJNNO7WJ2hwdblzJp93Rt9Hqj12Tu5eHCPUaF6SpIxM23W5ep\n\tRuCbEanETIeJlvDvTggyVdemBTVFVtwqb76Zmunc=","Date":"Mon, 14 Jun 2021 12:44:35 +0900","From":"paul.elder@ideasonboard.com","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20210614034435.GC940767@pyrite.rasen.tech>","References":"<20210611125239.1021944-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20210611125239.1021944-1-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: Support return values from\n\tconfigure()","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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17521,"web_url":"https://patchwork.libcamera.org/comment/17521/","msgid":"<d09ee85e-82a9-0fe6-71e9-4566013d045b@ideasonboard.com>","date":"2021-06-14T05:34:05","subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: Support return values from\n\tconfigure()","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Kieran\n\nOn 6/11/21 6:22 PM, Kieran Bingham wrote:\n> The IPU3 IPA interface does not define a return value from configure().\n> This prevents errors from being reported back to the pipeline handler\n> when they occur in the IPA.\n>\n> Update the IPU3 IPA interface and add return values to the checks in\n> IPAIPU3::configure() accordingly\ns/accordingly/accordingly./\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n>   include/libcamera/ipa/ipu3.mojom     |  2 +-\n>   src/ipa/ipu3/ipu3.cpp                | 18 +++++++++++-------\n>   src/libcamera/pipeline/ipu3/ipu3.cpp |  6 +++++-\n>   3 files changed, 17 insertions(+), 9 deletions(-)\n>\n> diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> index 000c494dbff9..911a3a072464 100644\n> --- a/include/libcamera/ipa/ipu3.mojom\n> +++ b/include/libcamera/ipa/ipu3.mojom\n> @@ -42,7 +42,7 @@ interface IPAIPU3Interface {\n>   \tstart() => (int32 ret);\n>   \tstop();\n>   \n> -\tconfigure(IPAConfigInfo configInfo) => ();\n> +\tconfigure(IPAConfigInfo configInfo) => (int32 ret);\n>   \n>   \tmapBuffers(array<libcamera.IPABuffer> buffers);\n>   \tunmapBuffers(array<uint32> ids);\n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index 415ea9e58cf4..8b4c7351e9db 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -43,7 +43,7 @@ public:\n>   \tint start() override;\n>   \tvoid stop() override {}\n>   \n> -\tvoid configure(const IPAConfigInfo &configInfo) override;\n> +\tint configure(const IPAConfigInfo &configInfo) override;\n>   \n>   \tvoid mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>   \tvoid unmapBuffers(const std::vector<unsigned int> &ids) override;\n> @@ -142,10 +142,12 @@ void IPAIPU3::calculateBdsGrid(const Size &bdsOutputSize)\n>   \t\t\t    << (int)bdsGrid_.height << \" << \" << (int)bdsGrid_.block_height_log2 << \")\";\n>   }\n>   \n> -void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n> +int IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>   {\n> -\tif (configInfo.entityControls.empty())\n> -\t\treturn;\n> +\tif (configInfo.entityControls.empty()) {\n> +\t\tLOG(IPAIPU3, Error) << \"No controls provided\";\n> +\t\treturn -ENODATA;\n> +\t}\n>   \n>   \tsensorInfo_ = configInfo.sensorInfo;\n>   \n> @@ -154,19 +156,19 @@ void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>   \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n>   \tif (itExp == ctrls_.end()) {\n>   \t\tLOG(IPAIPU3, Error) << \"Can't find exposure control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>   \t}\n>   \n>   \tconst auto itGain = ctrls_.find(V4L2_CID_ANALOGUE_GAIN);\n>   \tif (itGain == ctrls_.end()) {\n>   \t\tLOG(IPAIPU3, Error) << \"Can't find gain control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>   \t}\n>   \n>   \tconst auto itVBlank = ctrls_.find(V4L2_CID_VBLANK);\n>   \tif (itVBlank == ctrls_.end()) {\n>   \t\tLOG(IPAIPU3, Error) << \"Can't find VBLANK control\";\n> -\t\treturn;\n> +\t\treturn -EINVAL;\n>   \t}\n>   \n>   \tminExposure_ = std::max(itExp->second.min().get<int32_t>(), 1);\n> @@ -188,6 +190,8 @@ void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>   \n>   \tagcAlgo_ = std::make_unique<IPU3Agc>();\n>   \tagcAlgo_->initialise(bdsGrid_, sensorInfo_);\n> +\n> +\treturn 0;\n>   }\n>   \n>   void IPAIPU3::mapBuffers(const std::vector<IPABuffer> &buffers)\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index b986bb7035fa..87f6bac83927 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -642,7 +642,11 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n>   \tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n>   \tconfigInfo.iif = config->imguConfig().iif;\n>   \n> -\tdata->ipa_->configure(configInfo);\n> +\tret = data->ipa_->configure(configInfo);\n> +\tif (ret) {\n> +\t\tLOG(IPU3, Error) << \"Failed to configure IPA\";\n> +\t\treturn ret;\n> +\t}\n>   \n>   \treturn 0;\n>   }","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 9DBE2C3216\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 14 Jun 2021 05:34:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DEF826892F;\n\tMon, 14 Jun 2021 07:34:16 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0B33E60297\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 14 Jun 2021 07:34:15 +0200 (CEST)","from [IPv6:2409:4041:2e94:3db4:7e89:80d1:329b:4115] (unknown\n\t[IPv6:2409:4041:2e94:3db4:7e89:80d1:329b:4115])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 20B098C4;\n\tMon, 14 Jun 2021 07:34:12 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"nQcubl34\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1623648854;\n\tbh=Hw2Ep9SO4edGNWp6LsAVM2dlBqIpYiF9VcSbeoPz26o=;\n\th=Subject:To:References:From:Date:In-Reply-To:From;\n\tb=nQcubl343wvUt4eqBzz0SJ2sbssMTtWQ8IYUKf4+FbFCu84C4AN2PFsSM8iKgzBXZ\n\tdWDYQYSPux/3j7KE2flzg5xOez8YGo5ngxh8D3tLXO45F2NsQ4JO5arEEiYSvR9xLJ\n\tsI2HopqgI17YNdJM8PyLV9ZYPNUHdpnCNnfkJp3g=","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>,\n\tlibcamera devel <libcamera-devel@lists.libcamera.org>,\n\tJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","References":"<20210611125239.1021944-1-kieran.bingham@ideasonboard.com>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<d09ee85e-82a9-0fe6-71e9-4566013d045b@ideasonboard.com>","Date":"Mon, 14 Jun 2021 11:04:05 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101\n\tThunderbird/78.10.2","MIME-Version":"1.0","In-Reply-To":"<20210611125239.1021944-1-kieran.bingham@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"7bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: Support return values from\n\tconfigure()","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>"}}]