[{"id":25131,"web_url":"https://patchwork.libcamera.org/comment/25131/","msgid":"<20220927091701.3g2ydw5boe5au2rj@uno.localdomain>","date":"2022-09-27T09:17:01","subject":"Re: [libcamera-devel] [PATCH v5 17/33] ipa: libipa: Pass FCQueue\n\tsize as template argument","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Up to you if you want to take this patch in or not :)\n\nOn Tue, Sep 27, 2022 at 05:36:26AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> The frame context queue size is meant to be a compile-time constant, not\n> a variable that can change between runs. Pass it to the class as a\n> template argument.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/ipa/ipu3/ipa_context.h   |  5 ++++-\n>  src/ipa/ipu3/ipu3.cpp        |  5 +----\n>  src/ipa/libipa/fc_queue.cpp  |  6 +++---\n>  src/ipa/libipa/fc_queue.h    | 17 ++++++++---------\n>  src/ipa/rkisp1/ipa_context.h |  4 +++-\n>  src/ipa/rkisp1/rkisp1.cpp    |  4 +---\n>  6 files changed, 20 insertions(+), 21 deletions(-)\n>\n> diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h\n> index 36099353e9f2..bdba3d07d13a 100644\n> --- a/src/ipa/ipu3/ipa_context.h\n> +++ b/src/ipa/ipu3/ipa_context.h\n> @@ -79,11 +79,14 @@ struct IPAFrameContext : public FrameContext {\n>  \t} sensor;\n>  };\n>\n> +/* Maximum number of frame contexts to be held */\n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  struct IPAContext {\n>  \tIPASessionConfiguration configuration;\n>  \tIPAActiveState activeState;\n>\n> -\tFCQueue<IPAFrameContext> frameContexts;\n> +\tFCQueue<IPAFrameContext, kMaxFrameContexts> frameContexts;\n>  };\n>\n>  } /* namespace ipa::ipu3 */\n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index d1ea081d595d..f5292a77e4d3 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -55,9 +55,6 @@ static constexpr uint32_t kMinCellSizeLog2 = 3;\n>  /* log2 of the maximum grid cell width and height, in pixels */\n>  static constexpr uint32_t kMaxCellSizeLog2 = 6;\n>\n> -/* Maximum number of frame contexts to be held */\n> -static constexpr uint32_t kMaxFrameContexts = 16;\n> -\n>  namespace libcamera {\n>\n>  LOG_DEFINE_CATEGORY(IPAIPU3)\n> @@ -191,7 +188,7 @@ private:\n>  };\n>\n>  IPAIPU3::IPAIPU3()\n> -\t: context_({ {}, {}, { kMaxFrameContexts } })\n> +\t: context_({ {}, {}, {} })\n>  {\n>  }\n>\n> diff --git a/src/ipa/libipa/fc_queue.cpp b/src/ipa/libipa/fc_queue.cpp\n> index e812faa505a5..9b5702ec5eb0 100644\n> --- a/src/ipa/libipa/fc_queue.cpp\n> +++ b/src/ipa/libipa/fc_queue.cpp\n> @@ -42,6 +42,7 @@ namespace ipa {\n>   * \\class FCQueue\n>   * \\brief A support class for managing FrameContext instances in IPA modules\n>   * \\tparam FrameContext The IPA module-specific FrameContext derived class type\n> + * \\tparam Size The number of contexts in the queue\n>   *\n>   * Along with the Module and Algorithm classes, the frame context queue is a\n>   * core component of the libipa infrastructure. It stores per-frame contexts\n> @@ -90,9 +91,8 @@ namespace ipa {\n>   */\n>\n>  /**\n> - * \\fn FCQueue::FCQueue(unsigned int size)\n> - * \\brief Construct a frame contexts queue of a specified size\n> - * \\param[in] size The number of contexts in the queue\n> + * \\fn FCQueue::FCQueue()\n> + * \\brief Construct a frame contexts queue\n>   */\n>\n>  /**\n> diff --git a/src/ipa/libipa/fc_queue.h b/src/ipa/libipa/fc_queue.h\n> index a589e7e1031b..b9c8c6fe5a62 100644\n> --- a/src/ipa/libipa/fc_queue.h\n> +++ b/src/ipa/libipa/fc_queue.h\n> @@ -7,8 +7,8 @@\n>\n>  #pragma once\n>\n> +#include <array>\n>  #include <stdint.h>\n> -#include <vector>\n>\n>  #include <libcamera/base/log.h>\n>\n> @@ -18,21 +18,20 @@ LOG_DECLARE_CATEGORY(FCQueue)\n>\n>  namespace ipa {\n>\n> -template<typename FrameContext>\n> +template<typename FrameContext, std::size_t Size>\n>  class FCQueue;\n>\n>  struct FrameContext {\n>  private:\n> -\ttemplate<typename T> friend class FCQueue;\n> +\ttemplate<typename T, std::size_t> friend class FCQueue;\n>  \tuint32_t frame;\n>  };\n>\n> -template<typename FrameContext>\n> +template<typename FrameContext, std::size_t Size>\n>  class FCQueue\n>  {\n>  public:\n> -\tFCQueue(unsigned int size)\n> -\t\t: contexts_(size)\n> +\tFCQueue()\n>  \t{\n>  \t}\n>\n> @@ -44,7 +43,7 @@ public:\n>\n>  \tFrameContext &alloc(const uint32_t frame)\n>  \t{\n> -\t\tFrameContext &frameContext = contexts_[frame % contexts_.size()];\n> +\t\tFrameContext &frameContext = contexts_[frame % Size];\n>\n>  \t\t/*\n>  \t\t * Do not re-initialise if a get() call has already fetched this\n> @@ -68,7 +67,7 @@ public:\n>\n>  \tFrameContext &get(uint32_t frame)\n>  \t{\n> -\t\tFrameContext &frameContext = contexts_[frame % contexts_.size()];\n> +\t\tFrameContext &frameContext = contexts_[frame % Size];\n>\n>  \t\t/*\n>  \t\t * If the IPA algorithms try to access a frame context slot which\n> @@ -110,7 +109,7 @@ private:\n>  \t\tframeContext.frame = frame;\n>  \t}\n>\n> -\tstd::vector<FrameContext> contexts_;\n> +\tstd::array<FrameContext, Size> contexts_;\n>  };\n>\n>  } /* namespace ipa */\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index f6aaefffed52..4481bd2acde6 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -94,11 +94,13 @@ struct IPAActiveState {\n>  struct IPAFrameContext : public FrameContext {\n>  };\n>\n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  struct IPAContext {\n>  \tIPASessionConfiguration configuration;\n>  \tIPAActiveState activeState;\n>\n> -\tFCQueue<IPAFrameContext> frameContexts;\n> +\tFCQueue<IPAFrameContext, kMaxFrameContexts> frameContexts;\n>  };\n>\n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index eb3481949897..b7c1ecfee4c8 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -41,8 +41,6 @@ using namespace std::literals::chrono_literals;\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> @@ -106,7 +104,7 @@ const ControlInfoMap::Map rkisp1Controls{\n>  } /* namespace */\n>\n>  IPARkISP1::IPARkISP1()\n> -\t: context_({ {}, {}, { kMaxFrameContexts } })\n> +\t: context_({ {}, {}, {} })\n>  {\n>  }\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 7C971BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Sep 2022 09:17:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C892D6226B;\n\tTue, 27 Sep 2022 11:17:05 +0200 (CEST)","from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::226])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1811261F7B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Sep 2022 11:17:04 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 7E9F1C0005;\n\tTue, 27 Sep 2022 09:17:03 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664270225;\n\tbh=MSgO7bnNWDrlHr7bARsgtlhjIDdbme1auGrc5m3yijU=;\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=huW0bvje/Ar+mZbvgIvas7LaolSbwb57we5bwmr1zlBRqVmppNCNR+C0e2l3U8RkA\n\tpO6dHBKWq5hGKo7SZWVquK0wTmN0rgtWfsq+lFiPk5Z/v1jSkjxLVSe8V/coixvRiZ\n\t4uLdZ88JQE2hxXSrwDNby0dmOJoO66puRhGhZNT4ijRCGR/0yQ3kjnb+NQrqdojdVx\n\tBTcX82WVMGjuRPlkqNv8vQ8hyEFfccMTO2UBkc/9Q461cycUykhlTHLKo0C47z0E+5\n\tFz/xQ9Sw4mMbh5DXyeDhFrV7Zaxw8n2nDRKmCeKjmLCcVNq62J6o6zWnm5mVBnn1Xd\n\tduI6vF5yySrNw==","Date":"Tue, 27 Sep 2022 11:17:01 +0200","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220927091701.3g2ydw5boe5au2rj@uno.localdomain>","References":"<20220927023642.12341-1-laurent.pinchart@ideasonboard.com>\n\t<20220927023642.12341-18-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220927023642.12341-18-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v5 17/33] ipa: libipa: Pass FCQueue\n\tsize as template argument","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>"}},{"id":25135,"web_url":"https://patchwork.libcamera.org/comment/25135/","msgid":"<166427198018.570727.3399486317361847244@Monstersaurus>","date":"2022-09-27T09:46:20","subject":"Re: [libcamera-devel] [PATCH v5 17/33] ipa: libipa: Pass FCQueue\n\tsize as template argument","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart via libcamera-devel (2022-09-27 03:36:26)\n> The frame context queue size is meant to be a compile-time constant, not\n> a variable that can change between runs. Pass it to the class as a\n> template argument.\n\nThis is fine with me.\n\nIf we really hit something that means we need to communicate a more\ndynamic size at runtime, we'll handle it then.\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/ipa/ipu3/ipa_context.h   |  5 ++++-\n>  src/ipa/ipu3/ipu3.cpp        |  5 +----\n>  src/ipa/libipa/fc_queue.cpp  |  6 +++---\n>  src/ipa/libipa/fc_queue.h    | 17 ++++++++---------\n>  src/ipa/rkisp1/ipa_context.h |  4 +++-\n>  src/ipa/rkisp1/rkisp1.cpp    |  4 +---\n>  6 files changed, 20 insertions(+), 21 deletions(-)\n> \n> diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h\n> index 36099353e9f2..bdba3d07d13a 100644\n> --- a/src/ipa/ipu3/ipa_context.h\n> +++ b/src/ipa/ipu3/ipa_context.h\n> @@ -79,11 +79,14 @@ struct IPAFrameContext : public FrameContext {\n>         } sensor;\n>  };\n>  \n> +/* Maximum number of frame contexts to be held */\n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  struct IPAContext {\n>         IPASessionConfiguration configuration;\n>         IPAActiveState activeState;\n>  \n> -       FCQueue<IPAFrameContext> frameContexts;\n> +       FCQueue<IPAFrameContext, kMaxFrameContexts> frameContexts;\n>  };\n>  \n>  } /* namespace ipa::ipu3 */\n> diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp\n> index d1ea081d595d..f5292a77e4d3 100644\n> --- a/src/ipa/ipu3/ipu3.cpp\n> +++ b/src/ipa/ipu3/ipu3.cpp\n> @@ -55,9 +55,6 @@ static constexpr uint32_t kMinCellSizeLog2 = 3;\n>  /* log2 of the maximum grid cell width and height, in pixels */\n>  static constexpr uint32_t kMaxCellSizeLog2 = 6;\n>  \n> -/* Maximum number of frame contexts to be held */\n> -static constexpr uint32_t kMaxFrameContexts = 16;\n> -\n>  namespace libcamera {\n>  \n>  LOG_DEFINE_CATEGORY(IPAIPU3)\n> @@ -191,7 +188,7 @@ private:\n>  };\n>  \n>  IPAIPU3::IPAIPU3()\n> -       : context_({ {}, {}, { kMaxFrameContexts } })\n> +       : context_({ {}, {}, {} })\n>  {\n>  }\n>  \n> diff --git a/src/ipa/libipa/fc_queue.cpp b/src/ipa/libipa/fc_queue.cpp\n> index e812faa505a5..9b5702ec5eb0 100644\n> --- a/src/ipa/libipa/fc_queue.cpp\n> +++ b/src/ipa/libipa/fc_queue.cpp\n> @@ -42,6 +42,7 @@ namespace ipa {\n>   * \\class FCQueue\n>   * \\brief A support class for managing FrameContext instances in IPA modules\n>   * \\tparam FrameContext The IPA module-specific FrameContext derived class type\n> + * \\tparam Size The number of contexts in the queue\n>   *\n>   * Along with the Module and Algorithm classes, the frame context queue is a\n>   * core component of the libipa infrastructure. It stores per-frame contexts\n> @@ -90,9 +91,8 @@ namespace ipa {\n>   */\n>  \n>  /**\n> - * \\fn FCQueue::FCQueue(unsigned int size)\n> - * \\brief Construct a frame contexts queue of a specified size\n> - * \\param[in] size The number of contexts in the queue\n> + * \\fn FCQueue::FCQueue()\n> + * \\brief Construct a frame contexts queue\n>   */\n>  \n>  /**\n> diff --git a/src/ipa/libipa/fc_queue.h b/src/ipa/libipa/fc_queue.h\n> index a589e7e1031b..b9c8c6fe5a62 100644\n> --- a/src/ipa/libipa/fc_queue.h\n> +++ b/src/ipa/libipa/fc_queue.h\n> @@ -7,8 +7,8 @@\n>  \n>  #pragma once\n>  \n> +#include <array>\n>  #include <stdint.h>\n> -#include <vector>\n>  \n>  #include <libcamera/base/log.h>\n>  \n> @@ -18,21 +18,20 @@ LOG_DECLARE_CATEGORY(FCQueue)\n>  \n>  namespace ipa {\n>  \n> -template<typename FrameContext>\n> +template<typename FrameContext, std::size_t Size>\n>  class FCQueue;\n>  \n>  struct FrameContext {\n>  private:\n> -       template<typename T> friend class FCQueue;\n> +       template<typename T, std::size_t> friend class FCQueue;\n>         uint32_t frame;\n>  };\n>  \n> -template<typename FrameContext>\n> +template<typename FrameContext, std::size_t Size>\n>  class FCQueue\n>  {\n>  public:\n> -       FCQueue(unsigned int size)\n> -               : contexts_(size)\n> +       FCQueue()\n>         {\n>         }\n>  \n> @@ -44,7 +43,7 @@ public:\n>  \n>         FrameContext &alloc(const uint32_t frame)\n>         {\n> -               FrameContext &frameContext = contexts_[frame % contexts_.size()];\n> +               FrameContext &frameContext = contexts_[frame % Size];\n>  \n>                 /*\n>                  * Do not re-initialise if a get() call has already fetched this\n> @@ -68,7 +67,7 @@ public:\n>  \n>         FrameContext &get(uint32_t frame)\n>         {\n> -               FrameContext &frameContext = contexts_[frame % contexts_.size()];\n> +               FrameContext &frameContext = contexts_[frame % Size];\n>  \n>                 /*\n>                  * If the IPA algorithms try to access a frame context slot which\n> @@ -110,7 +109,7 @@ private:\n>                 frameContext.frame = frame;\n>         }\n>  \n> -       std::vector<FrameContext> contexts_;\n> +       std::array<FrameContext, Size> contexts_;\n>  };\n>  \n>  } /* namespace ipa */\n> diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h\n> index f6aaefffed52..4481bd2acde6 100644\n> --- a/src/ipa/rkisp1/ipa_context.h\n> +++ b/src/ipa/rkisp1/ipa_context.h\n> @@ -94,11 +94,13 @@ struct IPAActiveState {\n>  struct IPAFrameContext : public FrameContext {\n>  };\n>  \n> +static constexpr uint32_t kMaxFrameContexts = 16;\n> +\n>  struct IPAContext {\n>         IPASessionConfiguration configuration;\n>         IPAActiveState activeState;\n>  \n> -       FCQueue<IPAFrameContext> frameContexts;\n> +       FCQueue<IPAFrameContext, kMaxFrameContexts> frameContexts;\n>  };\n>  \n>  } /* namespace ipa::rkisp1 */\n> diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp\n> index eb3481949897..b7c1ecfee4c8 100644\n> --- a/src/ipa/rkisp1/rkisp1.cpp\n> +++ b/src/ipa/rkisp1/rkisp1.cpp\n> @@ -41,8 +41,6 @@ using namespace std::literals::chrono_literals;\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> @@ -106,7 +104,7 @@ const ControlInfoMap::Map rkisp1Controls{\n>  } /* namespace */\n>  \n>  IPARkISP1::IPARkISP1()\n> -       : context_({ {}, {}, { kMaxFrameContexts } })\n> +       : context_({ {}, {}, {} })\n>  {\n>  }\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 46473BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 27 Sep 2022 09:46:26 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8862162272;\n\tTue, 27 Sep 2022 11:46:25 +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 691FD61F7B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 27 Sep 2022 11:46:23 +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 C8488E5;\n\tTue, 27 Sep 2022 11:46:22 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664271985;\n\tbh=Q3QtOmOqyCxpwtZ5/+2FARTvqptJ5G6BV6DA0DYoUDg=;\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=At9/B5CUtJLKhMGibqz18VWhKUr9UdamZLeaVRvOSya9zpHnkgTQjjKpJnj1gdC1X\n\tLq8WwYA4IE9koCjz3+XY0VxMuviswqjTtKOD4b9oa9erUff4XTXJoaQ22JWkfSyP6l\n\tK4jqXps8iT34RhHBiZUYD1d3/WktzNACF40Vv8l2UQWkiCFE7hpcIo8bNELOI9gE6g\n\tSpgzIP4xxeqR5ml1mJYUJVcU1kNJEX5PRoaow+fCPpWC3SVmrK7ieiQFddytRNNjdN\n\tsixcD4RZkQwIr8igKGVY2zCn7FJY8Ob08rABCspwI3jLodfXg0rGqezjl9ZLJMU2dl\n\tBF9nE7hO9IuyA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664271982;\n\tbh=Q3QtOmOqyCxpwtZ5/+2FARTvqptJ5G6BV6DA0DYoUDg=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=L9UYZ4MKFRZ/i4IVVhtooc1Rx490ex3DmmghS2ycXWZaERqVycxowMWIA7aeYQecD\n\tAY8exOxnGJDwSWeXnHkcpJLXsUwPSC+5DlkFmmTFYou92eyc/EyDulya5HeBdam0w7\n\toE6NYaE7Q8lr1e5qa2f0lZe38Exix2ArceHpxuXA="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"L9UYZ4MK\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220927023642.12341-18-laurent.pinchart@ideasonboard.com>","References":"<20220927023642.12341-1-laurent.pinchart@ideasonboard.com>\n\t<20220927023642.12341-18-laurent.pinchart@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 27 Sep 2022 10:46:20 +0100","Message-ID":"<166427198018.570727.3399486317361847244@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v5 17/33] ipa: libipa: Pass FCQueue\n\tsize as template argument","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>"}}]