[{"id":28420,"web_url":"https://patchwork.libcamera.org/comment/28420/","msgid":"<170480755371.3044059.4954145223437803185@ping.linuxembedded.co.uk>","date":"2024-01-09T13:39:13","subject":"Re: [libcamera-devel] [PATCH v4 1/2] ipa: rpi: Implement HDR control","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 (2024-01-09 10:25:46)\n> Sufficient plumbing is added so that the HDR mode control can be used\n> to engage HDR modes on platforms that support them. On the vc4\n> platform, this allows multi-channel AGC to run, though there is no\n> image merging.\n> \n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n\nhttps://patchwork.libcamera.org/patch/19057/ had an RB tag from Naush.\n\nDoes it still apply here?\n\nNaush - Can you confirm you're happy with this patch please?\n\n--\nKieran\n\n\n> ---\n>  src/ipa/rpi/common/ipa_base.cpp | 49 +++++++++++++++++++++++++++++++++\n>  1 file changed, 49 insertions(+)\n> \n> diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp\n> index 6ec91575..632b8d2f 100644\n> --- a/src/ipa/rpi/common/ipa_base.cpp\n> +++ b/src/ipa/rpi/common/ipa_base.cpp\n> @@ -24,6 +24,8 @@\n>  #include \"controller/ccm_status.h\"\n>  #include \"controller/contrast_algorithm.h\"\n>  #include \"controller/denoise_algorithm.h\"\n> +#include \"controller/hdr_algorithm.h\"\n> +#include \"controller/hdr_status.h\"\n>  #include \"controller/lux_status.h\"\n>  #include \"controller/sharpen_algorithm.h\"\n>  #include \"controller/statistics.h\"\n> @@ -67,6 +69,7 @@ const ControlInfoMap::Map ipaControls{\n>         { &controls::AeFlickerPeriod, ControlInfo(100, 1000000) },\n>         { &controls::Brightness, ControlInfo(-1.0f, 1.0f, 0.0f) },\n>         { &controls::Contrast, ControlInfo(0.0f, 32.0f, 1.0f) },\n> +       { &controls::HdrMode, ControlInfo(controls::HdrModeValues) },\n>         { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },\n>         { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },\n>         { &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000)) },\n> @@ -688,9 +691,17 @@ static const std::map<int32_t, RPiController::AfAlgorithm::AfPause> AfPauseTable\n>         { controls::AfPauseResume, RPiController::AfAlgorithm::AfPauseResume },\n>  };\n>  \n> +static const std::map<int32_t, std::string> HdrModeTable = {\n> +       { controls::HdrModeOff, \"Off\" },\n> +       { controls::HdrModeMultiExposure, \"MultiExposure\" },\n> +       { controls::HdrModeSingleExposure, \"SingleExposure\" },\n> +};\n> +\n>  void IpaBase::applyControls(const ControlList &controls)\n>  {\n> +       using RPiController::AgcAlgorithm;\n>         using RPiController::AfAlgorithm;\n> +       using RPiController::HdrAlgorithm;\n>  \n>         /* Clear the return metadata buffer. */\n>         libcameraMetadata_.clear();\n> @@ -1162,6 +1173,34 @@ void IpaBase::applyControls(const ControlList &controls)\n>                         break;\n>                 }\n>  \n> +               case controls::HDR_MODE: {\n> +                       HdrAlgorithm *hdr = dynamic_cast<HdrAlgorithm *>(controller_.getAlgorithm(\"hdr\"));\n> +                       if (!hdr) {\n> +                               LOG(IPARPI, Warning) << \"No HDR algorithm available\";\n> +                               break;\n> +                       }\n> +\n> +                       auto mode = HdrModeTable.find(ctrl.second.get<int32_t>());\n> +                       if (mode == HdrModeTable.end()) {\n> +                               LOG(IPARPI, Warning) << \"Unrecognised HDR mode\";\n> +                               break;\n> +                       }\n> +\n> +                       AgcAlgorithm *agc = dynamic_cast<AgcAlgorithm *>(controller_.getAlgorithm(\"agc\"));\n> +                       if (!agc) {\n> +                               LOG(IPARPI, Warning) << \"HDR requires an AGC algorithm\";\n> +                               break;\n> +                       }\n> +\n> +                       if (hdr->setMode(mode->second) == 0)\n> +                               agc->setActiveChannels(hdr->getChannels());\n> +                       else\n> +                               LOG(IPARPI, Warning)\n> +                                       << \"HDR mode \" << mode->second << \" not supported\";\n> +\n> +                       break;\n> +               }\n> +\n>                 default:\n>                         LOG(IPARPI, Warning)\n>                                 << \"Ctrl \" << controls::controls.at(ctrl.first)->name()\n> @@ -1309,6 +1348,16 @@ void IpaBase::reportMetadata(unsigned int ipaContext)\n>                 libcameraMetadata_.set(controls::AfPauseState, p);\n>         }\n>  \n> +       const HdrStatus *hdrStatus = rpiMetadata.getLocked<HdrStatus>(\"hdr.status\");\n> +       if (hdrStatus) {\n> +               if (hdrStatus->channel == \"short\")\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelShort);\n> +               else if (hdrStatus->channel == \"long\")\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelLong);\n> +               else\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelNone);\n> +       }\n> +\n>         metadataReady.emit(libcameraMetadata_);\n>  }\n>  \n> -- \n> 2.30.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 5D8EEC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Jan 2024 13:39:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AAA7A62B41;\n\tTue,  9 Jan 2024 14:39:18 +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 8FEA361D7B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Jan 2024 14:39:17 +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 6B571922;\n\tTue,  9 Jan 2024 14:38:13 +0100 (CET)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1704807558;\n\tbh=gGAonZVP6oWfIEOtXviDQ1dVirgL1Ot4ULhvzn64Z90=;\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=txQABR1yZ02rQxC1dIMfcDwUq0LaV47dY2nsXrAJ425myF9XjsepuXbCGgCEZ4sLs\n\tw3zcAubGRIdKYScZQNMbcU467LHINhOqtIMPzh8OeyQPmCMKnPhZ4GLCMYvN8KsuTK\n\te/cA8M9M5ORps1/QrnyGif7MUIrtbwfYFLyx1obdRrFgfaiceq4kX+9Smma7x+9u7u\n\tnEB9kb7oNTfepPtegMLQhbESUHqGDYrjPZp8HpnH9c4RIKSFEHaQTFgjUP+c7k1XfE\n\t/hOjI8nzqSuWo+ltYahfM55FBGSPeQphNsvOUUu43wpSfqW5X9yy4k1nm79tO0lhpB\n\t8jI63k6j5+NCw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1704807493;\n\tbh=gGAonZVP6oWfIEOtXviDQ1dVirgL1Ot4ULhvzn64Z90=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=wMqmcWpa2PZooCcLbyEPdG59ersT9X0jNFsQk2u6jO08ZhhLiiewyVfxXvKJnnD7X\n\tIOHXvp5RNLdr7LFFNrG4/la06tM66muHNKBjwTMe91OTirj1N5lFcLWKci7cl9VJJu\n\tlhqxRTsLnj+a6LNHqkFSvTELzUA6cm22dQX4KBdw="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"wMqmcWpa\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20240109102547.2762-2-david.plowman@raspberrypi.com>","References":"<20240109102547.2762-1-david.plowman@raspberrypi.com>\n\t<20240109102547.2762-2-david.plowman@raspberrypi.com>","To":"David Plowman <david.plowman@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org,\n\tNaushir Patuck <naush@raspberrypi.com>, ","Date":"Tue, 09 Jan 2024 13:39:13 +0000","Message-ID":"<170480755371.3044059.4954145223437803185@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v4 1/2] ipa: rpi: Implement HDR control","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":28422,"web_url":"https://patchwork.libcamera.org/comment/28422/","msgid":"<CAEmqJPr1LqFsRw46WNZBi5BXDwfFaK_zHHT81w-QztcQOp5zzA@mail.gmail.com>","date":"2024-01-09T13:47:04","subject":"Re: [libcamera-devel] [PATCH v4 1/2] ipa: rpi: Implement HDR control","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi David,\n\nThanks for the update.\n\nOn Tue, 9 Jan 2024 at 10:25, David Plowman via libcamera-devel\n<libcamera-devel@lists.libcamera.org> wrote:\n>\n> Sufficient plumbing is added so that the HDR mode control can be used\n> to engage HDR modes on platforms that support them. On the vc4\n> platform, this allows multi-channel AGC to run, though there is no\n> image merging.\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/common/ipa_base.cpp | 49 +++++++++++++++++++++++++++++++++\n>  1 file changed, 49 insertions(+)\n>\n> diff --git a/src/ipa/rpi/common/ipa_base.cpp b/src/ipa/rpi/common/ipa_base.cpp\n> index 6ec91575..632b8d2f 100644\n> --- a/src/ipa/rpi/common/ipa_base.cpp\n> +++ b/src/ipa/rpi/common/ipa_base.cpp\n> @@ -24,6 +24,8 @@\n>  #include \"controller/ccm_status.h\"\n>  #include \"controller/contrast_algorithm.h\"\n>  #include \"controller/denoise_algorithm.h\"\n> +#include \"controller/hdr_algorithm.h\"\n> +#include \"controller/hdr_status.h\"\n>  #include \"controller/lux_status.h\"\n>  #include \"controller/sharpen_algorithm.h\"\n>  #include \"controller/statistics.h\"\n> @@ -67,6 +69,7 @@ const ControlInfoMap::Map ipaControls{\n>         { &controls::AeFlickerPeriod, ControlInfo(100, 1000000) },\n>         { &controls::Brightness, ControlInfo(-1.0f, 1.0f, 0.0f) },\n>         { &controls::Contrast, ControlInfo(0.0f, 32.0f, 1.0f) },\n> +       { &controls::HdrMode, ControlInfo(controls::HdrModeValues) },\n>         { &controls::Sharpness, ControlInfo(0.0f, 16.0f, 1.0f) },\n>         { &controls::ScalerCrop, ControlInfo(Rectangle{}, Rectangle(65535, 65535, 65535, 65535), Rectangle{}) },\n>         { &controls::FrameDurationLimits, ControlInfo(INT64_C(33333), INT64_C(120000)) },\n> @@ -688,9 +691,17 @@ static const std::map<int32_t, RPiController::AfAlgorithm::AfPause> AfPauseTable\n>         { controls::AfPauseResume, RPiController::AfAlgorithm::AfPauseResume },\n>  };\n>\n> +static const std::map<int32_t, std::string> HdrModeTable = {\n> +       { controls::HdrModeOff, \"Off\" },\n> +       { controls::HdrModeMultiExposure, \"MultiExposure\" },\n> +       { controls::HdrModeSingleExposure, \"SingleExposure\" },\n> +};\n> +\n>  void IpaBase::applyControls(const ControlList &controls)\n>  {\n> +       using RPiController::AgcAlgorithm;\n>         using RPiController::AfAlgorithm;\n> +       using RPiController::HdrAlgorithm;\n>\n>         /* Clear the return metadata buffer. */\n>         libcameraMetadata_.clear();\n> @@ -1162,6 +1173,34 @@ void IpaBase::applyControls(const ControlList &controls)\n>                         break;\n>                 }\n>\n> +               case controls::HDR_MODE: {\n> +                       HdrAlgorithm *hdr = dynamic_cast<HdrAlgorithm *>(controller_.getAlgorithm(\"hdr\"));\n> +                       if (!hdr) {\n> +                               LOG(IPARPI, Warning) << \"No HDR algorithm available\";\n> +                               break;\n> +                       }\n> +\n> +                       auto mode = HdrModeTable.find(ctrl.second.get<int32_t>());\n> +                       if (mode == HdrModeTable.end()) {\n> +                               LOG(IPARPI, Warning) << \"Unrecognised HDR mode\";\n> +                               break;\n> +                       }\n> +\n> +                       AgcAlgorithm *agc = dynamic_cast<AgcAlgorithm *>(controller_.getAlgorithm(\"agc\"));\n> +                       if (!agc) {\n> +                               LOG(IPARPI, Warning) << \"HDR requires an AGC algorithm\";\n> +                               break;\n> +                       }\n> +\n> +                       if (hdr->setMode(mode->second) == 0)\n> +                               agc->setActiveChannels(hdr->getChannels());\n> +                       else\n> +                               LOG(IPARPI, Warning)\n> +                                       << \"HDR mode \" << mode->second << \" not supported\";\n> +\n> +                       break;\n> +               }\n> +\n>                 default:\n>                         LOG(IPARPI, Warning)\n>                                 << \"Ctrl \" << controls::controls.at(ctrl.first)->name()\n> @@ -1309,6 +1348,16 @@ void IpaBase::reportMetadata(unsigned int ipaContext)\n>                 libcameraMetadata_.set(controls::AfPauseState, p);\n>         }\n>\n> +       const HdrStatus *hdrStatus = rpiMetadata.getLocked<HdrStatus>(\"hdr.status\");\n> +       if (hdrStatus) {\n> +               if (hdrStatus->channel == \"short\")\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelShort);\n> +               else if (hdrStatus->channel == \"long\")\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelLong);\n> +               else\n> +                       libcameraMetadata_.set(controls::HdrChannel, controls::HdrChannelNone);\n> +       }\n> +\n>         metadataReady.emit(libcameraMetadata_);\n>  }\n>\n> --\n> 2.30.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 45A49BEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue,  9 Jan 2024 13:47:43 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 767A862B41;\n\tTue,  9 Jan 2024 14:47:42 +0100 (CET)","from mail-yw1-x112c.google.com (mail-yw1-x112c.google.com\n\t[IPv6:2607:f8b0:4864:20::112c])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D3F8161D7B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue,  9 Jan 2024 14:47:40 +0100 (CET)","by mail-yw1-x112c.google.com with SMTP id\n\t00721157ae682-5edfcba97e3so30106787b3.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 09 Jan 2024 05:47:40 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1704808062;\n\tbh=Jzxd58RWu1aQzYzdbCGWCIoYjrk+jJH/pbptCBgMaHM=;\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=JiosyuuozEZAAnW0L3M9wXBosgCxqV+MvAGHTasANHqQnBjzsv+BDRZU38wR/ljuz\n\tFjZ339yEez84XzsLpkZHCJEJ5nmtaWjvD8+5Qa2SvGTYKa1z1FKxyGVfJXITRIQewN\n\tN1jbZiuHRCuKQWa6EEKycnO1IYlSRROokvno9LZB6Eq6AGHkK3NuUvwTT8nyASUhhC\n\tzrbjXS9LSO0zKeVgNQG/992waIqMqhhqR73kgcrbL4vWggfNjqvb/peO1Ju3YCv2Vt\n\tjLFCkwws53J5NfV9LP+xFIHx3RoH0unIpJgYTO/AmpXzb3xAyrzli8282qKBBEm41G\n\t1lTmzOtQK9dyg==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1704808059; x=1705412859;\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=7VnIVJDvWldNI73qR5T6jHkPWbLsCjiE6rIDRKGZPHY=;\n\tb=eICchKBv7sxMsMLsmLVNO4UmDXL6Rn+0k7z208BzfvfA62r5Wq/4DI7BEfbM/KzZPR\n\tYwAWUz/GhazErj+pxdZn7Sl1BR5TMlPSlJMTsuU9wVPgFxHVQO3R2ekk6yei27nOxoMn\n\tJ9wsExo5pm1FAgZPvFltm29Cep+/HZBLdbYbuFD7FiDNdaOTaQKn3fn84/eL/o6BC0W9\n\tr3BhZLpurpCD25Z1+UiMMvBALFMUjW1VIfjdNCtIOKQvLx7dttjtwliSbbSo7wraXag9\n\t6wLrRj0jQx4Y2walSin+MRILK31hNFJzChTY8NIN+g0Y8UDdLz6qU/1CPL5Jcesgijd1\n\tlzJg=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"eICchKBv\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1704808059; x=1705412859;\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=7VnIVJDvWldNI73qR5T6jHkPWbLsCjiE6rIDRKGZPHY=;\n\tb=SygOeWIOUXRV5zrqKGdcKX0Q0uhP4WgjKW4bJ56FPNye1IYxTFqdZ19UsXq63OKaDH\n\tf08GOZ6WVaY/z/SokVWAlCtNM6Bh8nxgXvU1XI5iUPMvm92yTls/gM+16E3Mn83Y2YVN\n\tFTC8ySJOFdb/MRj5a4/Z1yAC1+Ovz7T78xcANSNPdPdeAAEeYvWc2Ht+G+u95L950mox\n\tLSm6mlsl5kUCx99csVrFF9TYPz6kelOu7qh6tbJshL2CvfuRWNbrADrIUUNljCmfc7lI\n\t9IxSc8VuJX66SPj9mtvHmbrjEOvUr6yMRpUeuCMD9kol/dal/hi73sVo0toRw5LnzI5V\n\t+Mow==","X-Gm-Message-State":"AOJu0YzC3XdWf3Ag+uxKqVcAKohYK+Z32K8NHQagrBhJDL81/NAdkmo/\n\tEQvAB3ROrMvCiUqFWlPCAG7vfIer2gONJvQos8XqFu9PjAY0xw==","X-Google-Smtp-Source":"AGHT+IFafPmkRE/eCyVsBmVhkzkEf9dTh2+aKtUYsr18yQh3CHpbD/oXOvQlpOHwv+5s4seVHYWci7SuDTHX6FyIEds=","X-Received":"by 2002:a81:7156:0:b0:5d8:2b37:e085 with SMTP id\n\tm83-20020a817156000000b005d82b37e085mr4868422ywc.20.1704808059656;\n\tTue, 09 Jan 2024 05:47:39 -0800 (PST)","MIME-Version":"1.0","References":"<20240109102547.2762-1-david.plowman@raspberrypi.com>\n\t<20240109102547.2762-2-david.plowman@raspberrypi.com>","In-Reply-To":"<20240109102547.2762-2-david.plowman@raspberrypi.com>","Date":"Tue, 9 Jan 2024 13:47:04 +0000","Message-ID":"<CAEmqJPr1LqFsRw46WNZBi5BXDwfFaK_zHHT81w-QztcQOp5zzA@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"text/plain; charset=\"UTF-8\"","Subject":"Re: [libcamera-devel] [PATCH v4 1/2] ipa: rpi: Implement HDR control","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>"}}]