[{"id":28186,"web_url":"https://patchwork.libcamera.org/comment/28186/","msgid":"<CAEmqJPoFvO_+Wf415HNmHz9P6wgQw30WSuZiEFwfqHigCb7gVg@mail.gmail.com>","date":"2023-11-28T09:14:26","subject":"Re: [libcamera-devel] [PATCH] ipa: rpi: cac: Minor code\n\timprovements and tidying","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi David,\n\nThank you for this patch.\n\nOn Fri, 24 Nov 2023 at 16:37, David Plowman via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> We make a few small improvements to the code:\n>\n> * The arrayToSet method is prevented from overwriting the end of the\n>   array if there are too many values in the input table. If you supply\n>   a table, it will force you to put the correct number of elements in\n>   it.\n>\n> * The arrayToSet and setStrength member functions are turned into\n>   static functions. (There may be a different public setStrength\n>   member function in future.)\n>\n> * When no tables at all are given, the configuration is flagged as\n>   being disabled, so that we can avoid copying tables full of zeroes\n>   around. As a consequence, the pipeline handler too will disable this\n>   hardware block rather than run it needlessly. (Note that the tuning\n>   tool will put in a completely empty \"rpi.cac\" block if no CAC tuning\n>   images are supplied, benefiting from this behaviour.)\n>\n> * The initialise member function is removed as it does nothing.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\n> ---\n>  src/ipa/rpi/controller/rpi/cac.cpp | 82 ++++++++++++++++++++----------\n>  src/ipa/rpi/controller/rpi/cac.h   |  5 +-\n>  2 files changed, 55 insertions(+), 32 deletions(-)\n>\n> diff --git a/src/ipa/rpi/controller/rpi/cac.cpp b/src/ipa/rpi/controller/rpi/cac.cpp\n> index 7c123da1..f2c8d282 100644\n> --- a/src/ipa/rpi/controller/rpi/cac.cpp\n> +++ b/src/ipa/rpi/controller/rpi/cac.cpp\n> @@ -27,40 +27,23 @@ char const *Cac::name() const\n>         return NAME;\n>  }\n>\n> -int Cac::read(const libcamera::YamlObject &params)\n> -{\n> -       arrayToSet(params[\"lut_rx\"], config_.lutRx);\n> -       arrayToSet(params[\"lut_ry\"], config_.lutRy);\n> -       arrayToSet(params[\"lut_bx\"], config_.lutBx);\n> -       arrayToSet(params[\"lut_by\"], config_.lutBy);\n> -       cacStatus_.lutRx = config_.lutRx;\n> -       cacStatus_.lutRy = config_.lutRy;\n> -       cacStatus_.lutBx = config_.lutBx;\n> -       cacStatus_.lutBy = config_.lutBy;\n> -       double strength = params[\"strength\"].get<double>(1);\n> -       setStrength(config_.lutRx, cacStatus_.lutRx, strength);\n> -       setStrength(config_.lutBx, cacStatus_.lutBx, strength);\n> -       setStrength(config_.lutRy, cacStatus_.lutRy, strength);\n> -       setStrength(config_.lutBy, cacStatus_.lutBy, strength);\n> -       return 0;\n> -}\n> -\n> -void Cac::initialise()\n> -{\n> -}\n> -\n> -void Cac::arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray)\n> +static bool arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray, const Size &size)\n>  {\n>         int num = 0;\n> -       const Size &size = getHardwareConfig().cacRegions;\n> -       inputArray.resize((size.width + 1) * (size.height + 1));\n> +       int max_num = (size.width + 1) * (size.height + 1);\n> +       inputArray.resize(max_num);\n> +\n>         for (const auto &p : params.asList()) {\n> +               if (num == max_num)\n> +                       return false;\n>                 inputArray[num++] = p.get<double>(0);\n>         }\n> +\n> +       return num == max_num;\n>  }\n>\n> -void Cac::setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> -                     double strengthFactor)\n> +static void setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> +                       double strengthFactor)\n>  {\n>         int num = 0;\n>         for (const auto &p : inputArray) {\n> @@ -68,9 +51,52 @@ void Cac::setStrength(std::vector<double> &inputArray, std::vector<double> &outp\n>         }\n>  }\n>\n> +int Cac::read(const libcamera::YamlObject &params)\n> +{\n> +       config_.enabled = params.contains(\"lut_rx\") && params.contains(\"lut_ry\") &&\n> +                         params.contains(\"lut_bx\") && params.contains(\"lut_by\");\n> +       if (!config_.enabled)\n> +               return 0;\n> +\n> +       const Size &size = getHardwareConfig().cacRegions;\n> +\n> +       if (!arrayToSet(params[\"lut_rx\"], config_.lutRx, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_rx table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_ry\"], config_.lutRy, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_ry table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_bx\"], config_.lutBx, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_bx table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_by\"], config_.lutBy, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_by table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       double strength = params[\"strength\"].get<double>(1);\n> +       cacStatus_.lutRx = config_.lutRx;\n> +       cacStatus_.lutRy = config_.lutRy;\n> +       cacStatus_.lutBx = config_.lutBx;\n> +       cacStatus_.lutBy = config_.lutBy;\n> +       setStrength(config_.lutRx, cacStatus_.lutRx, strength);\n> +       setStrength(config_.lutBx, cacStatus_.lutBx, strength);\n> +       setStrength(config_.lutRy, cacStatus_.lutRy, strength);\n> +       setStrength(config_.lutBy, cacStatus_.lutBy, strength);\n> +\n> +       return 0;\n> +}\n> +\n>  void Cac::prepare(Metadata *imageMetadata)\n>  {\n> -       imageMetadata->set(\"cac.status\", cacStatus_);\n> +       if (config_.enabled)\n> +               imageMetadata->set(\"cac.status\", cacStatus_);\n>  }\n>\n>  // Register algorithm with the system.\n> diff --git a/src/ipa/rpi/controller/rpi/cac.h b/src/ipa/rpi/controller/rpi/cac.h\n> index 419180ab..a7b14c00 100644\n> --- a/src/ipa/rpi/controller/rpi/cac.h\n> +++ b/src/ipa/rpi/controller/rpi/cac.h\n> @@ -12,6 +12,7 @@\n>  namespace RPiController {\n>\n>  struct CacConfig {\n> +       bool enabled;\n>         std::vector<double> lutRx;\n>         std::vector<double> lutRy;\n>         std::vector<double> lutBx;\n> @@ -24,15 +25,11 @@ public:\n>         Cac(Controller *controller = NULL);\n>         char const *name() const override;\n>         int read(const libcamera::YamlObject &params) override;\n> -       void initialise() override;\n>         void prepare(Metadata *imageMetadata) override;\n> -       void setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> -                        double strengthFactor);\n>\n>  private:\n>         CacConfig config_;\n>         CacStatus cacStatus_;\n> -       void arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray);\n>  };\n>\n>  } // namespace RPiController\n> --\n> 2.39.2\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 4B211C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Nov 2023 09:14:58 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9F25A629C2;\n\tTue, 28 Nov 2023 10:14:57 +0100 (CET)","from mail-yw1-x112e.google.com (mail-yw1-x112e.google.com\n\t[IPv6:2607:f8b0:4864:20::112e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7001261DA5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Nov 2023 10:14:55 +0100 (CET)","by mail-yw1-x112e.google.com with SMTP id\n\t00721157ae682-5cca68f6e01so51694557b3.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Nov 2023 01:14:55 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1701162897;\n\tbh=mDZyUT/X6pnzme8Avbf2pM0s+LFCcJMxKy4ucTL+PbE=;\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=sc8pJvzmfDOJ0UdV+lwo6YdZ8BStuE4wUdcO6v8YYeUkoGOuk19G2LdhxZtCFjL9i\n\tENHI0sUJiz+1tlAGQsrxby4JLM0t4RyqxIny1F9pFX9FwjcHJK6vqGfWAh/JW6OFCD\n\tKmyoQcFYMNUm2vqtIyTo6Y2hmW2fSWQcU1UgTnbJgury5QWQNjk3pQnKixvv/z/9P5\n\tTFksBePigrXKpdmZilhEFSLl4wVSO1JCa+rf1h/iuV7sMUnZpujlaijA8r+9oojufN\n\tds9O/Er/jziQNRPu1Q3/xrnP4NsSout+xZpTobc2k2kU33WacWMzaTaQdxa1jivB2X\n\tSX90BqhG+BTPA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1701162894; x=1701767694;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=Mk2LsLlYPG1tb15oNmUAzXXkGmdXEki4csvgK8D0Jt4=;\n\tb=U2EtI9tcAs1fQYkGmM0FEb0vFCE50XkRtyTX1aZFRrcrCf4VwnvTqG3npX8TFQGzOC\n\tKsY64xzecGshITG87oq31/kvsvYG/UsGqeNCCcQ1cjlYpmOGwMeuuFAnqQVIxgFo/rkw\n\t4rtV2/O1uPtNDa8460nBeUASN2CubHvoiJZqqzEkDDtw9QKY5bhcB19RSXXoJpxbyYh9\n\tELcenz2VxFNz5J8OJiZLOQH6ZLq//rhDR1cBmPZYA0wugY6cvQk0Rv7HAKiSD4JzkVH/\n\tXYxqa82kW0Qa0XRXTqu63B1x7RtnXRKDFsO44aYTTqlBZSmflmZ6juyUhH13YihYUbuj\n\tc4+A=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"U2EtI9tc\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1701162894; x=1701767694;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=Mk2LsLlYPG1tb15oNmUAzXXkGmdXEki4csvgK8D0Jt4=;\n\tb=BOgTbQpkkcjt6txn5wuQkDa9Wvq/Sg1dRwXVdhGuwmsF8kkfS/d4fEeD5f18cvrHYr\n\t4sxEmTxWxGvHjCq/wYd/+bZXtQoWpT3rOSzpn/PoB0reiNttgjD3YXOpaVKFYtX0yl7d\n\tMPbZV8NTPGCCkk8UWBpAT4nuGLjC0vuBSfME052fIgpsPUMstIG/0aRLd8Cfcyzf0DJS\n\tr9g30RdD3ca//wVPm099mPsQ1Vdz9oKGMJ1qhgUSTaRl5+zZ+4cqf2QoM2fzewDwGPBH\n\tWk3MtO7zu7Aey5rvwzMAX/J3ElJ+70ceSaRNyWA5DLqMYqNmUv1YW85CaEntlNwFt2AJ\n\tQieQ==","X-Gm-Message-State":"AOJu0YweQDYJ/VsNnO49o7O9xj5vunbDKHib5lk9snk/Va3ZkzdpG2sR\n\tN5/VVYOhehBMYoQLQtNstC+WWR3GdUbDiKt7C6QOgw==","X-Google-Smtp-Source":"AGHT+IEqPTc9xr8UEbnCsoCNzEzx7k/f+Ao13zpkC3+jdzSjSaxZuxEYjCGjr+5pu4k546TIswrXSSaCn/s/C2pMq/k=","X-Received":"by 2002:a05:690c:2fc4:b0:5ce:ad36:6700 with SMTP id\n\tex4-20020a05690c2fc400b005cead366700mr9693562ywb.11.1701162894076;\n\tTue, 28 Nov 2023 01:14:54 -0800 (PST)","MIME-Version":"1.0","References":"<20231124163742.54660-1-david.plowman@raspberrypi.com>","In-Reply-To":"<20231124163742.54660-1-david.plowman@raspberrypi.com>","Date":"Tue, 28 Nov 2023 09:14:26 +0000","Message-ID":"<CAEmqJPoFvO_+Wf415HNmHz9P6wgQw30WSuZiEFwfqHigCb7gVg@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH] ipa: rpi: cac: Minor code\n\timprovements and tidying","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@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":28195,"web_url":"https://patchwork.libcamera.org/comment/28195/","msgid":"<170116683013.630990.1078194600503668200@ping.linuxembedded.co.uk>","date":"2023-11-28T10:20:30","subject":"Re: [libcamera-devel] [PATCH] ipa: rpi: cac: Minor code\n\timprovements and tidying","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting David Plowman via libcamera-devel (2023-11-24 16:37:42)\n> We make a few small improvements to the code:\n\nFour bullet points in a commit message is usually a sign that the patch\nshould be split ... but this is fairly small and all contained under\nsrc/ipa/rpi ... so I'll not dwell on that here. Just harder to review\n...\n\n> \n> * The arrayToSet method is prevented from overwriting the end of the\n>   array if there are too many values in the input table. If you supply\n>   a table, it will force you to put the correct number of elements in\n>   it.\n\nAck.\n\n> \n> * The arrayToSet and setStrength member functions are turned into\n>   static functions. (There may be a different public setStrength\n>   member function in future.)\n\nAck,\n\n> \n> * When no tables at all are given, the configuration is flagged as\n>   being disabled, so that we can avoid copying tables full of zeroes\n>   around. As a consequence, the pipeline handler too will disable this\n>   hardware block rather than run it needlessly. (Note that the tuning\n>   tool will put in a completely empty \"rpi.cac\" block if no CAC tuning\n>   images are supplied, benefiting from this behaviour.)\n\nAck,\n\n> \n> * The initialise member function is removed as it does nothing.\n\nAck,\n\n\nOk - they check out so \n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n> \n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  src/ipa/rpi/controller/rpi/cac.cpp | 82 ++++++++++++++++++++----------\n>  src/ipa/rpi/controller/rpi/cac.h   |  5 +-\n>  2 files changed, 55 insertions(+), 32 deletions(-)\n> \n> diff --git a/src/ipa/rpi/controller/rpi/cac.cpp b/src/ipa/rpi/controller/rpi/cac.cpp\n> index 7c123da1..f2c8d282 100644\n> --- a/src/ipa/rpi/controller/rpi/cac.cpp\n> +++ b/src/ipa/rpi/controller/rpi/cac.cpp\n> @@ -27,40 +27,23 @@ char const *Cac::name() const\n>         return NAME;\n>  }\n>  \n> -int Cac::read(const libcamera::YamlObject &params)\n> -{\n> -       arrayToSet(params[\"lut_rx\"], config_.lutRx);\n> -       arrayToSet(params[\"lut_ry\"], config_.lutRy);\n> -       arrayToSet(params[\"lut_bx\"], config_.lutBx);\n> -       arrayToSet(params[\"lut_by\"], config_.lutBy);\n> -       cacStatus_.lutRx = config_.lutRx;\n> -       cacStatus_.lutRy = config_.lutRy;\n> -       cacStatus_.lutBx = config_.lutBx;\n> -       cacStatus_.lutBy = config_.lutBy;\n> -       double strength = params[\"strength\"].get<double>(1);\n> -       setStrength(config_.lutRx, cacStatus_.lutRx, strength);\n> -       setStrength(config_.lutBx, cacStatus_.lutBx, strength);\n> -       setStrength(config_.lutRy, cacStatus_.lutRy, strength);\n> -       setStrength(config_.lutBy, cacStatus_.lutBy, strength);\n> -       return 0;\n> -}\n> -\n> -void Cac::initialise()\n> -{\n> -}\n> -\n> -void Cac::arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray)\n> +static bool arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray, const Size &size)\n>  {\n>         int num = 0;\n> -       const Size &size = getHardwareConfig().cacRegions;\n> -       inputArray.resize((size.width + 1) * (size.height + 1));\n> +       int max_num = (size.width + 1) * (size.height + 1);\n> +       inputArray.resize(max_num);\n> +\n>         for (const auto &p : params.asList()) {\n> +               if (num == max_num)\n> +                       return false;\n>                 inputArray[num++] = p.get<double>(0);\n>         }\n> +\n> +       return num == max_num;\n>  }\n>  \n> -void Cac::setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> -                     double strengthFactor)\n> +static void setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> +                       double strengthFactor)\n>  {\n>         int num = 0;\n>         for (const auto &p : inputArray) {\n> @@ -68,9 +51,52 @@ void Cac::setStrength(std::vector<double> &inputArray, std::vector<double> &outp\n>         }\n>  }\n>  \n> +int Cac::read(const libcamera::YamlObject &params)\n> +{\n> +       config_.enabled = params.contains(\"lut_rx\") && params.contains(\"lut_ry\") &&\n> +                         params.contains(\"lut_bx\") && params.contains(\"lut_by\");\n> +       if (!config_.enabled)\n> +               return 0;\n> +\n> +       const Size &size = getHardwareConfig().cacRegions;\n> +\n> +       if (!arrayToSet(params[\"lut_rx\"], config_.lutRx, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_rx table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_ry\"], config_.lutRy, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_ry table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_bx\"], config_.lutBx, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_bx table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       if (!arrayToSet(params[\"lut_by\"], config_.lutBy, size)) {\n> +               LOG(RPiCac, Error) << \"Bad CAC lut_by table\";\n> +               return -EINVAL;\n> +       }\n> +\n> +       double strength = params[\"strength\"].get<double>(1);\n> +       cacStatus_.lutRx = config_.lutRx;\n> +       cacStatus_.lutRy = config_.lutRy;\n> +       cacStatus_.lutBx = config_.lutBx;\n> +       cacStatus_.lutBy = config_.lutBy;\n> +       setStrength(config_.lutRx, cacStatus_.lutRx, strength);\n> +       setStrength(config_.lutBx, cacStatus_.lutBx, strength);\n> +       setStrength(config_.lutRy, cacStatus_.lutRy, strength);\n> +       setStrength(config_.lutBy, cacStatus_.lutBy, strength);\n> +\n> +       return 0;\n> +}\n> +\n>  void Cac::prepare(Metadata *imageMetadata)\n>  {\n> -       imageMetadata->set(\"cac.status\", cacStatus_);\n> +       if (config_.enabled)\n> +               imageMetadata->set(\"cac.status\", cacStatus_);\n>  }\n>  \n>  // Register algorithm with the system.\n> diff --git a/src/ipa/rpi/controller/rpi/cac.h b/src/ipa/rpi/controller/rpi/cac.h\n> index 419180ab..a7b14c00 100644\n> --- a/src/ipa/rpi/controller/rpi/cac.h\n> +++ b/src/ipa/rpi/controller/rpi/cac.h\n> @@ -12,6 +12,7 @@\n>  namespace RPiController {\n>  \n>  struct CacConfig {\n> +       bool enabled;\n>         std::vector<double> lutRx;\n>         std::vector<double> lutRy;\n>         std::vector<double> lutBx;\n> @@ -24,15 +25,11 @@ public:\n>         Cac(Controller *controller = NULL);\n>         char const *name() const override;\n>         int read(const libcamera::YamlObject &params) override;\n> -       void initialise() override;\n>         void prepare(Metadata *imageMetadata) override;\n> -       void setStrength(std::vector<double> &inputArray, std::vector<double> &outputArray,\n> -                        double strengthFactor);\n>  \n>  private:\n>         CacConfig config_;\n>         CacStatus cacStatus_;\n> -       void arrayToSet(const libcamera::YamlObject &params, std::vector<double> &inputArray);\n>  };\n>  \n>  } // namespace RPiController\n> -- \n> 2.39.2\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 95993C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Nov 2023 10:20:35 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C916C629C2;\n\tTue, 28 Nov 2023 11:20:34 +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 3A33E61DA5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Nov 2023 11:20:33 +0100 (CET)","from pendragon.ideasonboard.com\n\t(aztw-30-b2-v4wan-166917-cust845.vm26.cable.virginm.net\n\t[82.37.23.78])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 171F4BB2;\n\tTue, 28 Nov 2023 11:19:58 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1701166834;\n\tbh=rXQ+PQekETu59Ce5icGIbrkZ6VP5gZKSMlnVKDsJRyQ=;\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=IlM6ISNpcAFar9rVAr7inq5VOTi7jT6GDx6KWn+cH5WeMzNgnblAhRmC8SMTXutEo\n\tNOtcFaIs7Y5jLonCP2NqEJB750D1o2xFxqIIBohH6SbqAv/BuGnW5D4souQHdPF496\n\tBz2a5dkgT0o/ULpFW/fabep5DEvT2QYCr5w3Qgn5mVXb/+WyrT4xPAtwJ5VQMBQNVn\n\tdaRklFrH5+H/jdd5FRpTeIzawamteaLscUtY4MvwcHSBHe/rENppz7LiZiQSjOrslc\n\t0b6zBhsnMlr0dhrbXqd0ZRIJZ4im/eOyE/7sSW2Y5sVhfGztseVEuxZHytfb+9SBH7\n\t2aV2MaXZqFQSQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1701166798;\n\tbh=rXQ+PQekETu59Ce5icGIbrkZ6VP5gZKSMlnVKDsJRyQ=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=U/d6La8xMbmNtdO/14UWYtyWQcnWW8Lj3KSyDMU0+GnMUo3sV4LvzAN0MbgQCMp1o\n\tdXscaPcb9nwD7R0iFpzDwgv8gAPLRfP+H95VHYCNKB8UWstqEViUUyWZvf3eTAftdh\n\td0+dzDgudxk8rXlELgMBNDEauHbSIAO80IDm6KxQ="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"U/d6La8x\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20231124163742.54660-1-david.plowman@raspberrypi.com>","References":"<20231124163742.54660-1-david.plowman@raspberrypi.com>","To":"David Plowman <david.plowman@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 28 Nov 2023 10:20:30 +0000","Message-ID":"<170116683013.630990.1078194600503668200@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH] ipa: rpi: cac: Minor code\n\timprovements and tidying","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>"}}]