[{"id":25655,"web_url":"https://patchwork.libcamera.org/comment/25655/","msgid":"<CAEmqJPqfRqmfncskD6XaqwFtz4HaKx9N61=8kbD19zkdw0AoCA@mail.gmail.com>","date":"2022-10-28T10:53:00","subject":"Re: [libcamera-devel] [PATCH] ipa: raspberrypi: awb: Update colour\n\ttemperature whenever manual gains change","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 work.\n\nOn Thu, 27 Oct 2022 at 12:40, David Plowman via libcamera-devel <\nlibcamera-devel@lists.libcamera.org> wrote:\n\n> Previously we only did this when the system starts (on the first\n> switch_mode). Now we do it whenever the manual colour gains are\n> updated. To facilitate this, this R/B vs. colour temperature inverse\n> functions are stored persistently in the AwbConfig.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n>\n\nIt's good to be consistent with this behavior.\n\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\n\n\n> ---\n>  src/ipa/raspberrypi/controller/rpi/awb.cpp | 24 +++++++++-------------\n>  src/ipa/raspberrypi/controller/rpi/awb.h   |  3 ++-\n>  2 files changed, 12 insertions(+), 15 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> index 2b88c3b0..8d8ddf09 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> @@ -104,6 +104,9 @@ int AwbConfig::read(const libcamera::YamlObject\n> &params)\n>                 ret = readCtCurve(ctR, ctB, params[\"ct_curve\"]);\n>                 if (ret)\n>                         return ret;\n> +               /* We will want the inverse functions of these too. */\n> +               ctRInverse = ctR.inverse();\n> +               ctBInverse = ctB.inverse();\n>         }\n>\n>         if (params.contains(\"priors\")) {\n> @@ -174,7 +177,6 @@ Awb::Awb(Controller *controller)\n>         asyncAbort_ = asyncStart_ = asyncStarted_ = asyncFinished_ = false;\n>         mode_ = nullptr;\n>         manualR_ = manualB_ = 0.0;\n> -       firstSwitchMode_ = true;\n>         asyncThread_ = std::thread(std::bind(&Awb::asyncFunc, this));\n>  }\n>\n> @@ -270,27 +272,21 @@ void Awb::setManualGains(double manualR, double\n> manualB)\n>                 syncResults_.gainR = prevSyncResults_.gainR = manualR_;\n>                 syncResults_.gainG = prevSyncResults_.gainG = 1.0;\n>                 syncResults_.gainB = prevSyncResults_.gainB = manualB_;\n> +               if (config_.bayes) {\n> +                       /* Also estimate the best corresponding colour\n> temperature from the curves. */\n> +                       double ctR =\n> config_.ctRInverse.eval(config_.ctRInverse.domain().clip(1 / manualR_));\n> +                       double ctB =\n> config_.ctBInverse.eval(config_.ctBInverse.domain().clip(1 / manualB_));\n> +                       prevSyncResults_.temperatureK = (ctR + ctB) / 2;\n> +                       syncResults_.temperatureK =\n> prevSyncResults_.temperatureK;\n> +               }\n>         }\n>  }\n>\n>  void Awb::switchMode([[maybe_unused]] CameraMode const &cameraMode,\n>                      Metadata *metadata)\n>  {\n> -       /*\n> -        * On the first mode switch we'll have no meaningful colour\n> -        * temperature, so try to dead reckon one if in manual mode.\n> -        */\n> -       if (!isAutoEnabled() && firstSwitchMode_ && config_.bayes) {\n> -               Pwl ctRInverse = config_.ctR.inverse();\n> -               Pwl ctBInverse = config_.ctB.inverse();\n> -               double ctR = ctRInverse.eval(ctRInverse.domain().clip(1 /\n> manualR_));\n> -               double ctB = ctBInverse.eval(ctBInverse.domain().clip(1 /\n> manualB_));\n> -               prevSyncResults_.temperatureK = (ctR + ctB) / 2;\n> -               syncResults_.temperatureK = prevSyncResults_.temperatureK;\n> -       }\n>         /* Let other algorithms know the current white balance values. */\n>         metadata->set(\"awb.status\", prevSyncResults_);\n> -       firstSwitchMode_ = false;\n>  }\n>\n>  bool Awb::isAutoEnabled() const\n> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h\n> b/src/ipa/raspberrypi/controller/rpi/awb.h\n> index cb4cfd1b..30acd89d 100644\n> --- a/src/ipa/raspberrypi/controller/rpi/awb.h\n> +++ b/src/ipa/raspberrypi/controller/rpi/awb.h\n> @@ -42,6 +42,8 @@ struct AwbConfig {\n>         bool fast; /* \"fast\" mode uses a 16x16 rather than 32x32 grid */\n>         Pwl ctR; /* function maps CT to r (= R/G) */\n>         Pwl ctB; /* function maps CT to b (= B/G) */\n> +       Pwl ctRInverse; /* inverse of ctR */\n> +       Pwl ctBInverse; /* inverse of ctB */\n>         /* table of illuminant priors at different lux levels */\n>         std::vector<AwbPrior> priors;\n>         /* AWB \"modes\" (determines the search range) */\n> @@ -168,7 +170,6 @@ private:\n>         double manualR_;\n>         /* manual b setting */\n>         double manualB_;\n> -       bool firstSwitchMode_; /* is this the first call to SwitchMode? */\n>  };\n>\n>  static inline Awb::RGB operator+(Awb::RGB const &a, Awb::RGB const &b)\n> --\n> 2.30.2\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 BDE48BDB16\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Oct 2022 10:53:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 065A162FD2;\n\tFri, 28 Oct 2022 12:53:19 +0200 (CEST)","from mail-qt1-x834.google.com (mail-qt1-x834.google.com\n\t[IPv6:2607:f8b0:4864:20::834])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DB30D61F4A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Oct 2022 12:53:17 +0200 (CEST)","by mail-qt1-x834.google.com with SMTP id w29so3194133qtv.9\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Oct 2022 03:53:17 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666954399;\n\tbh=X+8KuBPUmWjP12AcLxqMVR36RinXCVrpbPe3n/q25aA=;\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=qwJu9PKRpLWQWEU4TG+bNHEFhXYCxJ8qQ9UVHdulQSGqIASCbnSPMmNnCw17uFdzj\n\tAijgX4VL+r8oXOzQ6fyfXVeYwJekIHY3uZiqEkzT6CQ86J/g9+BSOoGLyqKgTPOQjf\n\tOot9UcHj48u8SXK/1cwpQYVu6iKrfxeCzLcQsf186D8y3k6vV37ZACJTnsHPVaBw7m\n\trhbQFBIFdDP6PCiz2+vAw1vsP4QI6yHEu5wsXG/yoGCEVD4XV/u4IBEnoSN5OUhuLC\n\tAVJq0+zbcfzF/kawx0qd8exdEkLfR3EzoIiPdQSBELrwMKKHbcvMRrPPrYIdeWKId8\n\t8mrUCyeJPBRbA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\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=Azc+v90jm2OTQ2r9Jv086b+XnzGv5EeIWKPPhP6Cuas=;\n\tb=CD4+HdIykfqwP2wJ1Ji4wb9vlusl5qZVEswPb/9+FmRQC4JPC4lSvDBLa9sk93O1IC\n\t1+jHthtrMGjY5Ai5m53y6BGbkcVoCl9TedpMGzbeChfGnL75rVE1YgrmoUERRvaem2qw\n\t+uDJG3Jt3xXcSUpruPcdRUaf3XP43kVaJQVbt4GU8/UU8wI4XWS9pon1sgpnszyftGoh\n\tEMAUQqk+rmQIVOP8h18linvPNJL9wSAdUNs30HawkrHdrTX3JuNw7SQugw5aeHRZRHps\n\tAdNQV/+8xa8bseuXfgh5xHLvaeR9mP4ADf29BQFHDlWqUnWo7siD+nI5SnuLZooM5gbo\n\tV7SA=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"CD4+HdIy\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\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=Azc+v90jm2OTQ2r9Jv086b+XnzGv5EeIWKPPhP6Cuas=;\n\tb=XpkFUfU97aET64tFz/75lzavQP6hsv4rqFhEPpfHLYKSU4rhGTuNPsjEOtDFA5Xv08\n\tsEcPzJn7lXy5VLXf7OL7I5/hbLxVKhW4H9ot0uS5T1C494BXhPaTRdyPyM7Qjbow/W5Y\n\t97NtD0EgyvTma8poQzlWJ2NlDrjUR8fQyC1QhZ3uepHWvdK2HA96iCmoVTtLRHPvKv52\n\t9ILCszkJWq7e+H8TtdfsgUr1K53JL9qA9GMFiZ2ueSu0oFqpdBwvVkPf3pnRwL+ssLbK\n\t+FWFQapFYfpGCsefLGtfkBjL7knesgsxGRTgAFkUvdRCKdj8GECQ1G4BD31fO4lJcXpH\n\ti+lw==","X-Gm-Message-State":"ACrzQf34Ma7kueBPDnyYaQLQDzv9gYqTe0lMfLsXBxUQIVo/qBKujQ86\n\tM0Inq+E8eS+Swd2d/RbqAlBZIvEKIlESq7kg4A8nkg==","X-Google-Smtp-Source":"AMsMyM4lGUqSA2thzdInJ329I8FtuaxaPHsXMhVFU5f0dUw/mH1VmNNZM//PCStcUC+1CPyGGYlxIxJBbu+1NYzDqa4=","X-Received":"by 2002:a05:622a:1820:b0:3a4:f758:fc0c with SMTP id\n\tt32-20020a05622a182000b003a4f758fc0cmr7287629qtc.110.1666954396633;\n\tFri, 28 Oct 2022 03:53:16 -0700 (PDT)","MIME-Version":"1.0","References":"<20221027113956.7854-1-david.plowman@raspberrypi.com>","In-Reply-To":"<20221027113956.7854-1-david.plowman@raspberrypi.com>","Date":"Fri, 28 Oct 2022 11:53:00 +0100","Message-ID":"<CAEmqJPqfRqmfncskD6XaqwFtz4HaKx9N61=8kbD19zkdw0AoCA@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"multipart/alternative; boundary=\"000000000000ab226905ec161033\"","Subject":"Re: [libcamera-devel] [PATCH] ipa: raspberrypi: awb: Update colour\n\ttemperature whenever manual gains change","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":25666,"web_url":"https://patchwork.libcamera.org/comment/25666/","msgid":"<166696361238.15935.12607023579982137643@Monstersaurus>","date":"2022-10-28T13:26:52","subject":"Re: [libcamera-devel] [PATCH] ipa: raspberrypi: awb: Update colour\n\ttemperature whenever manual gains change","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Naushir Patuck via libcamera-devel (2022-10-28 11:53:00)\n> Hi David,\n> \n> Thank you for this work.\n> \n> On Thu, 27 Oct 2022 at 12:40, David Plowman via libcamera-devel <\n> libcamera-devel@lists.libcamera.org> wrote:\n> \n> > Previously we only did this when the system starts (on the first\n> > switch_mode). Now we do it whenever the manual colour gains are\n> > updated. To facilitate this, this R/B vs. colour temperature inverse\n> > functions are stored persistently in the AwbConfig.\n> >\n> > Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> >\n> \n> It's good to be consistent with this behavior.\n> \n> Reviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n\n> > ---\n> >  src/ipa/raspberrypi/controller/rpi/awb.cpp | 24 +++++++++-------------\n> >  src/ipa/raspberrypi/controller/rpi/awb.h   |  3 ++-\n> >  2 files changed, 12 insertions(+), 15 deletions(-)\n> >\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > index 2b88c3b0..8d8ddf09 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp\n> > @@ -104,6 +104,9 @@ int AwbConfig::read(const libcamera::YamlObject\n> > &params)\n> >                 ret = readCtCurve(ctR, ctB, params[\"ct_curve\"]);\n> >                 if (ret)\n> >                         return ret;\n> > +               /* We will want the inverse functions of these too. */\n> > +               ctRInverse = ctR.inverse();\n> > +               ctBInverse = ctB.inverse();\n> >         }\n> >\n> >         if (params.contains(\"priors\")) {\n> > @@ -174,7 +177,6 @@ Awb::Awb(Controller *controller)\n> >         asyncAbort_ = asyncStart_ = asyncStarted_ = asyncFinished_ = false;\n> >         mode_ = nullptr;\n> >         manualR_ = manualB_ = 0.0;\n> > -       firstSwitchMode_ = true;\n> >         asyncThread_ = std::thread(std::bind(&Awb::asyncFunc, this));\n> >  }\n> >\n> > @@ -270,27 +272,21 @@ void Awb::setManualGains(double manualR, double\n> > manualB)\n> >                 syncResults_.gainR = prevSyncResults_.gainR = manualR_;\n> >                 syncResults_.gainG = prevSyncResults_.gainG = 1.0;\n> >                 syncResults_.gainB = prevSyncResults_.gainB = manualB_;\n> > +               if (config_.bayes) {\n> > +                       /* Also estimate the best corresponding colour\n> > temperature from the curves. */\n> > +                       double ctR =\n> > config_.ctRInverse.eval(config_.ctRInverse.domain().clip(1 / manualR_));\n> > +                       double ctB =\n> > config_.ctBInverse.eval(config_.ctBInverse.domain().clip(1 / manualB_));\n> > +                       prevSyncResults_.temperatureK = (ctR + ctB) / 2;\n> > +                       syncResults_.temperatureK =\n> > prevSyncResults_.temperatureK;\n> > +               }\n> >         }\n> >  }\n> >\n> >  void Awb::switchMode([[maybe_unused]] CameraMode const &cameraMode,\n> >                      Metadata *metadata)\n> >  {\n> > -       /*\n> > -        * On the first mode switch we'll have no meaningful colour\n> > -        * temperature, so try to dead reckon one if in manual mode.\n> > -        */\n> > -       if (!isAutoEnabled() && firstSwitchMode_ && config_.bayes) {\n> > -               Pwl ctRInverse = config_.ctR.inverse();\n> > -               Pwl ctBInverse = config_.ctB.inverse();\n> > -               double ctR = ctRInverse.eval(ctRInverse.domain().clip(1 /\n> > manualR_));\n> > -               double ctB = ctBInverse.eval(ctBInverse.domain().clip(1 /\n> > manualB_));\n> > -               prevSyncResults_.temperatureK = (ctR + ctB) / 2;\n> > -               syncResults_.temperatureK = prevSyncResults_.temperatureK;\n> > -       }\n> >         /* Let other algorithms know the current white balance values. */\n> >         metadata->set(\"awb.status\", prevSyncResults_);\n> > -       firstSwitchMode_ = false;\n> >  }\n> >\n> >  bool Awb::isAutoEnabled() const\n> > diff --git a/src/ipa/raspberrypi/controller/rpi/awb.h\n> > b/src/ipa/raspberrypi/controller/rpi/awb.h\n> > index cb4cfd1b..30acd89d 100644\n> > --- a/src/ipa/raspberrypi/controller/rpi/awb.h\n> > +++ b/src/ipa/raspberrypi/controller/rpi/awb.h\n> > @@ -42,6 +42,8 @@ struct AwbConfig {\n> >         bool fast; /* \"fast\" mode uses a 16x16 rather than 32x32 grid */\n> >         Pwl ctR; /* function maps CT to r (= R/G) */\n> >         Pwl ctB; /* function maps CT to b (= B/G) */\n> > +       Pwl ctRInverse; /* inverse of ctR */\n> > +       Pwl ctBInverse; /* inverse of ctB */\n> >         /* table of illuminant priors at different lux levels */\n> >         std::vector<AwbPrior> priors;\n> >         /* AWB \"modes\" (determines the search range) */\n> > @@ -168,7 +170,6 @@ private:\n> >         double manualR_;\n> >         /* manual b setting */\n> >         double manualB_;\n> > -       bool firstSwitchMode_; /* is this the first call to SwitchMode? */\n> >  };\n> >\n> >  static inline Awb::RGB operator+(Awb::RGB const &a, Awb::RGB const &b)\n> > --\n> > 2.30.2\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 5A019BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 28 Oct 2022 13:26:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 118E462FE1;\n\tFri, 28 Oct 2022 15:26:57 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8C60961F4A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 28 Oct 2022 15:26:55 +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 34FE06BE;\n\tFri, 28 Oct 2022 15:26:55 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666963617;\n\tbh=PcCIKcP1MQ+OwZHJPG9t4Im2v4NhrvvTFwhi6MCXifo=;\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:Cc:\n\tFrom;\n\tb=p0nD+FA8ZodtChutlmT6jJBrTWKns8fEtOJMv+jko4OKXV/T+mkafTJbWhJpY1/k4\n\tekT+HLlep6SXEpNmxTcOBtorL1Fsu0VgIR2ZbBtJgkyQk0ksEpzNq8hcS0ifhkxOVS\n\tlqPYSd/fnHiiQrZErzPZCgmSSYjvMYW8xeQdsWgfGOO6yGqRsRM4isxIWnRU3PNVeJ\n\tCLt9hCj5cx9YPNoNGMub1sZpXVhrCoS46FsT5PADIcfPruQYkqO1vTs3zYiRQTGs1p\n\t1NoDqe21nqCw3uY660NgMDoK4MhJD9nlleiy9uOwBQFeaDFj8z1X13i9wKLB64BXkY\n\tAEEZWRDy4MP8w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666963615;\n\tbh=PcCIKcP1MQ+OwZHJPG9t4Im2v4NhrvvTFwhi6MCXifo=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=mWxTY2usuVMgYYUqmuLy/iQLbannsDBRlbyvMA1jUU+zwvfh5ro6tIe39pfvbqQMa\n\tzuP5wc7pw8bm6kjhURmI/plqI8ipHAARjsZC604qQLZgckg/TKS3aDTAYzFjdgenWQ\n\tLkz5/zXBIxVcyOirPasU8kLPlaQINPeDgiWh9DaM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"mWxTY2us\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<CAEmqJPqfRqmfncskD6XaqwFtz4HaKx9N61=8kbD19zkdw0AoCA@mail.gmail.com>","References":"<20221027113956.7854-1-david.plowman@raspberrypi.com>\n\t<CAEmqJPqfRqmfncskD6XaqwFtz4HaKx9N61=8kbD19zkdw0AoCA@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>,\n\tNaushir Patuck <naush@raspberrypi.com>,\n\tNaushir Patuck via libcamera-devel <libcamera-devel@lists.libcamera.org>","Date":"Fri, 28 Oct 2022 14:26:52 +0100","Message-ID":"<166696361238.15935.12607023579982137643@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH] ipa: raspberrypi: awb: Update colour\n\ttemperature whenever manual gains change","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>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]