[{"id":25022,"web_url":"https://patchwork.libcamera.org/comment/25022/","msgid":"<166368541224.3912877.6730254024462955659@Monstersaurus>","date":"2022-09-20T14:50:12","subject":"Re: [libcamera-devel] [PATCH v4 16/32] ipa: rkisp1: Convert to use\n\tthe FCQueue","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2022-09-08 02:41:44)\n> From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> Establish a queue of FrameContexts using the new FCQueue and use it to\n> supply the FrameContext to the algorithms.\n> \n> The algorithms on the RKISP1 do not use this yet themselves, but are\n> able to do so after the introduction of this patch.\n> \n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n> ---\n\nThis has been converted to use the updated API for the FCQ, but perhaps\nthat's implicit.\n\nOtherwise, I thnik this is still mostly my patch, but still it still\ndoes what I think needs to be done ;-)\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n>  src/ipa/rkisp1/ipa_context.cpp |  6 +++---\n>  src/ipa/rkisp1/ipa_context.h   |  2 ++\n>  src/ipa/rkisp1/rkisp1.cpp      | 34 ++++++++++++++++++++++++----------\n>  3 files changed, 29 insertions(+), 13 deletions(-)\n> \n> diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp\n> index d18f4996aad2..e9846742ee4f 100644\n> --- a/src/ipa/rkisp1/ipa_context.cpp\n> +++ b/src/ipa/rkisp1/ipa_context.cpp\n> @@ -205,8 +205,7 @@ namespace libcamera::ipa::rkisp1 {\n>   * \\struct IPAFrameContext\n>   * \\brief Per-frame context for algorithms\n>   *\n> - * This structure is currently unused and will be replaced by a real per-frame\n> - * context.\n> + * \\todo Populate the frame context for all algorithms\n>   */\n>  \n>  /**\n> @@ -219,7 +218,8 @@ namespace libcamera::ipa::rkisp1 {\n>   * \\var IPAContext::activeState\n>   * \\brief The IPA active state, storing the latest state for all algorithms\n>   *\n> - * \\todo Introduce per-frame contexts\n> + * \\var IPAContext::frameContexts\n> + * \\brief Ring buffer of per-frame contexts\n>   */\n>  \n>  } /* namespace libcamera::ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index f6b3e6eb951c..f6aaefffed52 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -97,6 +97,8 @@ struct IPAFrameContext : public FrameContext {\n>  struct IPAContext {\n>         IPASessionConfiguration configuration;\n>         IPAActiveState activeState;\n> +\n> +       FCQueue<IPAFrameContext> frameContexts;\n>  };\n>  \n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 24d5b9647838..c5ed0bb21f67 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -40,13 +40,18 @@ using namespace std::literals::chrono_literals;\n>  \n>  namespace ipa::rkisp1 {\n>  \n> +/* Maximum number of frame contexts to be held */\n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  class IPARkISP1 : public IPARkISP1Interface, public Module\n>  {\n>  public:\n> +       IPARkISP1();\n> +\n>         int init(const IPASettings &settings, unsigned int hwRevision,\n>                  ControlInfoMap *ipaControls) override;\n>         int start() override;\n> -       void stop() override {}\n> +       void stop() override;\n>  \n>         int configure(const IPACameraSensorInfo &info,\n>                       const std::map<uint32_t, IPAStream> &streamConfig,\n> @@ -100,6 +105,11 @@ const ControlInfoMap::Map rkisp1Controls{\n>  \n>  } /* namespace */\n>  \n> +IPARkISP1::IPARkISP1()\n> +       : context_({ {}, {}, { kMaxFrameContexts } })\n> +{\n> +}\n> +\n>  std::string IPARkISP1::logPrefix() const\n>  {\n>         return \"rkisp1\";\n> @@ -186,6 +196,11 @@ int IPARkISP1::start()\n>         return 0;\n>  }\n>  \n> +void IPARkISP1::stop()\n> +{\n> +       context_.frameContexts.clear();\n> +}\n> +\n>  /**\n>   * \\todo The RkISP1 pipeline currently provides an empty IPACameraSensorInfo\n>   * if the connected sensor does not provide enough information to properly\n> @@ -223,8 +238,10 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,\n>                 << \"Exposure: \" << minExposure << \"-\" << maxExposure\n>                 << \" Gain: \" << minGain << \"-\" << maxGain;\n>  \n> -       /* Clean context at configuration */\n> -       context_ = {};\n> +       /* Clear the IPA context before the streaming session. */\n> +       context_.configuration = {};\n> +       context_.activeState = {};\n> +       context_.frameContexts.clear();\n>  \n>         /* Set the hardware revision for the algorithms. */\n>         context_.configuration.hw.revision = hwRevision_;\n> @@ -287,8 +304,7 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)\n>  \n>  void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n>  {\n> -       /* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -       IPAFrameContext frameContext;\n> +       IPAFrameContext &frameContext = context_.frameContexts.init(frame);\n>  \n>         for (auto const &algo : algorithms())\n>                 algo->queueRequest(context_, frame, frameContext, controls);\n> @@ -296,8 +312,7 @@ void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n>  \n>  void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n>  {\n> -       /* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -       IPAFrameContext frameContext;\n> +       IPAFrameContext &frameContext = context_.frameContexts.get(frame);\n>  \n>         rkisp1_params_cfg *params =\n>                 reinterpret_cast<rkisp1_params_cfg *>(\n> @@ -316,6 +331,8 @@ void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n>  void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,\n>                                    const ControlList &sensorControls)\n>  {\n> +       IPAFrameContext &frameContext = context_.frameContexts.get(frame);\n> +\n>         const rkisp1_stat_buffer *stats =\n>                 reinterpret_cast<rkisp1_stat_buffer *>(\n>                         mappedBuffers_.at(bufferId).planes()[0].data());\n> @@ -327,9 +344,6 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n>  \n>         unsigned int aeState = 0;\n>  \n> -       /* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -       IPAFrameContext frameContext;\n> -\n>         for (auto const &algo : algorithms())\n>                 algo->process(context_, frame, frameContext, stats);\n>  \n> -- \n> Regards,\n> \n> Laurent Pinchart\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 2C932C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 20 Sep 2022 14:50:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9598A621BA;\n\tTue, 20 Sep 2022 16:50:16 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 75D2A6218B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 20 Sep 2022 16:50:15 +0200 (CEST)","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 E73E56BE;\n\tTue, 20 Sep 2022 16:50:14 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1663685416;\n\tbh=64wItuOm4JBEAFOdcpDLFIb4QNMcJ4uhRvapT4KHSJ0=;\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=kW7ihwGudiyAyBibxlbEZHrtv659TmKRBmmc74bGBusGXpIKVVqoRCexkfCqEUwdE\n\tAopiVI6XnMGRe0AcI2CWn/JVau3ZxILYa1fvAnK19rOW80fNACs9Fn0k41xatHNttF\n\tQYiNLA7CSfUHoMta2VNW7Mzm1hxQ9xPc4FtLRhN3Kvt3YrI3PEjRY7Xe2gyLV5qnpc\n\t8Ge55Y/dXRhFqEkIjnPBmyw/upDoA0y2IVBBdX2Hdk583dUd7bkpROEoTRHa/Uf0Vq\n\tCbJyCT7oLOlLbiy5b3W3aqXg0tdJbiZ2onv/IoySSiZRK2dtNo5zGFMNjOEoiAziXj\n\tcam5MxEc9GLuA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1663685415;\n\tbh=64wItuOm4JBEAFOdcpDLFIb4QNMcJ4uhRvapT4KHSJ0=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=MI2Y5tHPgtHQ0BLqZ49PvQpUAKiGGm8V4FNvKLwjI2Mxo8xtngB2acvxsRt68j+z5\n\thBgwSpc5Ax/3sih61JBSnIGYVpwbXK6hOm4tK0aQEJJ960nrYfm+E6xoiZvejCJJRW\n\tKMpGxJDJJnNZVF94Edfm0TuoHv3zUJtQU2vY5+0E="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"MI2Y5tHP\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220908014200.28728-17-laurent.pinchart@ideasonboard.com>","References":"<20220908014200.28728-1-laurent.pinchart@ideasonboard.com>\n\t<20220908014200.28728-17-laurent.pinchart@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 20 Sep 2022 15:50:12 +0100","Message-ID":"<166368541224.3912877.6730254024462955659@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v4 16/32] ipa: rkisp1: Convert to use\n\tthe FCQueue","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":25062,"web_url":"https://patchwork.libcamera.org/comment/25062/","msgid":"<20220921183728.j4mvfr253xmcg76t@uno.localdomain>","date":"2022-09-21T18:37:28","subject":"Re: [libcamera-devel] [PATCH v4 16/32] ipa: rkisp1: Convert to use\n\tthe FCQueue","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent\n\nOn Thu, Sep 08, 2022 at 04:41:44AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> From: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>\n> Establish a queue of FrameContexts using the new FCQueue and use it to\n> supply the FrameContext to the algorithms.\n>\n> The algorithms on the RKISP1 do not use this yet themselves, but are\n> able to do so after the introduction of this patch.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>\n> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  src/ipa/rkisp1/ipa_context.cpp |  6 +++---\n>  src/ipa/rkisp1/ipa_context.h   |  2 ++\n>  src/ipa/rkisp1/rkisp1.cpp      | 34 ++++++++++++++++++++++++----------\n>  3 files changed, 29 insertions(+), 13 deletions(-)\n>\n> diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp\n> index d18f4996aad2..e9846742ee4f 100644\n> --- a/src/ipa/rkisp1/ipa_context.cpp\n> +++ b/src/ipa/rkisp1/ipa_context.cpp\n> @@ -205,8 +205,7 @@ namespace libcamera::ipa::rkisp1 {\n>   * \\struct IPAFrameContext\n>   * \\brief Per-frame context for algorithms\n>   *\n> - * This structure is currently unused and will be replaced by a real per-frame\n> - * context.\n> + * \\todo Populate the frame context for all algorithms\n>   */\n>\n>  /**\n> @@ -219,7 +218,8 @@ namespace libcamera::ipa::rkisp1 {\n>   * \\var IPAContext::activeState\n>   * \\brief The IPA active state, storing the latest state for all algorithms\n>   *\n> - * \\todo Introduce per-frame contexts\n> + * \\var IPAContext::frameContexts\n> + * \\brief Ring buffer of per-frame contexts\n>   */\n>\n>  } /* namespace libcamera::ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index f6b3e6eb951c..f6aaefffed52 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -97,6 +97,8 @@ struct IPAFrameContext : public FrameContext {\n>  struct IPAContext {\n>  \tIPASessionConfiguration configuration;\n>  \tIPAActiveState activeState;\n> +\n> +\tFCQueue<IPAFrameContext> frameContexts;\n>  };\n>\n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index 24d5b9647838..c5ed0bb21f67 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -40,13 +40,18 @@ using namespace std::literals::chrono_literals;\n>\n>  namespace ipa::rkisp1 {\n>\n> +/* Maximum number of frame contexts to be held */\n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  class IPARkISP1 : public IPARkISP1Interface, public Module\n>  {\n>  public:\n> +\tIPARkISP1();\n> +\n>  \tint init(const IPASettings &settings, unsigned int hwRevision,\n>  \t\t ControlInfoMap *ipaControls) override;\n>  \tint start() override;\n> -\tvoid stop() override {}\n> +\tvoid stop() override;\n>\n>  \tint configure(const IPACameraSensorInfo &info,\n>  \t\t      const std::map<uint32_t, IPAStream> &streamConfig,\n> @@ -100,6 +105,11 @@ const ControlInfoMap::Map rkisp1Controls{\n>\n>  } /* namespace */\n>\n> +IPARkISP1::IPARkISP1()\n> +\t: context_({ {}, {}, { kMaxFrameContexts } })\n> +{\n> +}\n> +\n>  std::string IPARkISP1::logPrefix() const\n>  {\n>  \treturn \"rkisp1\";\n> @@ -186,6 +196,11 @@ int IPARkISP1::start()\n>  \treturn 0;\n>  }\n>\n> +void IPARkISP1::stop()\n> +{\n> +\tcontext_.frameContexts.clear();\n> +}\n> +\n>  /**\n>   * \\todo The RkISP1 pipeline currently provides an empty IPACameraSensorInfo\n>   * if the connected sensor does not provide enough information to properly\n> @@ -223,8 +238,10 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,\n>  \t\t<< \"Exposure: \" << minExposure << \"-\" << maxExposure\n>  \t\t<< \" Gain: \" << minGain << \"-\" << maxGain;\n>\n> -\t/* Clean context at configuration */\n> -\tcontext_ = {};\n> +\t/* Clear the IPA context before the streaming session. */\n> +\tcontext_.configuration = {};\n> +\tcontext_.activeState = {};\n> +\tcontext_.frameContexts.clear();\n>\n>  \t/* Set the hardware revision for the algorithms. */\n>  \tcontext_.configuration.hw.revision = hwRevision_;\n> @@ -287,8 +304,7 @@ void IPARkISP1::unmapBuffers(const std::vector<unsigned int> &ids)\n>\n>  void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n>  {\n> -\t/* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -\tIPAFrameContext frameContext;\n> +\tIPAFrameContext &frameContext = context_.frameContexts.init(frame);\n>\n>  \tfor (auto const &algo : algorithms())\n>  \t\talgo->queueRequest(context_, frame, frameContext, controls);\n> @@ -296,8 +312,7 @@ void IPARkISP1::queueRequest(const uint32_t frame, const ControlList &controls)\n>\n>  void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n>  {\n> -\t/* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -\tIPAFrameContext frameContext;\n> +\tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n>\n>  \trkisp1_params_cfg *params =\n>  \t\treinterpret_cast<rkisp1_params_cfg *>(\n> @@ -316,6 +331,8 @@ void IPARkISP1::fillParamsBuffer(const uint32_t frame, const uint32_t bufferId)\n>  void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId,\n>  \t\t\t\t   const ControlList &sensorControls)\n>  {\n> +\tIPAFrameContext &frameContext = context_.frameContexts.get(frame);\n> +\n>  \tconst rkisp1_stat_buffer *stats =\n>  \t\treinterpret_cast<rkisp1_stat_buffer *>(\n>  \t\t\tmappedBuffers_.at(bufferId).planes()[0].data());\n> @@ -327,9 +344,6 @@ void IPARkISP1::processStatsBuffer(const uint32_t frame, const uint32_t bufferId\n>\n>  \tunsigned int aeState = 0;\n>\n> -\t/* \\todo Obtain the frame context to pass to process from the FCQueue */\n> -\tIPAFrameContext frameContext;\n> -\n>  \tfor (auto const &algo : algorithms())\n>  \t\talgo->process(context_, frame, frameContext, stats);\n>\n> --\n> Regards,\n>\n> Laurent Pinchart\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 8E79BC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 21 Sep 2022 18:37:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E9D5B621F5;\n\tWed, 21 Sep 2022 20:37:31 +0200 (CEST)","from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net\n\t[217.70.183.197])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B0F56600AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 21 Sep 2022 20:37:30 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id F353E1C0003;\n\tWed, 21 Sep 2022 18:37:29 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1663785451;\n\tbh=YBPmwQWV3CxxIO3X8ALvLnjKDaozGQNlB+/O/0XG/eM=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=ypKXYDUVp/V+bi1NwtQuQto9NCtFBso7Kq4dzRi9YsMKFaUmttDgYwrcbhiZxeWiS\n\t1rjNwwG9c/iXotXSfu9hVDGU1FbUD+3ZYwPjcXwqqvdrWUQ/4o51QZBKIDNhT0DfKY\n\tk5wZ185Uod7lhOY1Wr4e/1EKleOGO+HO9l7WKDN/A0pCYtHbw4+SeQ3dQSYXRL9R4I\n\tpSicuYvSo02vMZX9fiHhRV25xInxfbrrPSgFhVZEDdPop7ysVofKpbwaBBcY8eViAb\n\t0NJT9NwplcaYsEt/z+rKZBLFlBBdPG5mbodyVUqQWUlX1dikWiCT0ojtjBoF/0MEfD\n\tzPy982mDuEntw==","Date":"Wed, 21 Sep 2022 20:37:28 +0200","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220921183728.j4mvfr253xmcg76t@uno.localdomain>","References":"<20220908014200.28728-1-laurent.pinchart@ideasonboard.com>\n\t<20220908014200.28728-17-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220908014200.28728-17-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v4 16/32] ipa: rkisp1: Convert to use\n\tthe FCQueue","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":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]