[{"id":17151,"web_url":"https://patchwork.libcamera.org/comment/17151/","msgid":"<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>","date":"2021-05-24T01:00:01","subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Umang,\n\nThank you for the patch.\n\nOn Fri, May 21, 2021 at 06:58:22PM +0530, Umang Jain wrote:\n> IPAConfigInfo is a consolidated data structure passed from IPU3\n> pipeline-handler to IPU3 IPA. The structure can be extended with\n> additional parameters to accommodate the requirements of multiple\n> IPU3 IPA modules.\n> \n> Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well.\n> \n> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> ---\n>  include/libcamera/ipa/ipu3.mojom     | 10 ++++++++--\n>  src/ipa/ipu3/ipu3.cpp                | 14 ++++++--------\n>  src/libcamera/pipeline/ipu3/ipu3.cpp | 10 +++++++---\n>  3 files changed, 21 insertions(+), 13 deletions(-)\n> \n> diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> index 9e3cd885..6b6b431f 100644\n> --- a/include/libcamera/ipa/ipu3.mojom\n> +++ b/include/libcamera/ipa/ipu3.mojom\n> @@ -30,13 +30,19 @@ struct IPU3Action {\n>  \tlibcamera.ControlList controls;\n>  };\n>  \n> +struct IPAConfigInfo {\n> +\tlibcamera.IPACameraSensorInfo sensorInfo;\n> +\tmap<uint32, ControlInfoMap> entityControls;\n\nShould this be libcamera.ControlInfoMap ? Paul, what's the rule for the\n'libcamera.' namespace prefix ?\n\nWith this address (if needed),\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\tlibcamera.Size bdsOutputSize;\n> +\tlibcamera.Size iif;\n> +};\n> +\n>  interface IPAIPU3Interface {\n>  \tinit(libcamera.IPASettings settings) => (int32 ret);\n>  \tstart() => (int32 ret);\n>  \tstop();\n>  \n> -\tconfigure(map<uint32, libcamera.ControlInfoMap> entityControls,\n> -\t\t  libcamera.Size bdsOutputSize) => ();\n> +\tconfigure(IPAConfigInfo configInfo) => ();\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 f5343547..769c24d3 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -43,8 +43,7 @@ public:\n>  \tint start() override;\n>  \tvoid stop() override {}\n>  \n> -\tvoid configure(const std::map<uint32_t, ControlInfoMap> &entityControls,\n> -\t\t       const Size &bdsOutputSize) override;\n> +\tvoid 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> @@ -139,13 +138,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 std::map<uint32_t, ControlInfoMap> &entityControls,\n> -\t\t\tconst Size &bdsOutputSize)\n> +void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>  {\n> -\tif (entityControls.empty())\n> +\tif (configInfo.entityControls.empty())\n>  \t\treturn;\n>  \n> -\tctrls_ = entityControls.at(0);\n> +\tctrls_ = configInfo.entityControls.at(0);\n>  \n>  \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n>  \tif (itExp == ctrls_.end()) {\n> @@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls\n>  \n>  \tparams_ = {};\n>  \n> -\tcalculateBdsGrid(bdsOutputSize);\n> +\tcalculateBdsGrid(configInfo.bdsOutputSize);\n>  \n>  \tawbAlgo_ = std::make_unique<IPU3Awb>();\n> -\tawbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);\n> +\tawbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);\n>  \n>  \tagcAlgo_ = std::make_unique<IPU3Agc>();\n>  \tagcAlgo_->initialise(bdsGrid_);\n> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> index 98c6160f..5b15ca90 100644\n> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> @@ -633,9 +633,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n>  \t\treturn ret;\n>  \t}\n>  \n> -\tstd::map<uint32_t, ControlInfoMap> entityControls;\n> -\tentityControls.emplace(0, data->cio2_.sensor()->controls());\n> -\tdata->ipa_->configure(entityControls, config->imguConfig().bds);\n> +\tipa::ipu3::IPAConfigInfo configInfo;\n> +\tconfigInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());\n> +\tconfigInfo.sensorInfo = sensorInfo;\n> +\tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n> +\tconfigInfo.iif = config->imguConfig().iif;\n> +\n> +\tdata->ipa_->configure(configInfo);\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 69C3DC3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 01:00:08 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 15CE26891B;\n\tMon, 24 May 2021 03:00:07 +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 094446050F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 03:00:05 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 4BFBD476;\n\tMon, 24 May 2021 03:00:04 +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=\"LZC3VWAm\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621818004;\n\tbh=avLJJYilFfMcVqirKwlhGz8ODUQy2qSzkCVuHqfWYuc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=LZC3VWAmYS8cuQmhdEeGbPgHmkEgffDWj+AcrApgTLniuhY7LulnrShOwjFKBpsn4\n\tSD3ZiqUh+5BRxQUtQuUQd52ng8ceGn6MQoGiTETtng9V0QKNWN0qB0nx3Bu6loTvC7\n\tvGZM+vIRuejFUlGw2vRrzq5U3fB1NaAFqFh3/+fA=","Date":"Mon, 24 May 2021 04:00:01 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>","References":"<20210521132823.322076-1-umang.jain@ideasonboard.com>\n\t<20210521132823.322076-6-umang.jain@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210521132823.322076-6-umang.jain@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17172,"web_url":"https://patchwork.libcamera.org/comment/17172/","msgid":"<20210524054354.GJ902042@pyrite.rasen.tech>","date":"2021-05-24T05:43:54","subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Umang and Laurent,\n\nOn Mon, May 24, 2021 at 04:00:01AM +0300, Laurent Pinchart wrote:\n> Hi Umang,\n> \n> Thank you for the patch.\n> \n> On Fri, May 21, 2021 at 06:58:22PM +0530, Umang Jain wrote:\n> > IPAConfigInfo is a consolidated data structure passed from IPU3\n> > pipeline-handler to IPU3 IPA. The structure can be extended with\n> > additional parameters to accommodate the requirements of multiple\n> > IPU3 IPA modules.\n> > \n> > Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well.\n> > \n> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> > ---\n> >  include/libcamera/ipa/ipu3.mojom     | 10 ++++++++--\n> >  src/ipa/ipu3/ipu3.cpp                | 14 ++++++--------\n> >  src/libcamera/pipeline/ipu3/ipu3.cpp | 10 +++++++---\n> >  3 files changed, 21 insertions(+), 13 deletions(-)\n> > \n> > diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> > index 9e3cd885..6b6b431f 100644\n> > --- a/include/libcamera/ipa/ipu3.mojom\n> > +++ b/include/libcamera/ipa/ipu3.mojom\n> > @@ -30,13 +30,19 @@ struct IPU3Action {\n> >  \tlibcamera.ControlList controls;\n> >  };\n> >  \n> > +struct IPAConfigInfo {\n> > +\tlibcamera.IPACameraSensorInfo sensorInfo;\n> > +\tmap<uint32, ControlInfoMap> entityControls;\n> \n> Should this be libcamera.ControlInfoMap ? Paul, what's the rule for the\n> 'libcamera.' namespace prefix ?\n\nHere it's optional.\n\nThe code generator doesn't actually need the libcamera prefix anywhere\n(because all generated files are in the libcamera namespace anyway), but\nthe mojo parser needs it for top-level types.\n\n\nPaul\n\n> \n> With this address (if needed),\n> \n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> \n> > +\tlibcamera.Size bdsOutputSize;\n> > +\tlibcamera.Size iif;\n> > +};\n> > +\n> >  interface IPAIPU3Interface {\n> >  \tinit(libcamera.IPASettings settings) => (int32 ret);\n> >  \tstart() => (int32 ret);\n> >  \tstop();\n> >  \n> > -\tconfigure(map<uint32, libcamera.ControlInfoMap> entityControls,\n> > -\t\t  libcamera.Size bdsOutputSize) => ();\n> > +\tconfigure(IPAConfigInfo configInfo) => ();\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 f5343547..769c24d3 100644\n> > --- a/src/ipa/ipu3/ipu3.cpp\n> > +++ b/src/ipa/ipu3/ipu3.cpp\n> > @@ -43,8 +43,7 @@ public:\n> >  \tint start() override;\n> >  \tvoid stop() override {}\n> >  \n> > -\tvoid configure(const std::map<uint32_t, ControlInfoMap> &entityControls,\n> > -\t\t       const Size &bdsOutputSize) override;\n> > +\tvoid 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> > @@ -139,13 +138,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 std::map<uint32_t, ControlInfoMap> &entityControls,\n> > -\t\t\tconst Size &bdsOutputSize)\n> > +void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n> >  {\n> > -\tif (entityControls.empty())\n> > +\tif (configInfo.entityControls.empty())\n> >  \t\treturn;\n> >  \n> > -\tctrls_ = entityControls.at(0);\n> > +\tctrls_ = configInfo.entityControls.at(0);\n> >  \n> >  \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n> >  \tif (itExp == ctrls_.end()) {\n> > @@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls\n> >  \n> >  \tparams_ = {};\n> >  \n> > -\tcalculateBdsGrid(bdsOutputSize);\n> > +\tcalculateBdsGrid(configInfo.bdsOutputSize);\n> >  \n> >  \tawbAlgo_ = std::make_unique<IPU3Awb>();\n> > -\tawbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);\n> > +\tawbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);\n> >  \n> >  \tagcAlgo_ = std::make_unique<IPU3Agc>();\n> >  \tagcAlgo_->initialise(bdsGrid_);\n> > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > index 98c6160f..5b15ca90 100644\n> > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > @@ -633,9 +633,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n> >  \t\treturn ret;\n> >  \t}\n> >  \n> > -\tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > -\tentityControls.emplace(0, data->cio2_.sensor()->controls());\n> > -\tdata->ipa_->configure(entityControls, config->imguConfig().bds);\n> > +\tipa::ipu3::IPAConfigInfo configInfo;\n> > +\tconfigInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());\n> > +\tconfigInfo.sensorInfo = sensorInfo;\n> > +\tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n> > +\tconfigInfo.iif = config->imguConfig().iif;\n> > +\n> > +\tdata->ipa_->configure(configInfo);\n> >  \n> >  \treturn 0;\n> >  }\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 18D2FC3201\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 05:44:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7E1256891B;\n\tMon, 24 May 2021 07:44:02 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B27EA602AD\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 07:44:01 +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 DCD82476;\n\tMon, 24 May 2021 07:43:59 +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=\"mALxMI8b\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621835041;\n\tbh=cbj8FnKWmUex0obQZmJnYQlGOnMsSe/kQDPeZ26ssKY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=mALxMI8bEauHFVpgEYR5w4mf2wZoC2XBqSdnD87IBKFaQAxd+7MzoOm3UAzON8XVy\n\tnjbVhuZDHXZr+m9BDnN8AOnlCzad0cuEpcPuVPZxlxx1G9SuU5sHNwtuU+eYA0TUuv\n\twlTkpNShlfZVjxTpBjQ5o6q/qHVjvieWyqKRSwWc=","Date":"Mon, 24 May 2021 14:43:54 +0900","From":"paul.elder@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210524054354.GJ902042@pyrite.rasen.tech>","References":"<20210521132823.322076-1-umang.jain@ideasonboard.com>\n\t<20210521132823.322076-6-umang.jain@ideasonboard.com>\n\t<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17216,"web_url":"https://patchwork.libcamera.org/comment/17216/","msgid":"<YKwOPib055wXkRnb@pendragon.ideasonboard.com>","date":"2021-05-24T20:36:14","subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Paul,\n\nOn Mon, May 24, 2021 at 02:43:54PM +0900, paul.elder@ideasonboard.com wrote:\n> On Mon, May 24, 2021 at 04:00:01AM +0300, Laurent Pinchart wrote:\n> > On Fri, May 21, 2021 at 06:58:22PM +0530, Umang Jain wrote:\n> > > IPAConfigInfo is a consolidated data structure passed from IPU3\n> > > pipeline-handler to IPU3 IPA. The structure can be extended with\n> > > additional parameters to accommodate the requirements of multiple\n> > > IPU3 IPA modules.\n> > > \n> > > Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well.\n> > > \n> > > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> > > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> > > ---\n> > >  include/libcamera/ipa/ipu3.mojom     | 10 ++++++++--\n> > >  src/ipa/ipu3/ipu3.cpp                | 14 ++++++--------\n> > >  src/libcamera/pipeline/ipu3/ipu3.cpp | 10 +++++++---\n> > >  3 files changed, 21 insertions(+), 13 deletions(-)\n> > > \n> > > diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> > > index 9e3cd885..6b6b431f 100644\n> > > --- a/include/libcamera/ipa/ipu3.mojom\n> > > +++ b/include/libcamera/ipa/ipu3.mojom\n> > > @@ -30,13 +30,19 @@ struct IPU3Action {\n> > >  \tlibcamera.ControlList controls;\n> > >  };\n> > >  \n> > > +struct IPAConfigInfo {\n> > > +\tlibcamera.IPACameraSensorInfo sensorInfo;\n> > > +\tmap<uint32, ControlInfoMap> entityControls;\n> > \n> > Should this be libcamera.ControlInfoMap ? Paul, what's the rule for the\n> > 'libcamera.' namespace prefix ?\n> \n> Here it's optional.\n> \n> The code generator doesn't actually need the libcamera prefix anywhere\n> (because all generated files are in the libcamera namespace anyway), but\n> the mojo parser needs it for top-level types.\n\nWhat do you mean by \"top-level types\" ?\n\n> > With this address (if needed),\n> > \n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > \n> > > +\tlibcamera.Size bdsOutputSize;\n> > > +\tlibcamera.Size iif;\n> > > +};\n> > > +\n> > >  interface IPAIPU3Interface {\n> > >  \tinit(libcamera.IPASettings settings) => (int32 ret);\n> > >  \tstart() => (int32 ret);\n> > >  \tstop();\n> > >  \n> > > -\tconfigure(map<uint32, libcamera.ControlInfoMap> entityControls,\n> > > -\t\t  libcamera.Size bdsOutputSize) => ();\n> > > +\tconfigure(IPAConfigInfo configInfo) => ();\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 f5343547..769c24d3 100644\n> > > --- a/src/ipa/ipu3/ipu3.cpp\n> > > +++ b/src/ipa/ipu3/ipu3.cpp\n> > > @@ -43,8 +43,7 @@ public:\n> > >  \tint start() override;\n> > >  \tvoid stop() override {}\n> > >  \n> > > -\tvoid configure(const std::map<uint32_t, ControlInfoMap> &entityControls,\n> > > -\t\t       const Size &bdsOutputSize) override;\n> > > +\tvoid 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> > > @@ -139,13 +138,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 std::map<uint32_t, ControlInfoMap> &entityControls,\n> > > -\t\t\tconst Size &bdsOutputSize)\n> > > +void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n> > >  {\n> > > -\tif (entityControls.empty())\n> > > +\tif (configInfo.entityControls.empty())\n> > >  \t\treturn;\n> > >  \n> > > -\tctrls_ = entityControls.at(0);\n> > > +\tctrls_ = configInfo.entityControls.at(0);\n> > >  \n> > >  \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n> > >  \tif (itExp == ctrls_.end()) {\n> > > @@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls\n> > >  \n> > >  \tparams_ = {};\n> > >  \n> > > -\tcalculateBdsGrid(bdsOutputSize);\n> > > +\tcalculateBdsGrid(configInfo.bdsOutputSize);\n> > >  \n> > >  \tawbAlgo_ = std::make_unique<IPU3Awb>();\n> > > -\tawbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);\n> > > +\tawbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);\n> > >  \n> > >  \tagcAlgo_ = std::make_unique<IPU3Agc>();\n> > >  \tagcAlgo_->initialise(bdsGrid_);\n> > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > index 98c6160f..5b15ca90 100644\n> > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > @@ -633,9 +633,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n> > >  \t\treturn ret;\n> > >  \t}\n> > >  \n> > > -\tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > > -\tentityControls.emplace(0, data->cio2_.sensor()->controls());\n> > > -\tdata->ipa_->configure(entityControls, config->imguConfig().bds);\n> > > +\tipa::ipu3::IPAConfigInfo configInfo;\n> > > +\tconfigInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());\n> > > +\tconfigInfo.sensorInfo = sensorInfo;\n> > > +\tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n> > > +\tconfigInfo.iif = config->imguConfig().iif;\n> > > +\n> > > +\tdata->ipa_->configure(configInfo);\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 6E5F4C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 May 2021 20:36:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 923DC68919;\n\tMon, 24 May 2021 22:36:21 +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 BB2C5601AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 May 2021 22:36:20 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 28F3E45E;\n\tMon, 24 May 2021 22:36:20 +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=\"P1DfEyTH\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621888580;\n\tbh=1PkvIs+bP0V7okqXrtgxaFWnDqGsft4i910TQLaIuFc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=P1DfEyTHwrQN2c12u1j594z8BCvvVe3owAWoVshdKbc6Bl13obsfnrMfsaAO+Os79\n\t86Xq3IAn0vQBEeGWbZpaiAP0jkFn6vFXi90+k2ZaOh8m0aoLEMXxKefr1UYaGn6qL0\n\taorKT21z86op8Ro2M9g/W9z3mSwerQlDmQKM+thc=","Date":"Mon, 24 May 2021 23:36:14 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"paul.elder@ideasonboard.com","Message-ID":"<YKwOPib055wXkRnb@pendragon.ideasonboard.com>","References":"<20210521132823.322076-1-umang.jain@ideasonboard.com>\n\t<20210521132823.322076-6-umang.jain@ideasonboard.com>\n\t<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>\n\t<20210524054354.GJ902042@pyrite.rasen.tech>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20210524054354.GJ902042@pyrite.rasen.tech>","Subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17233,"web_url":"https://patchwork.libcamera.org/comment/17233/","msgid":"<20210525090945.GA1189297@pyrite.rasen.tech>","date":"2021-05-25T09:09:45","subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/people/17/","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"content":"Hi Laurent,\n\nOn Mon, May 24, 2021 at 11:36:14PM +0300, Laurent Pinchart wrote:\n> Hi Paul,\n> \n> On Mon, May 24, 2021 at 02:43:54PM +0900, paul.elder@ideasonboard.com wrote:\n> > On Mon, May 24, 2021 at 04:00:01AM +0300, Laurent Pinchart wrote:\n> > > On Fri, May 21, 2021 at 06:58:22PM +0530, Umang Jain wrote:\n> > > > IPAConfigInfo is a consolidated data structure passed from IPU3\n> > > > pipeline-handler to IPU3 IPA. The structure can be extended with\n> > > > additional parameters to accommodate the requirements of multiple\n> > > > IPU3 IPA modules.\n> > > > \n> > > > Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well.\n> > > > \n> > > > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n> > > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > > Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> > > > Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n> > > > ---\n> > > >  include/libcamera/ipa/ipu3.mojom     | 10 ++++++++--\n> > > >  src/ipa/ipu3/ipu3.cpp                | 14 ++++++--------\n> > > >  src/libcamera/pipeline/ipu3/ipu3.cpp | 10 +++++++---\n> > > >  3 files changed, 21 insertions(+), 13 deletions(-)\n> > > > \n> > > > diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n> > > > index 9e3cd885..6b6b431f 100644\n> > > > --- a/include/libcamera/ipa/ipu3.mojom\n> > > > +++ b/include/libcamera/ipa/ipu3.mojom\n> > > > @@ -30,13 +30,19 @@ struct IPU3Action {\n> > > >  \tlibcamera.ControlList controls;\n> > > >  };\n> > > >  \n> > > > +struct IPAConfigInfo {\n> > > > +\tlibcamera.IPACameraSensorInfo sensorInfo;\n> > > > +\tmap<uint32, ControlInfoMap> entityControls;\n> > > \n> > > Should this be libcamera.ControlInfoMap ? Paul, what's the rule for the\n> > > 'libcamera.' namespace prefix ?\n> > \n> > Here it's optional.\n> > \n> > The code generator doesn't actually need the libcamera prefix anywhere\n> > (because all generated files are in the libcamera namespace anyway), but\n> > the mojo parser needs it for top-level types.\n> \n> What do you mean by \"top-level types\" ?\n\nTypes that are parameters of functions or that are members of structs.\n\n\nPaul\n\n> \n> > > With this address (if needed),\n> > > \n> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > > \n> > > > +\tlibcamera.Size bdsOutputSize;\n> > > > +\tlibcamera.Size iif;\n> > > > +};\n> > > > +\n> > > >  interface IPAIPU3Interface {\n> > > >  \tinit(libcamera.IPASettings settings) => (int32 ret);\n> > > >  \tstart() => (int32 ret);\n> > > >  \tstop();\n> > > >  \n> > > > -\tconfigure(map<uint32, libcamera.ControlInfoMap> entityControls,\n> > > > -\t\t  libcamera.Size bdsOutputSize) => ();\n> > > > +\tconfigure(IPAConfigInfo configInfo) => ();\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 f5343547..769c24d3 100644\n> > > > --- a/src/ipa/ipu3/ipu3.cpp\n> > > > +++ b/src/ipa/ipu3/ipu3.cpp\n> > > > @@ -43,8 +43,7 @@ public:\n> > > >  \tint start() override;\n> > > >  \tvoid stop() override {}\n> > > >  \n> > > > -\tvoid configure(const std::map<uint32_t, ControlInfoMap> &entityControls,\n> > > > -\t\t       const Size &bdsOutputSize) override;\n> > > > +\tvoid 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> > > > @@ -139,13 +138,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 std::map<uint32_t, ControlInfoMap> &entityControls,\n> > > > -\t\t\tconst Size &bdsOutputSize)\n> > > > +void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n> > > >  {\n> > > > -\tif (entityControls.empty())\n> > > > +\tif (configInfo.entityControls.empty())\n> > > >  \t\treturn;\n> > > >  \n> > > > -\tctrls_ = entityControls.at(0);\n> > > > +\tctrls_ = configInfo.entityControls.at(0);\n> > > >  \n> > > >  \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n> > > >  \tif (itExp == ctrls_.end()) {\n> > > > @@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls\n> > > >  \n> > > >  \tparams_ = {};\n> > > >  \n> > > > -\tcalculateBdsGrid(bdsOutputSize);\n> > > > +\tcalculateBdsGrid(configInfo.bdsOutputSize);\n> > > >  \n> > > >  \tawbAlgo_ = std::make_unique<IPU3Awb>();\n> > > > -\tawbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);\n> > > > +\tawbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);\n> > > >  \n> > > >  \tagcAlgo_ = std::make_unique<IPU3Agc>();\n> > > >  \tagcAlgo_->initialise(bdsGrid_);\n> > > > diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > index 98c6160f..5b15ca90 100644\n> > > > --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n> > > > @@ -633,9 +633,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n> > > >  \t\treturn ret;\n> > > >  \t}\n> > > >  \n> > > > -\tstd::map<uint32_t, ControlInfoMap> entityControls;\n> > > > -\tentityControls.emplace(0, data->cio2_.sensor()->controls());\n> > > > -\tdata->ipa_->configure(entityControls, config->imguConfig().bds);\n> > > > +\tipa::ipu3::IPAConfigInfo configInfo;\n> > > > +\tconfigInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());\n> > > > +\tconfigInfo.sensorInfo = sensorInfo;\n> > > > +\tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n> > > > +\tconfigInfo.iif = config->imguConfig().iif;\n> > > > +\n> > > > +\tdata->ipa_->configure(configInfo);\n> > > >  \n> > > >  \treturn 0;\n> > > >  }\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 B4BCAC3202\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 May 2021 09:09:54 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 3657E68921;\n\tTue, 25 May 2021 11:09:54 +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 35BC2602AF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 May 2021 11:09:53 +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 68B4C344;\n\tTue, 25 May 2021 11:09:51 +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=\"KebtVrmE\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621933792;\n\tbh=nyPuuNz2MbI4iwLiMOYhuIlhC6M2ss2404g8RZeN76U=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=KebtVrmE7LS/zoB4yhRgm54vIns74NsQSXHEqxj9lCXDjnNQ/faZnE8SPIdpKsZHF\n\tHJ0u/amNquCyxANDtrpn1GXqEB75k/WHqdcFbbzaB7PNyuDCUEbyFkAxtohFgtgtNC\n\t6cthzD4BvGivv1R1QqQar5BOkx9V6YHMqLyeK/AA=","Date":"Tue, 25 May 2021 18:09:45 +0900","From":"paul.elder@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20210525090945.GA1189297@pyrite.rasen.tech>","References":"<20210521132823.322076-1-umang.jain@ideasonboard.com>\n\t<20210521132823.322076-6-umang.jain@ideasonboard.com>\n\t<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>\n\t<20210524054354.GJ902042@pyrite.rasen.tech>\n\t<YKwOPib055wXkRnb@pendragon.ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<YKwOPib055wXkRnb@pendragon.ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":17246,"web_url":"https://patchwork.libcamera.org/comment/17246/","msgid":"<41ba7bef-284c-e98e-18a0-4c90d09efa88@ideasonboard.com>","date":"2021-05-25T14:56:38","subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","submitter":{"id":86,"url":"https://patchwork.libcamera.org/api/people/86/","name":"Umang Jain","email":"umang.jain@ideasonboard.com"},"content":"Hi Paul,\n\nOn 5/25/21 2:39 PM, paul.elder@ideasonboard.com wrote:\n> Hi Laurent,\n>\n> On Mon, May 24, 2021 at 11:36:14PM +0300, Laurent Pinchart wrote:\n>> Hi Paul,\n>>\n>> On Mon, May 24, 2021 at 02:43:54PM +0900, paul.elder@ideasonboard.com wrote:\n>>> On Mon, May 24, 2021 at 04:00:01AM +0300, Laurent Pinchart wrote:\n>>>> On Fri, May 21, 2021 at 06:58:22PM +0530, Umang Jain wrote:\n>>>>> IPAConfigInfo is a consolidated data structure passed from IPU3\n>>>>> pipeline-handler to IPU3 IPA. The structure can be extended with\n>>>>> additional parameters to accommodate the requirements of multiple\n>>>>> IPU3 IPA modules.\n>>>>>\n>>>>> Adapt the in-tree IPU3 IPA to use IPAConfigInfo as well.\n>>>>>\n>>>>> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>\n>>>>> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n>>>>> Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n>>>>> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>\n>>>>> ---\n>>>>>   include/libcamera/ipa/ipu3.mojom     | 10 ++++++++--\n>>>>>   src/ipa/ipu3/ipu3.cpp                | 14 ++++++--------\n>>>>>   src/libcamera/pipeline/ipu3/ipu3.cpp | 10 +++++++---\n>>>>>   3 files changed, 21 insertions(+), 13 deletions(-)\n>>>>>\n>>>>> diff --git a/include/libcamera/ipa/ipu3.mojom b/include/libcamera/ipa/ipu3.mojom\n>>>>> index 9e3cd885..6b6b431f 100644\n>>>>> --- a/include/libcamera/ipa/ipu3.mojom\n>>>>> +++ b/include/libcamera/ipa/ipu3.mojom\n>>>>> @@ -30,13 +30,19 @@ struct IPU3Action {\n>>>>>   \tlibcamera.ControlList controls;\n>>>>>   };\n>>>>>   \n>>>>> +struct IPAConfigInfo {\n>>>>> +\tlibcamera.IPACameraSensorInfo sensorInfo;\n>>>>> +\tmap<uint32, ControlInfoMap> entityControls;\n>>>> Should this be libcamera.ControlInfoMap ? Paul, what's the rule for the\n>>>> 'libcamera.' namespace prefix ?\n>>> Here it's optional.\n>>>\n>>> The code generator doesn't actually need the libcamera prefix anywhere\n>>> (because all generated files are in the libcamera namespace anyway), but\n>>> the mojo parser needs it for top-level types.\n>> What do you mean by \"top-level types\" ?\n> Types that are parameters of functions or that are members of structs.\nOmitting `libcamera.` for entityControls introduced a FATAL breakage \nwhile running the IPA from master:\n\n[0:52:11.842213069] [7830] FATAL IPADataSerializer \nipa_data_serializer.cpp:437 ControlSerializer not provided for \nserialization of ControlInfoMap\n\nWeird that it never was seen before by me (or Kieran (assuming that \nthese patches were applied to his tree in development for testing Intel \nIPA))  :-/\n\nThe below diff fixes the FATAL error:\n\ndiff --git a/include/libcamera/ipa/ipu3.mojom \nb/include/libcamera/ipa/ipu3.mojom\nindex 6b6b431f..32c046ad 100644\n--- a/include/libcamera/ipa/ipu3.mojom\n+++ b/include/libcamera/ipa/ipu3.mojom\n@@ -32,7 +32,7 @@ struct IPU3Action {\n\n  struct IPAConfigInfo {\n         libcamera.IPACameraSensorInfo sensorInfo;\n-       map<uint32, ControlInfoMap> entityControls;\n+       map<uint32, libcamera.ControlInfoMap> entityControls;\n         libcamera.Size bdsOutputSize;\n         libcamera.Size iif;\n\n\n>\n>\n> Paul\n>\n>>>> With this address (if needed),\n>>>>\n>>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>>>\n>>>>> +\tlibcamera.Size bdsOutputSize;\n>>>>> +\tlibcamera.Size iif;\n>>>>> +};\n>>>>> +\n>>>>>   interface IPAIPU3Interface {\n>>>>>   \tinit(libcamera.IPASettings settings) => (int32 ret);\n>>>>>   \tstart() => (int32 ret);\n>>>>>   \tstop();\n>>>>>   \n>>>>> -\tconfigure(map<uint32, libcamera.ControlInfoMap> entityControls,\n>>>>> -\t\t  libcamera.Size bdsOutputSize) => ();\n>>>>> +\tconfigure(IPAConfigInfo configInfo) => ();\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 f5343547..769c24d3 100644\n>>>>> --- a/src/ipa/ipu3/ipu3.cpp\n>>>>> +++ b/src/ipa/ipu3/ipu3.cpp\n>>>>> @@ -43,8 +43,7 @@ public:\n>>>>>   \tint start() override;\n>>>>>   \tvoid stop() override {}\n>>>>>   \n>>>>> -\tvoid configure(const std::map<uint32_t, ControlInfoMap> &entityControls,\n>>>>> -\t\t       const Size &bdsOutputSize) override;\n>>>>> +\tvoid 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>>>>> @@ -139,13 +138,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 std::map<uint32_t, ControlInfoMap> &entityControls,\n>>>>> -\t\t\tconst Size &bdsOutputSize)\n>>>>> +void IPAIPU3::configure(const IPAConfigInfo &configInfo)\n>>>>>   {\n>>>>> -\tif (entityControls.empty())\n>>>>> +\tif (configInfo.entityControls.empty())\n>>>>>   \t\treturn;\n>>>>>   \n>>>>> -\tctrls_ = entityControls.at(0);\n>>>>> +\tctrls_ = configInfo.entityControls.at(0);\n>>>>>   \n>>>>>   \tconst auto itExp = ctrls_.find(V4L2_CID_EXPOSURE);\n>>>>>   \tif (itExp == ctrls_.end()) {\n>>>>> @@ -169,10 +167,10 @@ void IPAIPU3::configure(const std::map<uint32_t, ControlInfoMap> &entityControls\n>>>>>   \n>>>>>   \tparams_ = {};\n>>>>>   \n>>>>> -\tcalculateBdsGrid(bdsOutputSize);\n>>>>> +\tcalculateBdsGrid(configInfo.bdsOutputSize);\n>>>>>   \n>>>>>   \tawbAlgo_ = std::make_unique<IPU3Awb>();\n>>>>> -\tawbAlgo_->initialise(params_, bdsOutputSize, bdsGrid_);\n>>>>> +\tawbAlgo_->initialise(params_, configInfo.bdsOutputSize, bdsGrid_);\n>>>>>   \n>>>>>   \tagcAlgo_ = std::make_unique<IPU3Agc>();\n>>>>>   \tagcAlgo_->initialise(bdsGrid_);\n>>>>> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>>>>> index 98c6160f..5b15ca90 100644\n>>>>> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp\n>>>>> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp\n>>>>> @@ -633,9 +633,13 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)\n>>>>>   \t\treturn ret;\n>>>>>   \t}\n>>>>>   \n>>>>> -\tstd::map<uint32_t, ControlInfoMap> entityControls;\n>>>>> -\tentityControls.emplace(0, data->cio2_.sensor()->controls());\n>>>>> -\tdata->ipa_->configure(entityControls, config->imguConfig().bds);\n>>>>> +\tipa::ipu3::IPAConfigInfo configInfo;\n>>>>> +\tconfigInfo.entityControls.emplace(0, data->cio2_.sensor()->controls());\n>>>>> +\tconfigInfo.sensorInfo = sensorInfo;\n>>>>> +\tconfigInfo.bdsOutputSize = config->imguConfig().bds;\n>>>>> +\tconfigInfo.iif = config->imguConfig().iif;\n>>>>> +\n>>>>> +\tdata->ipa_->configure(configInfo);\n>>>>>   \n>>>>>   \treturn 0;\n>>>>>   }\n>> -- \n>> Regards,\n>>\n>> Laurent Pinchart","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 2EB71C3200\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 25 May 2021 14:56:48 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6327E6891F;\n\tTue, 25 May 2021 16:56:47 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6A6136050E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 25 May 2021 16:56:45 +0200 (CEST)","from localhost.localdomain (unknown [103.251.226.203])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0CF76880;\n\tTue, 25 May 2021 16:56:42 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"nwl1xInG\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1621954604;\n\tbh=YZuL/1UQQqFJxzmkTXzCgUwBV2VB3Cndtv6/c7UVFy8=;\n\th=Subject:To:Cc:References:From:Date:In-Reply-To:From;\n\tb=nwl1xInG/fcuhM4tD4ibwitUoDfwuD+bQFjCLSz4v+ASRuPwH1uqml8EfGvHvQxZK\n\tiV+ArrCv1VUDeosaEqG7EvaBZpBspzsUQkbMR8av/DSdDNGjkTrOW0dLwKZekq6YUV\n\tZCAwLGghNpe8+6MB5Zl48jd/o5w4YURr827uAA8I=","To":"paul.elder@ideasonboard.com,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>","References":"<20210521132823.322076-1-umang.jain@ideasonboard.com>\n\t<20210521132823.322076-6-umang.jain@ideasonboard.com>\n\t<YKr6kUPKQjg77v/u@pendragon.ideasonboard.com>\n\t<20210524054354.GJ902042@pyrite.rasen.tech>\n\t<YKwOPib055wXkRnb@pendragon.ideasonboard.com>\n\t<20210525090945.GA1189297@pyrite.rasen.tech>","From":"Umang Jain <umang.jain@ideasonboard.com>","Message-ID":"<41ba7bef-284c-e98e-18a0-4c90d09efa88@ideasonboard.com>","Date":"Tue, 25 May 2021 20:26:38 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101\n\tThunderbird/68.11.0","MIME-Version":"1.0","In-Reply-To":"<20210525090945.GA1189297@pyrite.rasen.tech>","Content-Type":"text/plain; charset=utf-8; format=flowed","Content-Transfer-Encoding":"8bit","Content-Language":"en-US","Subject":"Re: [libcamera-devel] [PATCH v3 5/6] ipa: ipu3: Introduce\n\tIPAConfigInfo in IPC","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]