[{"id":22416,"web_url":"https://patchwork.libcamera.org/comment/22416/","msgid":"<164807657435.1103026.2519563310730315010@Monstersaurus>","date":"2022-03-23T23:02:54","subject":"Re: [libcamera-devel] [RFC PATCH v2 1/4] ipa: RPi: Move the IPA to\n\tthe ipa::RPi namespace","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jean-Michel Hautbois via libcamera-devel (2022-03-23 16:01:42)\n> Simplify name-spacing of the RPi components by placing it in the\n> ipa::RPi namespace directly. It also aligns the RPi IPA with the other\n> ones (ipa::ipu3 and ipa::rkisp1) which already have this applied.\n> \n\nThis looks good to me.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> ---\n>  src/ipa/raspberrypi/raspberrypi.cpp | 42 ++++++++++++++++-------------\n>  1 file changed, 23 insertions(+), 19 deletions(-)\n> \n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 1bf4e270..cf4e6cab 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -74,7 +74,9 @@ constexpr Duration controllerMinFrameDuration = 1.0s / 30.0;\n>  \n>  LOG_DEFINE_CATEGORY(IPARPI)\n>  \n> -class IPARPi : public ipa::RPi::IPARPiInterface\n> +namespace ipa::RPi {\n> +\n> +class IPARPi : public IPARPiInterface\n>  {\n>  public:\n>         IPARPi()\n> @@ -86,23 +88,23 @@ public:\n>         ~IPARPi()\n>         {\n>                 if (lsTable_)\n> -                       munmap(lsTable_, ipa::RPi::MaxLsGridSize);\n> +                       munmap(lsTable_, MaxLsGridSize);\n>         }\n>  \n> -       int init(const IPASettings &settings, ipa::RPi::SensorConfig *sensorConfig) override;\n> -       void start(const ControlList &controls, ipa::RPi::StartConfig *startConfig) override;\n> +       int init(const IPASettings &settings, SensorConfig *sensorConfig) override;\n> +       void start(const ControlList &controls, StartConfig *startConfig) override;\n>         void stop() override {}\n>  \n>         int configure(const IPACameraSensorInfo &sensorInfo,\n>                       const std::map<unsigned int, IPAStream> &streamConfig,\n>                       const std::map<unsigned int, ControlInfoMap> &entityControls,\n> -                     const ipa::RPi::IPAConfig &data,\n> +                     const IPAConfig &data,\n>                       ControlList *controls) override;\n>         void mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>         void unmapBuffers(const std::vector<unsigned int> &ids) override;\n>         void signalStatReady(const uint32_t bufferId) override;\n>         void signalQueueRequest(const ControlList &controls) override;\n> -       void signalIspPrepare(const ipa::RPi::ISPConfig &data) override;\n> +       void signalIspPrepare(const ISPConfig &data) override;\n>  \n>  private:\n>         void setMode(const IPACameraSensorInfo &sensorInfo);\n> @@ -110,7 +112,7 @@ private:\n>         bool validateIspControls();\n>         void queueRequest(const ControlList &controls);\n>         void returnEmbeddedBuffer(unsigned int bufferId);\n> -       void prepareISP(const ipa::RPi::ISPConfig &data);\n> +       void prepareISP(const ISPConfig &data);\n>         void reportMetadata();\n>         void fillDeviceStatus(const ControlList &sensorControls);\n>         void processStats(unsigned int bufferId);\n> @@ -178,7 +180,7 @@ private:\n>         uint32_t maxSensorGainCode_;\n>  };\n>  \n> -int IPARPi::init(const IPASettings &settings, ipa::RPi::SensorConfig *sensorConfig)\n> +int IPARPi::init(const IPASettings &settings, SensorConfig *sensorConfig)\n>  {\n>         /*\n>          * Load the \"helper\" for this sensor. This tells us all the device specific stuff\n> @@ -212,7 +214,7 @@ int IPARPi::init(const IPASettings &settings, ipa::RPi::SensorConfig *sensorConf\n>         return 0;\n>  }\n>  \n> -void IPARPi::start(const ControlList &controls, ipa::RPi::StartConfig *startConfig)\n> +void IPARPi::start(const ControlList &controls, StartConfig *startConfig)\n>  {\n>         RPiController::Metadata metadata;\n>  \n> @@ -339,7 +341,7 @@ void IPARPi::setMode(const IPACameraSensorInfo &sensorInfo)\n>  int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,\n>                       [[maybe_unused]] const std::map<unsigned int, IPAStream> &streamConfig,\n>                       const std::map<unsigned int, ControlInfoMap> &entityControls,\n> -                     const ipa::RPi::IPAConfig &ipaConfig,\n> +                     const IPAConfig &ipaConfig,\n>                       ControlList *controls)\n>  {\n>         if (entityControls.size() != 2) {\n> @@ -374,14 +376,14 @@ int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,\n>         if (ipaConfig.lsTableHandle.isValid()) {\n>                 /* Remove any previous table, if there was one. */\n>                 if (lsTable_) {\n> -                       munmap(lsTable_, ipa::RPi::MaxLsGridSize);\n> +                       munmap(lsTable_, MaxLsGridSize);\n>                         lsTable_ = nullptr;\n>                 }\n>  \n>                 /* Map the LS table buffer into user space. */\n>                 lsTableHandle_ = std::move(ipaConfig.lsTableHandle);\n>                 if (lsTableHandle_.isValid()) {\n> -                       lsTable_ = mmap(nullptr, ipa::RPi::MaxLsGridSize, PROT_READ | PROT_WRITE,\n> +                       lsTable_ = mmap(nullptr, MaxLsGridSize, PROT_READ | PROT_WRITE,\n>                                         MAP_SHARED, lsTableHandle_.get(), 0);\n>  \n>                         if (lsTable_ == MAP_FAILED) {\n> @@ -446,7 +448,7 @@ void IPARPi::signalStatReady(uint32_t bufferId)\n>  \n>         reportMetadata();\n>  \n> -       statsMetadataComplete.emit(bufferId & ipa::RPi::MaskID, libcameraMetadata_);\n> +       statsMetadataComplete.emit(bufferId & MaskID, libcameraMetadata_);\n>  }\n>  \n>  void IPARPi::signalQueueRequest(const ControlList &controls)\n> @@ -454,7 +456,7 @@ void IPARPi::signalQueueRequest(const ControlList &controls)\n>         queueRequest(controls);\n>  }\n>  \n> -void IPARPi::signalIspPrepare(const ipa::RPi::ISPConfig &data)\n> +void IPARPi::signalIspPrepare(const ISPConfig &data)\n>  {\n>         /*\n>          * At start-up, or after a mode-switch, we may want to\n> @@ -465,7 +467,7 @@ void IPARPi::signalIspPrepare(const ipa::RPi::ISPConfig &data)\n>         frameCount_++;\n>  \n>         /* Ready to push the input buffer into the ISP. */\n> -       runIsp.emit(data.bayerBufferId & ipa::RPi::MaskID);\n> +       runIsp.emit(data.bayerBufferId & MaskID);\n>  }\n>  \n>  void IPARPi::reportMetadata()\n> @@ -927,10 +929,10 @@ void IPARPi::queueRequest(const ControlList &controls)\n>  \n>  void IPARPi::returnEmbeddedBuffer(unsigned int bufferId)\n>  {\n> -       embeddedComplete.emit(bufferId & ipa::RPi::MaskID);\n> +       embeddedComplete.emit(bufferId & MaskID);\n>  }\n>  \n> -void IPARPi::prepareISP(const ipa::RPi::ISPConfig &data)\n> +void IPARPi::prepareISP(const ISPConfig &data)\n>  {\n>         int64_t frameTimestamp = data.controls.get(controls::SensorTimestamp);\n>         RPiController::Metadata lastMetadata;\n> @@ -1316,7 +1318,7 @@ void IPARPi::applyLS(const struct AlscStatus *lsStatus, ControlList &ctrls)\n>                 .gain_format = GAIN_FORMAT_U4P10\n>         };\n>  \n> -       if (!lsTable_ || w * h * 4 * sizeof(uint16_t) > ipa::RPi::MaxLsGridSize) {\n> +       if (!lsTable_ || w * h * 4 * sizeof(uint16_t) > MaxLsGridSize) {\n>                 LOG(IPARPI, Error) << \"Do not have a correctly allocate lens shading table!\";\n>                 return;\n>         }\n> @@ -1376,6 +1378,8 @@ void IPARPi::resampleTable(uint16_t dest[], double const src[12][16],\n>         }\n>  }\n>  \n> +} /* namespace ipa::RPi */\n> +\n>  /*\n>   * External IPA module interface\n>   */\n> @@ -1389,7 +1393,7 @@ const struct IPAModuleInfo ipaModuleInfo = {\n>  \n>  IPAInterface *ipaCreate()\n>  {\n> -       return new IPARPi();\n> +       return new ipa::RPi::IPARPi();\n>  }\n>  \n>  } /* extern \"C\" */\n> -- \n> 2.32.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 E7592C0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 23 Mar 2022 23:02:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13793604DA;\n\tThu, 24 Mar 2022 00:02:58 +0100 (CET)","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 6BAC5604C5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 24 Mar 2022 00:02:56 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id F2CC312E9;\n\tThu, 24 Mar 2022 00:02:55 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1648076578;\n\tbh=QRfvfVqBFqa6Ahfye4H54YTYWaIBgxWf40Ff9msVc7w=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=bL/klteFx+IOfFmYXwZS4UyXpF+Sns4veW1uGUvnSzjsojg30PWnWZ7J2cdN0lpbC\n\tyCGJfBoLmxCX750h/Gs0gjsoLhPlztUhJz47XMyYiKFl3VHU60Q9DxIYoeSUBQJLII\n\tPRx1Yyce0hEZEd21iqT2erQkXaFNaWbStASKqSYcAFeBNKPz6HBymr2Jg9Gt9V4G57\n\to9iCFjCZT4+udDzPpGEllBzSXYgJXe/xV2SFwPDuDVS0TlSh4CicwZdt6glOnfoidQ\n\tjcZWd1s9SBEthQW9aBYLofkFj3aW3eC0NBubqcTT1HaYE3CzDcnKMGLfZY1uc33udD\n\tbKhg8sVWEKPjQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1648076576;\n\tbh=QRfvfVqBFqa6Ahfye4H54YTYWaIBgxWf40Ff9msVc7w=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=bHl++LDUqXI6+iXiaG/X+YHnmgtws5zSZXGTway8EdjjizCLzm+JcuYnR8FsX/+l5\n\tb2OFASyV1looIm3CplKigwZ4OqfBZq6f1LezAH7/M7YEjZgSuaC7dSJ6EpJ9nbFVQG\n\tRpwKQ0hqewevJsQLodFnwyf0D/2AYrS3Lr1FXa5M="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"bHl++LDU\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220323160145.90606-2-jeanmichel.hautbois@ideasonboard.com>","References":"<20220323160145.90606-1-jeanmichel.hautbois@ideasonboard.com>\n\t<20220323160145.90606-2-jeanmichel.hautbois@ideasonboard.com>","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Wed, 23 Mar 2022 23:02:54 +0000","Message-ID":"<164807657435.1103026.2519563310730315010@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [RFC PATCH v2 1/4] ipa: RPi: Move the IPA to\n\tthe ipa::RPi namespace","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":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":22425,"web_url":"https://patchwork.libcamera.org/comment/22425/","msgid":"<CAEmqJPqak4=RCyCadwVggRPqG43k9PgUcgi9oW=mkWQonOR2Ow@mail.gmail.com>","date":"2022-03-24T09:59:20","subject":"Re: [libcamera-devel] [RFC PATCH v2 1/4] ipa: RPi: Move the IPA to\n\tthe ipa::RPi namespace","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi Jean-Michel,\n\nThank you for your work.\n\nOn Wed, 23 Mar 2022 at 16:01, Jean-Michel Hautbois via libcamera-devel <\nlibcamera-devel@lists.libcamera.org> wrote:\n\n> Simplify name-spacing of the RPi components by placing it in the\n> ipa::RPi namespace directly. It also aligns the RPi IPA with the other\n> ones (ipa::ipu3 and ipa::rkisp1) which already have this applied.\n>\n> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n>\n\nLooks good to me.\n\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\n\n> ---\n>  src/ipa/raspberrypi/raspberrypi.cpp | 42 ++++++++++++++++-------------\n>  1 file changed, 23 insertions(+), 19 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp\n> b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 1bf4e270..cf4e6cab 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -74,7 +74,9 @@ constexpr Duration controllerMinFrameDuration = 1.0s /\n> 30.0;\n>\n>  LOG_DEFINE_CATEGORY(IPARPI)\n>\n> -class IPARPi : public ipa::RPi::IPARPiInterface\n> +namespace ipa::RPi {\n> +\n> +class IPARPi : public IPARPiInterface\n>  {\n>  public:\n>         IPARPi()\n> @@ -86,23 +88,23 @@ public:\n>         ~IPARPi()\n>         {\n>                 if (lsTable_)\n> -                       munmap(lsTable_, ipa::RPi::MaxLsGridSize);\n> +                       munmap(lsTable_, MaxLsGridSize);\n>         }\n>\n> -       int init(const IPASettings &settings, ipa::RPi::SensorConfig\n> *sensorConfig) override;\n> -       void start(const ControlList &controls, ipa::RPi::StartConfig\n> *startConfig) override;\n> +       int init(const IPASettings &settings, SensorConfig *sensorConfig)\n> override;\n> +       void start(const ControlList &controls, StartConfig *startConfig)\n> override;\n>         void stop() override {}\n>\n>         int configure(const IPACameraSensorInfo &sensorInfo,\n>                       const std::map<unsigned int, IPAStream>\n> &streamConfig,\n>                       const std::map<unsigned int, ControlInfoMap>\n> &entityControls,\n> -                     const ipa::RPi::IPAConfig &data,\n> +                     const IPAConfig &data,\n>                       ControlList *controls) override;\n>         void mapBuffers(const std::vector<IPABuffer> &buffers) override;\n>         void unmapBuffers(const std::vector<unsigned int> &ids) override;\n>         void signalStatReady(const uint32_t bufferId) override;\n>         void signalQueueRequest(const ControlList &controls) override;\n> -       void signalIspPrepare(const ipa::RPi::ISPConfig &data) override;\n> +       void signalIspPrepare(const ISPConfig &data) override;\n>\n>  private:\n>         void setMode(const IPACameraSensorInfo &sensorInfo);\n> @@ -110,7 +112,7 @@ private:\n>         bool validateIspControls();\n>         void queueRequest(const ControlList &controls);\n>         void returnEmbeddedBuffer(unsigned int bufferId);\n> -       void prepareISP(const ipa::RPi::ISPConfig &data);\n> +       void prepareISP(const ISPConfig &data);\n>         void reportMetadata();\n>         void fillDeviceStatus(const ControlList &sensorControls);\n>         void processStats(unsigned int bufferId);\n> @@ -178,7 +180,7 @@ private:\n>         uint32_t maxSensorGainCode_;\n>  };\n>\n> -int IPARPi::init(const IPASettings &settings, ipa::RPi::SensorConfig\n> *sensorConfig)\n> +int IPARPi::init(const IPASettings &settings, SensorConfig *sensorConfig)\n>  {\n>         /*\n>          * Load the \"helper\" for this sensor. This tells us all the device\n> specific stuff\n> @@ -212,7 +214,7 @@ int IPARPi::init(const IPASettings &settings,\n> ipa::RPi::SensorConfig *sensorConf\n>         return 0;\n>  }\n>\n> -void IPARPi::start(const ControlList &controls, ipa::RPi::StartConfig\n> *startConfig)\n> +void IPARPi::start(const ControlList &controls, StartConfig *startConfig)\n>  {\n>         RPiController::Metadata metadata;\n>\n> @@ -339,7 +341,7 @@ void IPARPi::setMode(const IPACameraSensorInfo\n> &sensorInfo)\n>  int IPARPi::configure(const IPACameraSensorInfo &sensorInfo,\n>                       [[maybe_unused]] const std::map<unsigned int,\n> IPAStream> &streamConfig,\n>                       const std::map<unsigned int, ControlInfoMap>\n> &entityControls,\n> -                     const ipa::RPi::IPAConfig &ipaConfig,\n> +                     const IPAConfig &ipaConfig,\n>                       ControlList *controls)\n>  {\n>         if (entityControls.size() != 2) {\n> @@ -374,14 +376,14 @@ int IPARPi::configure(const IPACameraSensorInfo\n> &sensorInfo,\n>         if (ipaConfig.lsTableHandle.isValid()) {\n>                 /* Remove any previous table, if there was one. */\n>                 if (lsTable_) {\n> -                       munmap(lsTable_, ipa::RPi::MaxLsGridSize);\n> +                       munmap(lsTable_, MaxLsGridSize);\n>                         lsTable_ = nullptr;\n>                 }\n>\n>                 /* Map the LS table buffer into user space. */\n>                 lsTableHandle_ = std::move(ipaConfig.lsTableHandle);\n>                 if (lsTableHandle_.isValid()) {\n> -                       lsTable_ = mmap(nullptr, ipa::RPi::MaxLsGridSize,\n> PROT_READ | PROT_WRITE,\n> +                       lsTable_ = mmap(nullptr, MaxLsGridSize, PROT_READ\n> | PROT_WRITE,\n>                                         MAP_SHARED, lsTableHandle_.get(),\n> 0);\n>\n>                         if (lsTable_ == MAP_FAILED) {\n> @@ -446,7 +448,7 @@ void IPARPi::signalStatReady(uint32_t bufferId)\n>\n>         reportMetadata();\n>\n> -       statsMetadataComplete.emit(bufferId & ipa::RPi::MaskID,\n> libcameraMetadata_);\n> +       statsMetadataComplete.emit(bufferId & MaskID, libcameraMetadata_);\n>  }\n>\n>  void IPARPi::signalQueueRequest(const ControlList &controls)\n> @@ -454,7 +456,7 @@ void IPARPi::signalQueueRequest(const ControlList\n> &controls)\n>         queueRequest(controls);\n>  }\n>\n> -void IPARPi::signalIspPrepare(const ipa::RPi::ISPConfig &data)\n> +void IPARPi::signalIspPrepare(const ISPConfig &data)\n>  {\n>         /*\n>          * At start-up, or after a mode-switch, we may want to\n> @@ -465,7 +467,7 @@ void IPARPi::signalIspPrepare(const\n> ipa::RPi::ISPConfig &data)\n>         frameCount_++;\n>\n>         /* Ready to push the input buffer into the ISP. */\n> -       runIsp.emit(data.bayerBufferId & ipa::RPi::MaskID);\n> +       runIsp.emit(data.bayerBufferId & MaskID);\n>  }\n>\n>  void IPARPi::reportMetadata()\n> @@ -927,10 +929,10 @@ void IPARPi::queueRequest(const ControlList\n> &controls)\n>\n>  void IPARPi::returnEmbeddedBuffer(unsigned int bufferId)\n>  {\n> -       embeddedComplete.emit(bufferId & ipa::RPi::MaskID);\n> +       embeddedComplete.emit(bufferId & MaskID);\n>  }\n>\n> -void IPARPi::prepareISP(const ipa::RPi::ISPConfig &data)\n> +void IPARPi::prepareISP(const ISPConfig &data)\n>  {\n>         int64_t frameTimestamp =\n> data.controls.get(controls::SensorTimestamp);\n>         RPiController::Metadata lastMetadata;\n> @@ -1316,7 +1318,7 @@ void IPARPi::applyLS(const struct AlscStatus\n> *lsStatus, ControlList &ctrls)\n>                 .gain_format = GAIN_FORMAT_U4P10\n>         };\n>\n> -       if (!lsTable_ || w * h * 4 * sizeof(uint16_t) >\n> ipa::RPi::MaxLsGridSize) {\n> +       if (!lsTable_ || w * h * 4 * sizeof(uint16_t) > MaxLsGridSize) {\n>                 LOG(IPARPI, Error) << \"Do not have a correctly allocate\n> lens shading table!\";\n>                 return;\n>         }\n> @@ -1376,6 +1378,8 @@ void IPARPi::resampleTable(uint16_t dest[], double\n> const src[12][16],\n>         }\n>  }\n>\n> +} /* namespace ipa::RPi */\n> +\n>  /*\n>   * External IPA module interface\n>   */\n> @@ -1389,7 +1393,7 @@ const struct IPAModuleInfo ipaModuleInfo = {\n>\n>  IPAInterface *ipaCreate()\n>  {\n> -       return new IPARPi();\n> +       return new ipa::RPi::IPARPi();\n>  }\n>\n>  } /* extern \"C\" */\n> --\n> 2.32.0\n>\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 5684DC0F1B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 24 Mar 2022 09:59:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9A532604D5;\n\tThu, 24 Mar 2022 10:59:38 +0100 (CET)","from mail-lj1-x236.google.com (mail-lj1-x236.google.com\n\t[IPv6:2a00:1450:4864:20::236])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A6065601F5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 24 Mar 2022 10:59:37 +0100 (CET)","by mail-lj1-x236.google.com with SMTP id c15so5401272ljr.9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 24 Mar 2022 02:59:37 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1648115978;\n\tbh=EMd8N1/HXhZlJmoXrim/vRrOFyuxpg/gX0lN2XwC1Fw=;\n\th=References:In-Reply-To:Date:To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=QBlpkGYfHwleOMXakHVA1zAjYEqGtGhdbadcAwgh0riOvcv3ycFI0/HwNARXdktnD\n\tZhC/ohtujFjR+ezBZZjpQCPgY+9iObI5alr9RaBzUYLISJ8rvyxdTHra9u7QerObTR\n\tSA8iF/PGHFLWL6fqnMr04wefBX7QcQYO1bZBcEjlOOjsTiefpAcnyNclZsGoAo3p3D\n\tNd7s6S4WOF4U4EhRmJ9b+9jh+bNuReyYrxYf5sEjAIri7/CLzu7P3wmTUKYgxK/omk\n\tsjoi93ydqdkiv2gioOG02MuG5F2+aHJJBicftble6bu9S4qaLhpS16GxBkYRXf1wx2\n\tnKrjEvEPCcsnQ==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=FCqesoyHJ1aW1paYs3CRDDZrT1oNJ4tSi4dhft7F3N4=;\n\tb=MFUXVQ9L+wV2jV6IGmg/WSeNJ/vF9fj+AvsYYRO1AbgGcDZB23BMt5lJDjZ6N0wBaL\n\tNu5wh1jhlwWqXNCY9sL+mQZ7S08SDUwVTt2EB+tvCji9p1LucvKB09nFVGuwRFdUmiuy\n\t9BA5rVDyVJxeY19p+z6cpOyXy8kFWHXdR75DDsHaDL9G67Y8fU/BSWNRQ3KbVbznZcLk\n\tAhvsLbAFvcIBGx1lpgxczIPyuKD+KsgBpA3hiRfyO+/SCfJMyrnVuGqs22HY0yVJipvZ\n\tD0svP7XhODC+WYWivRp3qWTatcFDD/jA51BW3qqToDqtLn9dLXDUMGcUZB0rXnZWMTrv\n\tGF5A=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"MFUXVQ9L\"; dkim-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:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=FCqesoyHJ1aW1paYs3CRDDZrT1oNJ4tSi4dhft7F3N4=;\n\tb=dwRn0Ou92ej6qR3M9Pr26/kJW/r8i6Ad2K1gXvg/uTmAAu8OAla4TxAFCZD5KYQz1h\n\tggnsTXM58wRYFe6xAeZ0u1vOjSSYw3D/BheeMPjZlnFTLIdYGLAdvNkBCmcc6Xhat3gh\n\t+S+ore+FE1K2d/Np8srpYkP14sqMA6jPG/KebAqteUuBOxdJyyhcB7y4ZEgz1deW4FVS\n\t/slgpXbiiKn3gXZ4/X/BQbPQBrfKKLFtPIQbb4QPT2wvKQeOR7dpuEk+v43leevyh267\n\tWMypfSH7PsunDd5qEf2hHVURhBzctwWR1wwjMce3b0LjDc1DUTXYGS11z3YaDoMRHO9s\n\tTZew==","X-Gm-Message-State":"AOAM533SPAk8uTPR/g2ttjoNaAeHfXRbpV/gAA9GpExN7pWCuwvj36rx\n\tJvC9TA8jsIDh1mfCM5dZkDRqSfESEHHxxVEgGqacfQ==","X-Google-Smtp-Source":"ABdhPJxLecrXEKIH5M+1Tb42kxRUACzMaMUgEmTfw1bJfeBkbcFfDfiWq55EpyMitWXlkboAseSU/uZh513trXBop18=","X-Received":"by 2002:a2e:b8cc:0:b0:249:a2b5:8e16 with SMTP id\n\ts12-20020a2eb8cc000000b00249a2b58e16mr3460323ljp.381.1648115976776;\n\tThu, 24 Mar 2022 02:59:36 -0700 (PDT)","MIME-Version":"1.0","References":"<20220323160145.90606-1-jeanmichel.hautbois@ideasonboard.com>\n\t<20220323160145.90606-2-jeanmichel.hautbois@ideasonboard.com>","In-Reply-To":"<20220323160145.90606-2-jeanmichel.hautbois@ideasonboard.com>","Date":"Thu, 24 Mar 2022 09:59:20 +0000","Message-ID":"<CAEmqJPqak4=RCyCadwVggRPqG43k9PgUcgi9oW=mkWQonOR2Ow@mail.gmail.com>","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","Content-Type":"multipart/alternative; boundary=\"00000000000058475005daf3e790\"","Subject":"Re: [libcamera-devel] [RFC PATCH v2 1/4] ipa: RPi: Move the IPA to\n\tthe ipa::RPi namespace","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":"Naushir Patuck via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Naushir Patuck <naush@raspberrypi.com>","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>"}}]