{"id":18189,"url":"https://patchwork.libcamera.org/api/1.1/patches/18189/?format=json","web_url":"https://patchwork.libcamera.org/patch/18189/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20230123154934.27803-15-naush@raspberrypi.com>","date":"2023-01-23T15:49:34","name":"[libcamera-devel,v2,14/14] ipa: raspberrypi: Add support for the Sony IMX708 sensor","commit_ref":"952ef94ed78d71625219cbc3705efe2ae6301d39","pull_url":null,"state":"accepted","archived":false,"hash":"7e746711ee8f8068ccf31286bc0b655c335f7435","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/1.1/people/34/?format=json","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/18189/mbox/","series":[{"id":3719,"url":"https://patchwork.libcamera.org/api/1.1/series/3719/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3719","date":"2023-01-23T15:49:20","name":"Raspberry Pi: Camera Module 3 support","version":2,"mbox":"https://patchwork.libcamera.org/series/3719/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/18189/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/18189/checks/","tags":{},"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 55890C3299\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Jan 2023 15:50:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0867A62615;\n\tMon, 23 Jan 2023 16:50:04 +0100 (CET)","from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com\n\t[IPv6:2a00:1450:4864:20::32a])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 49338625EB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jan 2023 16:49:58 +0100 (CET)","by mail-wm1-x32a.google.com with SMTP id\n\tl41-20020a05600c1d2900b003daf986faaeso8907006wms.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Jan 2023 07:49:58 -0800 (PST)","from localhost.localdomain ([93.93.133.154])\n\tby smtp.gmail.com with ESMTPSA id\n\tn16-20020a05600c181000b003d1de805de5sm10339689wmp.16.2023.01.23.07.49.55\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 23 Jan 2023 07:49:56 -0800 (PST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1674489004;\n\tbh=NFZHzx9tBB0J9ZDaep+GMl2UxKRQ5YnDca6InQjqL/0=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=V4N0sMMjUla7riwDkBb3EJCKTj1aRXTIcb/B/G5UWzYdjEysYwPzsvip5meWdojfk\n\ta0DMdjRE37fdXnHcC9zGkMtoBhXDgH6rUkJ9Vnu5zEanaBIs6K348ZaZzTBv9afFSW\n\tFOS0a3O7ZffURamDfDBYKVPTOug8KD5vrUd5UQ1tg3JKt30EPXBT5yENRxaKVWRVud\n\tfsIfFecErDoCeS/+s7Zfaz2P7OOPwgo2usLSdVotlI2kJn+km4BdLkY2HtNlKC8Yz1\n\tUJRNX8Cgecj/DeyC8HP+YOfBiaV6iUHQSFsc9zfuI/1FlO9xmIfXY86Dg7/wMOHLSZ\n\top9Jv1Jx4WmjA==","v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=uVD7+ljkS2v9d4lIabXXhsA4gNUDOo839+W0Zy3qys4=;\n\tb=r7kAKHXC+C97nD5tx6ffasd47vSfmfDC66WpYefJXMeeegZ70esGBnpIqO4AcDzJ0Q\n\teRscskzpguNM7oX+qRusP/V4+LeaHX+Jq7i9FG2ZO0Gluznyji7lMjEw820CPod8nPBt\n\tgkKzQhqLt/qCRgGju0lKjmfjzNTBZbtBSdr2bvgcbmSLSZWUi8iVK+QHT2rqiU+0AMk6\n\t0cra7jkgfGUkYUCk0NA6X1o99mG2kYvrGNC6dsQvGJjkHQN/lM7HCTFu7ubFepj06IVz\n\tH4eNW77/iNry7H5SJFRXqAPjeappi/WfJw7Y/J6LvaHx0eojFFgHGnNGYWQShWS1RFRP\n\t2n3g=="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"r7kAKHXC\"; dkim-atps=neutral","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=uVD7+ljkS2v9d4lIabXXhsA4gNUDOo839+W0Zy3qys4=;\n\tb=SVrcgmYNEkm3nuCozc7tYTDsMj875jaAJv2BkZn6WHT51o+NCl2BVECYV0tMXtIAlY\n\ty2WaDbE4QNMa2ds6yHi+xL9abn50zwAz2EcLnBUF29uf4pFhJQbq4tH6b8/Tyi2J99Aj\n\tJkxezshOugWrX5K7wHlbL3wqSTOd3jaF/AYTSWG+2G3vIecMsaflHK0j69Bpu36WGEgW\n\tqOqipYUjLDToHjjwVJbWmjlZ0jvOll5/AD91aKCYlpvYJ3JN8V+VKwcG0sBiBv8R8Z72\n\tkRQy9iNVmddSjAeNOwc653Q1GBjO0VQdyKxzof5VeIFoBOnO/ZzOJ2q1hcHdbDNSJirW\n\tSpmA==","X-Gm-Message-State":"AFqh2krKTtdyI1wpaBuKQ9IKRRd3dYG08JcDDG/qF09HvLKBNysdIU/l\n\thtTz4IwZUeGwbinKFyq2YClvxukh0/q96NNAgz8=","X-Google-Smtp-Source":"AMrXdXv+FFBqwBsz6LAeq8r981EjBqmknQ+x5xQhJY+feHKziUBsuVQYp/E2zKei6qQZW0PJtoFpWA==","X-Received":"by 2002:a05:600c:3ba9:b0:3da:b40f:7a55 with SMTP id\n\tn41-20020a05600c3ba900b003dab40f7a55mr30788864wms.6.1674488996605; \n\tMon, 23 Jan 2023 07:49:56 -0800 (PST)","To":"libcamera-devel@lists.libcamera.org","Date":"Mon, 23 Jan 2023 15:49:34 +0000","Message-Id":"<20230123154934.27803-15-naush@raspberrypi.com>","X-Mailer":"git-send-email 2.25.1","In-Reply-To":"<20230123154934.27803-1-naush@raspberrypi.com>","References":"<20230123154934.27803-1-naush@raspberrypi.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v2 14/14] ipa: raspberrypi: Add support\n\tfor the Sony IMX708 sensor","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":"Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"From: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>\n\nAdd support for Raspberry Pi Camera 3 modules (Sony IMX708 camera sensor) to the\nRaspberry Pi IPA. These modules are available in either normal or wide angle\nlens, both with IR or no IR cut options, giving a total for 4 variants. Provide\nIQ tuning files for all four variants.\n\nThe IMX708 camera helper additionally parses PDAF and HDR histogram data that\nis provided in the embedded data stream from Unicam.\n\nSigned-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>\nSigned-off-by: Naushir Patuck <naush@raspberrypi.com>\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\nReviewed-by: David Plowman <david.plowman@raspberrypi.com>\n---\n src/ipa/raspberrypi/cam_helper_imx708.cpp     | 350 +++++++++++\n src/ipa/raspberrypi/data/imx708.json          | 559 ++++++++++++++++++\n src/ipa/raspberrypi/data/imx708_noir.json     | 559 ++++++++++++++++++\n src/ipa/raspberrypi/data/imx708_wide.json     | 462 +++++++++++++++\n .../raspberrypi/data/imx708_wide_noir.json    | 462 +++++++++++++++\n src/ipa/raspberrypi/data/meson.build          |   4 +\n src/ipa/raspberrypi/meson.build               |   1 +\n 7 files changed, 2397 insertions(+)\n create mode 100644 src/ipa/raspberrypi/cam_helper_imx708.cpp\n create mode 100644 src/ipa/raspberrypi/data/imx708.json\n create mode 100644 src/ipa/raspberrypi/data/imx708_noir.json\n create mode 100644 src/ipa/raspberrypi/data/imx708_wide.json\n create mode 100644 src/ipa/raspberrypi/data/imx708_wide_noir.json","diff":"diff --git a/src/ipa/raspberrypi/cam_helper_imx708.cpp b/src/ipa/raspberrypi/cam_helper_imx708.cpp\nnew file mode 100644\nindex 000000000000..4c43c8e7fb7d\n--- /dev/null\n+++ b/src/ipa/raspberrypi/cam_helper_imx708.cpp\n@@ -0,0 +1,350 @@\n+/* SPDX-License-Identifier: BSD-2-Clause */\n+/*\n+ * Copyright (C) 2022, Raspberry Pi Ltd\n+ *\n+ * cam_helper_imx708.cpp - camera helper for imx708 sensor\n+ */\n+\n+#include <cmath>\n+#include <stddef.h>\n+#include <stdio.h>\n+#include <stdlib.h>\n+\n+#include <libcamera/base/log.h>\n+\n+#include \"controller/pdaf_data.h\"\n+\n+#include \"cam_helper.h\"\n+#include \"md_parser.h\"\n+\n+using namespace RPiController;\n+using namespace libcamera;\n+using libcamera::utils::Duration;\n+\n+namespace libcamera {\n+LOG_DECLARE_CATEGORY(IPARPI)\n+}\n+\n+/*\n+ * We care about two gain registers and a pair of exposure registers. Their\n+ * I2C addresses from the Sony imx708 datasheet:\n+ */\n+constexpr uint32_t expHiReg = 0x0202;\n+constexpr uint32_t expLoReg = 0x0203;\n+constexpr uint32_t gainHiReg = 0x0204;\n+constexpr uint32_t gainLoReg = 0x0205;\n+constexpr uint32_t frameLengthHiReg = 0x0340;\n+constexpr uint32_t frameLengthLoReg = 0x0341;\n+constexpr uint32_t lineLengthHiReg = 0x0342;\n+constexpr uint32_t lineLengthLoReg = 0x0343;\n+constexpr uint32_t temperatureReg = 0x013a;\n+constexpr std::initializer_list<uint32_t> registerList =\n+\t{ expHiReg, expLoReg, gainHiReg, gainLoReg, lineLengthHiReg,\n+\t  lineLengthLoReg, frameLengthHiReg, frameLengthLoReg, temperatureReg };\n+\n+class CamHelperImx708 : public CamHelper\n+{\n+public:\n+\tCamHelperImx708();\n+\tuint32_t gainCode(double gain) const override;\n+\tdouble gain(uint32_t gain_code) const override;\n+\tvoid prepare(libcamera::Span<const uint8_t> buffer, Metadata &metadata) override;\n+\tvoid process(StatisticsPtr &stats, Metadata &metadata) override;\n+\tstd::pair<uint32_t, uint32_t> getBlanking(Duration &exposure, Duration minFrameDuration,\n+\t\t\t\t\t\t  Duration maxFrameDuration) const override;\n+\tvoid getDelays(int &exposureDelay, int &gainDelay,\n+\t\t       int &vblankDelay, int &hblankDelay) const override;\n+\tbool sensorEmbeddedDataPresent() const override;\n+\tdouble getModeSensitivity(const CameraMode &mode) const override;\n+\tunsigned int hideFramesModeSwitch() const override { return 1; } // seems to be required for HDR\n+\n+private:\n+\t/*\n+\t * Smallest difference between the frame length and integration time,\n+\t * in units of lines.\n+\t */\n+\tstatic constexpr int frameIntegrationDiff = 22;\n+\t/* Maximum frame length allowable for long exposure calculations. */\n+\tstatic constexpr int frameLengthMax = 0xffdc;\n+\t/* Largest long exposure scale factor given as a left shift on the frame length. */\n+\tstatic constexpr int longExposureShiftMax = 7;\n+\n+\tvoid populateMetadata(const MdParser::RegisterMap &registers,\n+\t\t\t      Metadata &metadata) const override;\n+\n+\tstatic bool parsePdafData(const uint8_t *ptr, size_t len, unsigned bpp,\n+\t\t\t\t  PdafData &pdaf);\n+\n+\tbool parseAEHist(const uint8_t *ptr, size_t len, unsigned bpp);\n+\tvoid putAGCStatistics(StatisticsPtr stats);\n+\n+\tuint32_t aeHistLinear_[128];\n+\tuint32_t aeHistAverage_;\n+\tbool aeHistValid_;\n+};\n+\n+CamHelperImx708::CamHelperImx708()\n+\t: CamHelper(std::make_unique<MdParserSmia>(registerList), frameIntegrationDiff),\n+\t  aeHistLinear_{ 0 }, aeHistAverage_(0), aeHistValid_(false)\n+{\n+}\n+\n+uint32_t CamHelperImx708::gainCode(double gain) const\n+{\n+\treturn static_cast<uint32_t>(1024 - 1024 / gain);\n+}\n+\n+double CamHelperImx708::gain(uint32_t gain_code) const\n+{\n+\treturn 1024.0 / (1024 - gain_code);\n+}\n+\n+void CamHelperImx708::prepare(libcamera::Span<const uint8_t> buffer, Metadata &metadata)\n+{\n+\tMdParser::RegisterMap registers;\n+\tDeviceStatus deviceStatus;\n+\n+\tLOG(IPARPI, Debug) << \"Embedded buffer size: \" << buffer.size();\n+\n+\tif (metadata.get(\"device.status\", deviceStatus)) {\n+\t\tLOG(IPARPI, Error) << \"DeviceStatus not found from DelayedControls\";\n+\t\treturn;\n+\t}\n+\n+\tparseEmbeddedData(buffer, metadata);\n+\n+\t/*\n+\t * Parse PDAF data, which we expect to occupy the third scanline\n+\t * of embedded data. As PDAF is quite sensor-specific, it's parsed here.\n+\t */\n+\tsize_t bytesPerLine = (mode_.width * mode_.bitdepth) >> 3;\n+\n+\tif (buffer.size() > 2 * bytesPerLine) {\n+\t\tPdafData pdaf;\n+\t\tif (parsePdafData(&buffer[2 * bytesPerLine],\n+\t\t\t\t  buffer.size() - 2 * bytesPerLine,\n+\t\t\t\t  mode_.bitdepth, pdaf))\n+\t\t\tmetadata.set(\"pdaf.data\", pdaf);\n+\t}\n+\n+\t/* Parse AE-HIST data where present */\n+\tif (buffer.size() > 3 * bytesPerLine) {\n+\t\taeHistValid_ = parseAEHist(&buffer[3 * bytesPerLine],\n+\t\t\t\t\t   buffer.size() - 3 * bytesPerLine,\n+\t\t\t\t\t   mode_.bitdepth);\n+\t}\n+\n+\t/*\n+\t * The DeviceStatus struct is first populated with values obtained from\n+\t * DelayedControls. If this reports frame length is > frameLengthMax,\n+\t * it means we are using a long exposure mode. Since the long exposure\n+\t * scale factor is not returned back through embedded data, we must rely\n+\t * on the existing exposure lines and frame length values returned by\n+\t * DelayedControls.\n+\t *\n+\t * Otherwise, all values are updated with what is reported in the\n+\t * embedded data.\n+\t */\n+\tif (deviceStatus.frameLength > frameLengthMax) {\n+\t\tDeviceStatus parsedDeviceStatus;\n+\n+\t\tmetadata.get(\"device.status\", parsedDeviceStatus);\n+\t\tparsedDeviceStatus.shutterSpeed = deviceStatus.shutterSpeed;\n+\t\tparsedDeviceStatus.frameLength = deviceStatus.frameLength;\n+\t\tmetadata.set(\"device.status\", parsedDeviceStatus);\n+\n+\t\tLOG(IPARPI, Debug) << \"Metadata updated for long exposure: \"\n+\t\t\t\t   << parsedDeviceStatus;\n+\t}\n+}\n+\n+void CamHelperImx708::process(StatisticsPtr &stats, [[maybe_unused]] Metadata &metadata)\n+{\n+\tif (aeHistValid_)\n+\t\tputAGCStatistics(stats);\n+}\n+\n+std::pair<uint32_t, uint32_t> CamHelperImx708::getBlanking(Duration &exposure,\n+\t\t\t\t\t\t\t   Duration minFrameDuration,\n+\t\t\t\t\t\t\t   Duration maxFrameDuration) const\n+{\n+\tuint32_t frameLength, exposureLines;\n+\tunsigned int shift = 0;\n+\n+\tauto [vblank, hblank] = CamHelper::getBlanking(exposure, minFrameDuration,\n+\t\t\t\t\t\t       maxFrameDuration);\n+\n+\tframeLength = mode_.height + vblank;\n+\tDuration lineLength = hblankToLineLength(hblank);\n+\n+\t/*\n+\t * Check if the frame length calculated needs to be setup for long\n+\t * exposure mode. This will require us to use a long exposure scale\n+\t * factor provided by a shift operation in the sensor.\n+\t */\n+\twhile (frameLength > frameLengthMax) {\n+\t\tif (++shift > longExposureShiftMax) {\n+\t\t\tshift = longExposureShiftMax;\n+\t\t\tframeLength = frameLengthMax;\n+\t\t\tbreak;\n+\t\t}\n+\t\tframeLength >>= 1;\n+\t}\n+\n+\tif (shift) {\n+\t\t/* Account for any rounding in the scaled frame length value. */\n+\t\tframeLength <<= shift;\n+\t\texposureLines = CamHelper::exposureLines(exposure, lineLength);\n+\t\texposureLines = std::min(exposureLines, frameLength - frameIntegrationDiff);\n+\t\texposure = CamHelper::exposure(exposureLines, lineLength);\n+\t}\n+\n+\treturn { frameLength - mode_.height, hblank };\n+}\n+\n+void CamHelperImx708::getDelays(int &exposureDelay, int &gainDelay,\n+\t\t\t\tint &vblankDelay, int &hblankDelay) const\n+{\n+\texposureDelay = 2;\n+\tgainDelay = 2;\n+\tvblankDelay = 3;\n+\thblankDelay = 3;\n+}\n+\n+bool CamHelperImx708::sensorEmbeddedDataPresent() const\n+{\n+\treturn true;\n+}\n+\n+double CamHelperImx708::getModeSensitivity(const CameraMode &mode) const\n+{\n+\t/* In binned modes, sensitivity increases by a factor of 2 */\n+\treturn (mode.width > 2304) ? 1.0 : 2.0;\n+}\n+\n+void CamHelperImx708::populateMetadata(const MdParser::RegisterMap &registers,\n+\t\t\t\t       Metadata &metadata) const\n+{\n+\tDeviceStatus deviceStatus;\n+\n+\tdeviceStatus.lineLength = lineLengthPckToDuration(registers.at(lineLengthHiReg) * 256 +\n+\t\t\t\t\t\t\t  registers.at(lineLengthLoReg));\n+\tdeviceStatus.shutterSpeed = exposure(registers.at(expHiReg) * 256 + registers.at(expLoReg),\n+\t\t\t\t\t     deviceStatus.lineLength);\n+\tdeviceStatus.analogueGain = gain(registers.at(gainHiReg) * 256 + registers.at(gainLoReg));\n+\tdeviceStatus.frameLength = registers.at(frameLengthHiReg) * 256 + registers.at(frameLengthLoReg);\n+\tdeviceStatus.sensorTemperature = std::clamp<int8_t>(registers.at(temperatureReg), -20, 80);\n+\n+\tmetadata.set(\"device.status\", deviceStatus);\n+}\n+\n+bool CamHelperImx708::parsePdafData(const uint8_t *ptr, size_t len,\n+\t\t\t\t    unsigned bpp, PdafData &pdaf)\n+{\n+\tsize_t step = bpp >> 1; /* bytes per PDAF grid entry */\n+\n+\tif (bpp < 10 || bpp > 12 || len < 194 * step || ptr[0] != 0 || ptr[1] >= 0x40) {\n+\t\tLOG(IPARPI, Error) << \"PDAF data in unsupported format\";\n+\t\treturn false;\n+\t}\n+\n+\tptr += 2 * step;\n+\tfor (unsigned i = 0; i < PDAF_DATA_ROWS; ++i) {\n+\t\tfor (unsigned j = 0; j < PDAF_DATA_COLS; ++j) {\n+\t\t\tunsigned c = (ptr[0] << 3) | (ptr[1] >> 5);\n+\t\t\tint p = (((ptr[1] & 0x0F) - (ptr[1] & 0x10)) << 6) | (ptr[2] >> 2);\n+\t\t\tpdaf.conf[i][j] = c;\n+\t\t\tpdaf.phase[i][j] = c ? p : 0;\n+\t\t\tptr += step;\n+\t\t}\n+\t}\n+\n+\treturn true;\n+}\n+\n+bool CamHelperImx708::parseAEHist(const uint8_t *ptr, size_t len, unsigned bpp)\n+{\n+\tstatic const uint32_t ISP_PIPELINE_BITS = 13;\n+\tuint64_t count = 0, sum = 0;\n+\tsize_t step = bpp >> 1; /* bytes per histogram bin */\n+\n+\tif (len < 144 * step)\n+\t\treturn false;\n+\n+\t/*\n+\t * Read the 128 bin linear histogram, which by default covers\n+\t * the full range of the HDR shortest exposure (small values are\n+\t * expected to dominate, so pixel-value resolution will be poor).\n+\t */\n+\tfor (unsigned i = 0; i < 128; ++i) {\n+\t\tif (ptr[3] != 0x55)\n+\t\t\treturn false;\n+\t\tuint32_t c = (ptr[0] << 14) + (ptr[1] << 6) + (ptr[2] >> 2);\n+\t\taeHistLinear_[i] = c >> 2; /* pixels to quads */\n+\t\tif (i != 0) {\n+\t\t\tcount += c;\n+\t\t\tsum += c *\n+\t\t\t       (i * (1u << (ISP_PIPELINE_BITS - 7)) +\n+\t\t\t\t(1u << (ISP_PIPELINE_BITS - 8)));\n+\t\t}\n+\t\tptr += step;\n+\t}\n+\n+\t/*\n+\t * Now use the first 9 bins of the log histogram (these should be\n+\t * subdivisions of the smallest linear bin), to get a more accurate\n+\t * average value. Don't assume that AEHIST1_AVERAGE is present.\n+\t */\n+\tfor (unsigned i = 0; i < 9; ++i) {\n+\t\tif (ptr[3] != 0x55)\n+\t\t\treturn false;\n+\t\tuint32_t c = (ptr[0] << 14) + (ptr[1] << 6) + (ptr[2] >> 2);\n+\t\tcount += c;\n+\t\tsum += c *\n+\t\t       ((3u << ISP_PIPELINE_BITS) >> (17 - i));\n+\t\tptr += step;\n+\t}\n+\tif ((unsigned)((ptr[0] << 12) + (ptr[1] << 4) + (ptr[2] >> 4)) !=\n+\t    aeHistLinear_[1]) {\n+\t\tLOG(IPARPI, Error) << \"Lin/Log histogram mismatch\";\n+\t\treturn false;\n+\t}\n+\n+\taeHistAverage_ = count ? (sum / count) : 0;\n+\n+\treturn count != 0;\n+}\n+\n+void CamHelperImx708::putAGCStatistics(StatisticsPtr stats)\n+{\n+\t/*\n+\t * For HDR mode, copy sensor's AE/AGC statistics over ISP's, so the\n+\t * AGC algorithm sees a linear response to exposure and gain changes.\n+\t *\n+\t * Histogram: Just copy the \"raw\" histogram over the tone-mapped one,\n+\t * although they have different distributions (raw values are lower).\n+\t * Tuning should either ignore it, or constrain for highlights only.\n+\t *\n+\t * Average: Overwrite all regional averages with a global raw average,\n+\t * scaled by a fiddle-factor so that a conventional (non-HDR) y_target\n+\t * of e.g. 0.17 will map to a suitable level for HDR.\n+\t */\n+\tmemcpy(stats->hist[0].g_hist, aeHistLinear_, sizeof(stats->hist[0].g_hist));\n+\n+\tconstexpr unsigned int HdrHeadroomFactor = 4;\n+\tuint64_t v = HdrHeadroomFactor * aeHistAverage_;\n+\tfor (int i = 0; i < AGC_REGIONS; i++) {\n+\t\tstruct bcm2835_isp_stats_region &r = stats->agc_stats[i];\n+\t\tr.r_sum = r.b_sum = r.g_sum = r.counted * v;\n+\t}\n+}\n+\n+static CamHelper *create()\n+{\n+\treturn new CamHelperImx708();\n+}\n+\n+static RegisterCamHelper reg(\"imx708\", &create);\n+static RegisterCamHelper regWide(\"imx708_wide\", &create);\n+static RegisterCamHelper regNoIr(\"imx708_noir\", &create);\n+static RegisterCamHelper regWideNoIr(\"imx708_wide_noir\", &create);\ndiff --git a/src/ipa/raspberrypi/data/imx708.json b/src/ipa/raspberrypi/data/imx708.json\nnew file mode 100644\nindex 000000000000..c38b2d4cf256\n--- /dev/null\n+++ b/src/ipa/raspberrypi/data/imx708.json\n@@ -0,0 +1,559 @@\n+{\n+    \"version\": 2.0,\n+    \"target\": \"bcm2835\",\n+    \"algorithms\": [\n+        {\n+            \"rpi.black_level\":\n+            {\n+                \"black_level\": 4096\n+            }\n+        },\n+        {\n+            \"rpi.dpc\": { }\n+        },\n+        {\n+            \"rpi.lux\":\n+            {\n+                \"reference_shutter_speed\": 10672,\n+                \"reference_gain\": 1.12,\n+                \"reference_aperture\": 1.0,\n+                \"reference_lux\": 977,\n+                \"reference_Y\": 8627\n+            }\n+        },\n+        {\n+            \"rpi.noise\":\n+            {\n+                \"reference_constant\": 16.0,\n+                \"reference_slope\": 4.0\n+            }\n+        },\n+        {\n+            \"rpi.geq\":\n+            {\n+                \"offset\": 215,\n+                \"slope\": 0.00287\n+            }\n+        },\n+        {\n+            \"rpi.sdn\": { }\n+        },\n+        {\n+            \"rpi.awb\":\n+            {\n+                \"priors\": [\n+                    {\n+                        \"lux\": 0,\n+                        \"prior\":\n+                        [\n+                            2000, 1.0,\n+                            3000, 0.0,\n+                            13000, 0.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 800,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            6000, 2.0,\n+                            13000, 2.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 1500,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            4000, 1.0,\n+                            6000, 6.0,\n+                            6500, 7.0,\n+                            7000, 1.0,\n+                            13000, 1.0\n+                        ]\n+                    }\n+                ],\n+                \"modes\":\n+                {\n+                    \"auto\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 8000\n+                    },\n+                    \"incandescent\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 3000\n+                    },\n+                    \"tungsten\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 3500\n+                    },\n+                    \"fluorescent\":\n+                    {\n+                        \"lo\": 4000,\n+                        \"hi\": 4700\n+                    },\n+                    \"indoor\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 5000\n+                    },\n+                    \"daylight\":\n+                    {\n+                        \"lo\": 5500,\n+                        \"hi\": 6500\n+                    },\n+                    \"cloudy\":\n+                    {\n+                        \"lo\": 7000,\n+                        \"hi\": 8600\n+                    }\n+                },\n+                \"bayes\": 1,\n+                \"ct_curve\":\n+                [\n+                    2498.0, 0.8733, 0.2606,\n+                    2821.0, 0.7707, 0.3245,\n+                    2925.0, 0.7338, 0.3499,\n+                    2926.0, 0.7193, 0.3603,\n+                    2951.0, 0.7144, 0.3639,\n+                    2954.0, 0.7111, 0.3663,\n+                    3578.0, 0.6038, 0.4516,\n+                    3717.0, 0.5861, 0.4669,\n+                    3784.0, 0.5786, 0.4737,\n+                    4485.0, 0.5113, 0.5368,\n+                    4615.0, 0.4994, 0.5486,\n+                    4671.0, 0.4927, 0.5554,\n+                    5753.0, 0.4274, 0.6246,\n+                    5773.0, 0.4265, 0.6256,\n+                    7433.0, 0.3723, 0.6881\n+                ],\n+                \"sensitivity_r\": 1.05,\n+                \"sensitivity_b\": 1.05,\n+                \"transverse_pos\": 0.03148,\n+                \"transverse_neg\": 0.03061\n+            }\n+        },\n+        {\n+            \"rpi.agc\":\n+            {\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\": [ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 15000, 30000, 60000, 120000 ],\n+                        \"gain\": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 5000, 10000, 20000, 120000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        }\n+                    ],\n+                    \"highlight\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.8,\n+                                1000, 0.8\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ],\n+                \"startup_frames\": 5,\n+                \"convergence_frames\": 6,\n+                \"speed\": 0.15\n+            }\n+        },\n+        {\n+            \"rpi.alsc\":\n+            {\n+                \"omega\": 1.3,\n+                \"n_iter\": 100,\n+                \"luminance_strength\": 0.5,\n+                \"calibrations_Cr\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            1.562, 1.566, 1.566, 1.556, 1.533, 1.506, 1.475, 1.475, 1.475, 1.475, 1.506, 1.533, 1.555, 1.563, 1.562, 1.555,\n+                            1.563, 1.564, 1.561, 1.538, 1.508, 1.482, 1.449, 1.436, 1.436, 1.449, 1.481, 1.508, 1.537, 1.557, 1.558, 1.557,\n+                            1.564, 1.563, 1.554, 1.522, 1.482, 1.449, 1.421, 1.403, 1.403, 1.419, 1.449, 1.481, 1.519, 1.549, 1.557, 1.559,\n+                            1.564, 1.563, 1.545, 1.506, 1.462, 1.421, 1.403, 1.378, 1.378, 1.402, 1.419, 1.459, 1.503, 1.541, 1.557, 1.559,\n+                            1.564, 1.562, 1.537, 1.494, 1.447, 1.404, 1.378, 1.364, 1.364, 1.377, 1.402, 1.444, 1.491, 1.532, 1.556, 1.559,\n+                            1.564, 1.559, 1.532, 1.487, 1.438, 1.395, 1.365, 1.359, 1.359, 1.364, 1.393, 1.436, 1.484, 1.527, 1.555, 1.558,\n+                            1.564, 1.559, 1.532, 1.487, 1.438, 1.395, 1.365, 1.356, 1.356, 1.364, 1.393, 1.436, 1.484, 1.527, 1.554, 1.557,\n+                            1.564, 1.561, 1.536, 1.492, 1.444, 1.402, 1.374, 1.364, 1.363, 1.373, 1.401, 1.442, 1.489, 1.531, 1.554, 1.557,\n+                            1.564, 1.563, 1.544, 1.504, 1.458, 1.418, 1.397, 1.374, 1.374, 1.395, 1.416, 1.456, 1.501, 1.538, 1.556, 1.557,\n+                            1.564, 1.562, 1.551, 1.518, 1.477, 1.441, 1.418, 1.397, 1.397, 1.416, 1.438, 1.474, 1.514, 1.546, 1.556, 1.556,\n+                            1.562, 1.562, 1.558, 1.534, 1.499, 1.476, 1.441, 1.426, 1.426, 1.438, 1.473, 1.496, 1.531, 1.552, 1.556, 1.555,\n+                            1.561, 1.564, 1.564, 1.552, 1.525, 1.497, 1.466, 1.461, 1.461, 1.464, 1.495, 1.523, 1.548, 1.556, 1.556, 1.552\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            2.609, 2.616, 2.617, 2.607, 2.573, 2.527, 2.483, 2.481, 2.481, 2.483, 2.529, 2.573, 2.604, 2.613, 2.613, 2.604,\n+                            2.609, 2.615, 2.608, 2.576, 2.533, 2.489, 2.439, 2.418, 2.418, 2.439, 2.491, 2.532, 2.577, 2.605, 2.609, 2.607,\n+                            2.611, 2.611, 2.597, 2.551, 2.489, 2.439, 2.391, 2.364, 2.364, 2.391, 2.439, 2.491, 2.551, 2.592, 2.607, 2.609,\n+                            2.612, 2.608, 2.583, 2.526, 2.457, 2.391, 2.362, 2.318, 2.318, 2.362, 2.391, 2.458, 2.526, 2.581, 2.607, 2.611,\n+                            2.612, 2.604, 2.571, 2.507, 2.435, 2.362, 2.317, 2.293, 2.294, 2.318, 2.363, 2.434, 2.508, 2.568, 2.604, 2.612,\n+                            2.611, 2.602, 2.564, 2.496, 2.419, 2.349, 2.293, 2.284, 2.284, 2.294, 2.347, 2.421, 2.497, 2.562, 2.603, 2.611,\n+                            2.609, 2.601, 2.564, 2.496, 2.419, 2.349, 2.293, 2.278, 2.278, 2.294, 2.347, 2.421, 2.497, 2.562, 2.602, 2.609,\n+                            2.609, 2.602, 2.568, 2.503, 2.429, 2.361, 2.311, 2.292, 2.292, 2.309, 2.357, 2.429, 2.504, 2.567, 2.602, 2.609,\n+                            2.606, 2.604, 2.579, 2.519, 2.449, 2.384, 2.348, 2.311, 2.311, 2.346, 2.383, 2.449, 2.521, 2.577, 2.604, 2.608,\n+                            2.604, 2.603, 2.586, 2.537, 2.474, 2.418, 2.384, 2.348, 2.348, 2.383, 2.417, 2.476, 2.538, 2.586, 2.601, 2.603,\n+                            2.603, 2.605, 2.596, 2.561, 2.508, 2.474, 2.418, 2.396, 2.396, 2.417, 2.474, 2.511, 2.562, 2.596, 2.603, 2.602,\n+                            2.601, 2.607, 2.606, 2.589, 2.549, 2.507, 2.456, 2.454, 2.454, 2.458, 2.508, 2.554, 2.594, 2.605, 2.605, 2.602\n+                        ]\n+                    }\n+                ],\n+                \"calibrations_Cb\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            3.221, 3.226, 3.231, 3.236, 3.239, 3.243, 3.245, 3.247, 3.249, 3.253, 3.255, 3.254, 3.253, 3.242, 3.235, 3.226,\n+                            3.225, 3.231, 3.235, 3.238, 3.241, 3.244, 3.246, 3.247, 3.249, 3.254, 3.256, 3.255, 3.252, 3.248, 3.241, 3.232,\n+                            3.226, 3.234, 3.239, 3.243, 3.243, 3.245, 3.247, 3.248, 3.251, 3.255, 3.256, 3.256, 3.254, 3.249, 3.244, 3.236,\n+                            3.232, 3.238, 3.245, 3.245, 3.246, 3.247, 3.248, 3.251, 3.251, 3.256, 3.257, 3.257, 3.256, 3.254, 3.249, 3.239,\n+                            3.232, 3.243, 3.246, 3.246, 3.246, 3.247, 3.248, 3.251, 3.253, 3.257, 3.258, 3.258, 3.257, 3.256, 3.254, 3.239,\n+                            3.232, 3.242, 3.246, 3.247, 3.246, 3.246, 3.248, 3.251, 3.252, 3.253, 3.256, 3.255, 3.255, 3.254, 3.251, 3.239,\n+                            3.233, 3.241, 3.244, 3.245, 3.244, 3.245, 3.246, 3.249, 3.251, 3.252, 3.253, 3.252, 3.252, 3.252, 3.249, 3.238,\n+                            3.238, 3.241, 3.246, 3.246, 3.245, 3.245, 3.247, 3.249, 3.251, 3.252, 3.253, 3.253, 3.252, 3.252, 3.249, 3.239,\n+                            3.235, 3.241, 3.245, 3.245, 3.245, 3.245, 3.246, 3.247, 3.251, 3.254, 3.253, 3.255, 3.256, 3.255, 3.251, 3.241,\n+                            3.226, 3.235, 3.241, 3.241, 3.241, 3.241, 3.243, 3.245, 3.246, 3.252, 3.253, 3.254, 3.256, 3.254, 3.241, 3.237,\n+                            3.205, 3.213, 3.213, 3.214, 3.214, 3.214, 3.214, 3.213, 3.213, 3.216, 3.218, 3.216, 3.214, 3.213, 3.211, 3.208,\n+                            3.205, 3.205, 3.212, 3.212, 3.212, 3.213, 3.211, 3.211, 3.211, 3.213, 3.216, 3.214, 3.213, 3.211, 3.208, 3.196\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            1.645, 1.646, 1.649, 1.653, 1.654, 1.657, 1.659, 1.661, 1.663, 1.662, 1.661, 1.659, 1.656, 1.651, 1.645, 1.642,\n+                            1.646, 1.649, 1.652, 1.654, 1.656, 1.659, 1.662, 1.663, 1.664, 1.664, 1.662, 1.661, 1.657, 1.653, 1.649, 1.644,\n+                            1.648, 1.652, 1.654, 1.656, 1.658, 1.662, 1.665, 1.668, 1.668, 1.668, 1.665, 1.662, 1.658, 1.655, 1.652, 1.646,\n+                            1.649, 1.653, 1.656, 1.658, 1.661, 1.665, 1.667, 1.671, 1.673, 1.671, 1.668, 1.663, 1.659, 1.656, 1.654, 1.647,\n+                            1.649, 1.655, 1.657, 1.659, 1.661, 1.666, 1.671, 1.674, 1.675, 1.673, 1.671, 1.664, 1.659, 1.656, 1.654, 1.648,\n+                            1.649, 1.654, 1.656, 1.659, 1.661, 1.666, 1.673, 1.676, 1.676, 1.675, 1.671, 1.664, 1.659, 1.656, 1.654, 1.648,\n+                            1.649, 1.654, 1.656, 1.658, 1.659, 1.665, 1.672, 1.675, 1.675, 1.674, 1.668, 1.662, 1.658, 1.655, 1.654, 1.646,\n+                            1.652, 1.655, 1.657, 1.659, 1.661, 1.665, 1.671, 1.673, 1.673, 1.672, 1.668, 1.662, 1.658, 1.655, 1.654, 1.647,\n+                            1.652, 1.655, 1.657, 1.659, 1.661, 1.664, 1.667, 1.671, 1.672, 1.668, 1.666, 1.662, 1.659, 1.656, 1.654, 1.647,\n+                            1.647, 1.652, 1.655, 1.656, 1.657, 1.661, 1.664, 1.665, 1.665, 1.665, 1.663, 1.661, 1.657, 1.655, 1.647, 1.647,\n+                            1.639, 1.642, 1.644, 1.645, 1.646, 1.648, 1.648, 1.648, 1.649, 1.649, 1.649, 1.646, 1.645, 1.642, 1.639, 1.636,\n+                            1.639, 1.641, 1.642, 1.644, 1.645, 1.646, 1.647, 1.647, 1.648, 1.648, 1.647, 1.645, 1.642, 1.639, 1.636, 1.633\n+                        ]\n+                    }\n+                ],\n+                \"luminance_lut\":\n+                [\n+                    2.644, 2.396, 2.077, 1.863, 1.682, 1.535, 1.392, 1.382, 1.382, 1.382, 1.515, 1.657, 1.826, 2.035, 2.351, 2.604,\n+                    2.497, 2.229, 1.947, 1.733, 1.539, 1.424, 1.296, 1.249, 1.249, 1.285, 1.401, 1.519, 1.699, 1.908, 2.183, 2.456,\n+                    2.389, 2.109, 1.848, 1.622, 1.424, 1.296, 1.201, 1.146, 1.146, 1.188, 1.285, 1.401, 1.591, 1.811, 2.065, 2.347,\n+                    2.317, 2.026, 1.771, 1.535, 1.339, 1.201, 1.145, 1.069, 1.069, 1.134, 1.188, 1.318, 1.505, 1.734, 1.983, 2.273,\n+                    2.276, 1.972, 1.715, 1.474, 1.281, 1.148, 1.069, 1.033, 1.024, 1.065, 1.134, 1.262, 1.446, 1.679, 1.929, 2.233,\n+                    2.268, 1.941, 1.682, 1.441, 1.251, 1.119, 1.033, 1.013, 1.013, 1.024, 1.105, 1.231, 1.415, 1.649, 1.898, 2.227,\n+                    2.268, 1.941, 1.682, 1.441, 1.251, 1.119, 1.033, 1.001, 1.001, 1.024, 1.105, 1.231, 1.415, 1.649, 1.898, 2.227,\n+                    2.268, 1.951, 1.694, 1.456, 1.265, 1.131, 1.044, 1.026, 1.019, 1.039, 1.118, 1.246, 1.429, 1.663, 1.912, 2.227,\n+                    2.291, 1.992, 1.738, 1.505, 1.311, 1.175, 1.108, 1.044, 1.041, 1.106, 1.161, 1.292, 1.478, 1.707, 1.955, 2.252,\n+                    2.347, 2.058, 1.803, 1.581, 1.384, 1.245, 1.175, 1.108, 1.108, 1.161, 1.239, 1.364, 1.551, 1.773, 2.023, 2.311,\n+                    2.438, 2.156, 1.884, 1.674, 1.484, 1.373, 1.245, 1.199, 1.199, 1.239, 1.363, 1.463, 1.647, 1.858, 2.123, 2.406,\n+                    2.563, 2.305, 1.998, 1.792, 1.615, 1.472, 1.339, 1.322, 1.322, 1.326, 1.456, 1.593, 1.767, 1.973, 2.273, 2.532\n+                ],\n+                \"sigma\": 0.00178,\n+                \"sigma_Cb\": 0.00217\n+            }\n+        },\n+        {\n+            \"rpi.contrast\":\n+            {\n+                \"ce_enable\": 1,\n+                \"gamma_curve\":\n+                [\n+                    0, 0,\n+                    1024, 5040,\n+                    2048, 9338,\n+                    3072, 12356,\n+                    4096, 15312,\n+                    5120, 18051,\n+                    6144, 20790,\n+                    7168, 23193,\n+                    8192, 25744,\n+                    9216, 27942,\n+                    10240, 30035,\n+                    11264, 32005,\n+                    12288, 33975,\n+                    13312, 35815,\n+                    14336, 37600,\n+                    15360, 39168,\n+                    16384, 40642,\n+                    18432, 43379,\n+                    20480, 45749,\n+                    22528, 47753,\n+                    24576, 49621,\n+                    26624, 51253,\n+                    28672, 52698,\n+                    30720, 53796,\n+                    32768, 54876,\n+                    36864, 57012,\n+                    40960, 58656,\n+                    45056, 59954,\n+                    49152, 61183,\n+                    53248, 62355,\n+                    57344, 63419,\n+                    61440, 64476,\n+                    65535, 65535\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.ccm\":\n+            {\n+                \"ccms\": [\n+                    {\n+                        \"ct\": 2498,\n+                        \"ccm\":\n+                        [\n+                            1.14912, 0.28638, -0.43551,\n+                            -0.49691, 1.60391, -0.10701,\n+                            -0.10513, -1.09534, 2.20047\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2821,\n+                        \"ccm\":\n+                        [\n+                            1.18251, 0.15501, -0.33752,\n+                            -0.44304, 1.58495, -0.14191,\n+                            -0.05077, -0.96422, 2.01498\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2925,\n+                        \"ccm\":\n+                        [\n+                            1.18668, 0.00195, -0.18864,\n+                            -0.41617, 1.50514, -0.08897,\n+                            -0.02675, -0.91143, 1.93818\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2926,\n+                        \"ccm\":\n+                        [\n+                            1.50948, -0.44421, -0.06527,\n+                            -0.37241, 1.41726, -0.04486,\n+                            0.07098, -0.84694, 1.77596\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2951,\n+                        \"ccm\":\n+                        [\n+                            1.52743, -0.47333, -0.05411,\n+                            -0.36485, 1.40764, -0.04279,\n+                            0.08672, -0.90479, 1.81807\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2954,\n+                        \"ccm\":\n+                        [\n+                            1.51683, -0.46841, -0.04841,\n+                            -0.36288, 1.39914, -0.03625,\n+                            0.06421, -0.82034, 1.75613\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3578,\n+                        \"ccm\":\n+                        [\n+                            1.59888, -0.59105, -0.00784,\n+                            -0.29366, 1.32037, -0.02671,\n+                            0.06627, -0.76465, 1.69838\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3717,\n+                        \"ccm\":\n+                        [\n+                            1.59063, -0.58059, -0.01003,\n+                            -0.29583, 1.32715, -0.03132,\n+                            0.03613, -0.67431, 1.63817\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3784,\n+                        \"ccm\":\n+                        [\n+                            1.59379, -0.58861, -0.00517,\n+                            -0.29178, 1.33292, -0.04115,\n+                            0.03541, -0.66162, 1.62622\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4485,\n+                        \"ccm\":\n+                        [\n+                            1.40761, -0.34561, -0.06201,\n+                            -0.32388, 1.57221, -0.24832,\n+                            -0.01014, -0.63427, 1.64441\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4615,\n+                        \"ccm\":\n+                        [\n+                            1.41537, -0.35832, -0.05705,\n+                            -0.31429, 1.56019, -0.24591,\n+                            -0.01761, -0.61859, 1.63621\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4671,\n+                        \"ccm\":\n+                        [\n+                            1.42941, -0.38178, -0.04764,\n+                            -0.31421, 1.55925, -0.24504,\n+                            -0.01141, -0.62987, 1.64129\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5753,\n+                        \"ccm\":\n+                        [\n+                            1.64549, -0.63329, -0.01221,\n+                            -0.22431, 1.36423, -0.13992,\n+                            -0.00831, -0.55373, 1.56204\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5773,\n+                        \"ccm\":\n+                        [\n+                            1.63668, -0.63557, -0.00111,\n+                            -0.21919, 1.36234, -0.14315,\n+                            -0.00399, -0.57428, 1.57827\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 7433,\n+                        \"ccm\":\n+                        [\n+                            1.36007, -0.09277, -0.26729,\n+                            -0.36886, 2.09249, -0.72363,\n+                            -0.12573, -0.76761, 1.89334\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 55792,\n+                        \"ccm\":\n+                        [\n+                            1.65091, -0.63689, -0.01401,\n+                            -0.22277, 1.35752, -0.13475,\n+                            -0.00943, -0.55091, 1.56033\n+                        ]\n+                    }\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.sharpen\": { }\n+        },\n+        {\n+            \"rpi.focus\": { }\n+        },\n+        {\n+            \"rpi.af\":\n+            {\n+                \"ranges\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"min\": 0.0,\n+                        \"max\": 12.0,\n+                        \"default\": 1.0\n+                    },\n+                    \"macro\":\n+                    {\n+                        \"min\": 3.0,\n+                        \"max\": 15.0,\n+                        \"default\": 4.0\n+                    }\n+                },\n+                \"speeds\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"step_coarse\": 1.0,\n+                        \"step_fine\": 0.25,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.02,\n+                        \"pdaf_squelch\": 0.125,\n+                        \"max_slew\": 2.0,\n+                        \"pdaf_frames\": 20,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    }\n+                },\n+                \"conf_epsilon\": 8,\n+                \"conf_thresh\": 16,\n+                \"conf_clip\": 512,\n+                \"skip_frames\": 5,\n+                \"map\": [ 0.0, 445, 15.0, 925 ]\n+            }\n+        }\n+    ]\n+}\ndiff --git a/src/ipa/raspberrypi/data/imx708_noir.json b/src/ipa/raspberrypi/data/imx708_noir.json\nnew file mode 100644\nindex 000000000000..082274e34c53\n--- /dev/null\n+++ b/src/ipa/raspberrypi/data/imx708_noir.json\n@@ -0,0 +1,559 @@\n+{\n+    \"version\": 2.0,\n+    \"target\": \"bcm2835\",\n+    \"algorithms\": [\n+        {\n+            \"rpi.black_level\":\n+            {\n+                \"black_level\": 4096\n+            }\n+        },\n+        {\n+            \"rpi.dpc\": { }\n+        },\n+        {\n+            \"rpi.lux\":\n+            {\n+                \"reference_shutter_speed\": 10672,\n+                \"reference_gain\": 1.12,\n+                \"reference_aperture\": 1.0,\n+                \"reference_lux\": 977,\n+                \"reference_Y\": 8627\n+            }\n+        },\n+        {\n+            \"rpi.noise\":\n+            {\n+                \"reference_constant\": 16.0,\n+                \"reference_slope\": 4.0\n+            }\n+        },\n+        {\n+            \"rpi.geq\":\n+            {\n+                \"offset\": 215,\n+                \"slope\": 0.00287\n+            }\n+        },\n+        {\n+            \"rpi.sdn\": { }\n+        },\n+        {\n+            \"rpi.awb\":\n+            {\n+                \"priors\": [\n+                    {\n+                        \"lux\": 0,\n+                        \"prior\":\n+                        [\n+                            2000, 1.0,\n+                            3000, 0.0,\n+                            13000, 0.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 800,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            6000, 2.0,\n+                            13000, 2.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 1500,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            4000, 1.0,\n+                            6000, 6.0,\n+                            6500, 7.0,\n+                            7000, 1.0,\n+                            13000, 1.0\n+                        ]\n+                    }\n+                ],\n+                \"modes\":\n+                {\n+                    \"auto\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 8000\n+                    },\n+                    \"incandescent\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 3000\n+                    },\n+                    \"tungsten\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 3500\n+                    },\n+                    \"fluorescent\":\n+                    {\n+                        \"lo\": 4000,\n+                        \"hi\": 4700\n+                    },\n+                    \"indoor\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 5000\n+                    },\n+                    \"daylight\":\n+                    {\n+                        \"lo\": 5500,\n+                        \"hi\": 6500\n+                    },\n+                    \"cloudy\":\n+                    {\n+                        \"lo\": 7000,\n+                        \"hi\": 8600\n+                    }\n+                },\n+                \"bayes\": 0,\n+                \"ct_curve\":\n+                [\n+                    2498.0, 0.8733, 0.2606,\n+                    2821.0, 0.7707, 0.3245,\n+                    2925.0, 0.7338, 0.3499,\n+                    2926.0, 0.7193, 0.3603,\n+                    2951.0, 0.7144, 0.3639,\n+                    2954.0, 0.7111, 0.3663,\n+                    3578.0, 0.6038, 0.4516,\n+                    3717.0, 0.5861, 0.4669,\n+                    3784.0, 0.5786, 0.4737,\n+                    4485.0, 0.5113, 0.5368,\n+                    4615.0, 0.4994, 0.5486,\n+                    4671.0, 0.4927, 0.5554,\n+                    5753.0, 0.4274, 0.6246,\n+                    5773.0, 0.4265, 0.6256,\n+                    7433.0, 0.3723, 0.6881\n+                ],\n+                \"sensitivity_r\": 1.05,\n+                \"sensitivity_b\": 1.05,\n+                \"transverse_pos\": 0.03148,\n+                \"transverse_neg\": 0.03061\n+            }\n+        },\n+        {\n+            \"rpi.agc\":\n+            {\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\": [ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 15000, 30000, 60000, 120000 ],\n+                        \"gain\": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 5000, 10000, 20000, 120000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        }\n+                    ],\n+                    \"highlight\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.8,\n+                                1000, 0.8\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ],\n+                \"startup_frames\": 5,\n+                \"convergence_frames\": 6,\n+                \"speed\": 0.15\n+            }\n+        },\n+        {\n+            \"rpi.alsc\":\n+            {\n+                \"omega\": 1.3,\n+                \"n_iter\": 100,\n+                \"luminance_strength\": 0.5,\n+                \"calibrations_Cr\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            1.562, 1.566, 1.566, 1.556, 1.533, 1.506, 1.475, 1.475, 1.475, 1.475, 1.506, 1.533, 1.555, 1.563, 1.562, 1.555,\n+                            1.563, 1.564, 1.561, 1.538, 1.508, 1.482, 1.449, 1.436, 1.436, 1.449, 1.481, 1.508, 1.537, 1.557, 1.558, 1.557,\n+                            1.564, 1.563, 1.554, 1.522, 1.482, 1.449, 1.421, 1.403, 1.403, 1.419, 1.449, 1.481, 1.519, 1.549, 1.557, 1.559,\n+                            1.564, 1.563, 1.545, 1.506, 1.462, 1.421, 1.403, 1.378, 1.378, 1.402, 1.419, 1.459, 1.503, 1.541, 1.557, 1.559,\n+                            1.564, 1.562, 1.537, 1.494, 1.447, 1.404, 1.378, 1.364, 1.364, 1.377, 1.402, 1.444, 1.491, 1.532, 1.556, 1.559,\n+                            1.564, 1.559, 1.532, 1.487, 1.438, 1.395, 1.365, 1.359, 1.359, 1.364, 1.393, 1.436, 1.484, 1.527, 1.555, 1.558,\n+                            1.564, 1.559, 1.532, 1.487, 1.438, 1.395, 1.365, 1.356, 1.356, 1.364, 1.393, 1.436, 1.484, 1.527, 1.554, 1.557,\n+                            1.564, 1.561, 1.536, 1.492, 1.444, 1.402, 1.374, 1.364, 1.363, 1.373, 1.401, 1.442, 1.489, 1.531, 1.554, 1.557,\n+                            1.564, 1.563, 1.544, 1.504, 1.458, 1.418, 1.397, 1.374, 1.374, 1.395, 1.416, 1.456, 1.501, 1.538, 1.556, 1.557,\n+                            1.564, 1.562, 1.551, 1.518, 1.477, 1.441, 1.418, 1.397, 1.397, 1.416, 1.438, 1.474, 1.514, 1.546, 1.556, 1.556,\n+                            1.562, 1.562, 1.558, 1.534, 1.499, 1.476, 1.441, 1.426, 1.426, 1.438, 1.473, 1.496, 1.531, 1.552, 1.556, 1.555,\n+                            1.561, 1.564, 1.564, 1.552, 1.525, 1.497, 1.466, 1.461, 1.461, 1.464, 1.495, 1.523, 1.548, 1.556, 1.556, 1.552\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            2.609, 2.616, 2.617, 2.607, 2.573, 2.527, 2.483, 2.481, 2.481, 2.483, 2.529, 2.573, 2.604, 2.613, 2.613, 2.604,\n+                            2.609, 2.615, 2.608, 2.576, 2.533, 2.489, 2.439, 2.418, 2.418, 2.439, 2.491, 2.532, 2.577, 2.605, 2.609, 2.607,\n+                            2.611, 2.611, 2.597, 2.551, 2.489, 2.439, 2.391, 2.364, 2.364, 2.391, 2.439, 2.491, 2.551, 2.592, 2.607, 2.609,\n+                            2.612, 2.608, 2.583, 2.526, 2.457, 2.391, 2.362, 2.318, 2.318, 2.362, 2.391, 2.458, 2.526, 2.581, 2.607, 2.611,\n+                            2.612, 2.604, 2.571, 2.507, 2.435, 2.362, 2.317, 2.293, 2.294, 2.318, 2.363, 2.434, 2.508, 2.568, 2.604, 2.612,\n+                            2.611, 2.602, 2.564, 2.496, 2.419, 2.349, 2.293, 2.284, 2.284, 2.294, 2.347, 2.421, 2.497, 2.562, 2.603, 2.611,\n+                            2.609, 2.601, 2.564, 2.496, 2.419, 2.349, 2.293, 2.278, 2.278, 2.294, 2.347, 2.421, 2.497, 2.562, 2.602, 2.609,\n+                            2.609, 2.602, 2.568, 2.503, 2.429, 2.361, 2.311, 2.292, 2.292, 2.309, 2.357, 2.429, 2.504, 2.567, 2.602, 2.609,\n+                            2.606, 2.604, 2.579, 2.519, 2.449, 2.384, 2.348, 2.311, 2.311, 2.346, 2.383, 2.449, 2.521, 2.577, 2.604, 2.608,\n+                            2.604, 2.603, 2.586, 2.537, 2.474, 2.418, 2.384, 2.348, 2.348, 2.383, 2.417, 2.476, 2.538, 2.586, 2.601, 2.603,\n+                            2.603, 2.605, 2.596, 2.561, 2.508, 2.474, 2.418, 2.396, 2.396, 2.417, 2.474, 2.511, 2.562, 2.596, 2.603, 2.602,\n+                            2.601, 2.607, 2.606, 2.589, 2.549, 2.507, 2.456, 2.454, 2.454, 2.458, 2.508, 2.554, 2.594, 2.605, 2.605, 2.602\n+                        ]\n+                    }\n+                ],\n+                \"calibrations_Cb\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            3.221, 3.226, 3.231, 3.236, 3.239, 3.243, 3.245, 3.247, 3.249, 3.253, 3.255, 3.254, 3.253, 3.242, 3.235, 3.226,\n+                            3.225, 3.231, 3.235, 3.238, 3.241, 3.244, 3.246, 3.247, 3.249, 3.254, 3.256, 3.255, 3.252, 3.248, 3.241, 3.232,\n+                            3.226, 3.234, 3.239, 3.243, 3.243, 3.245, 3.247, 3.248, 3.251, 3.255, 3.256, 3.256, 3.254, 3.249, 3.244, 3.236,\n+                            3.232, 3.238, 3.245, 3.245, 3.246, 3.247, 3.248, 3.251, 3.251, 3.256, 3.257, 3.257, 3.256, 3.254, 3.249, 3.239,\n+                            3.232, 3.243, 3.246, 3.246, 3.246, 3.247, 3.248, 3.251, 3.253, 3.257, 3.258, 3.258, 3.257, 3.256, 3.254, 3.239,\n+                            3.232, 3.242, 3.246, 3.247, 3.246, 3.246, 3.248, 3.251, 3.252, 3.253, 3.256, 3.255, 3.255, 3.254, 3.251, 3.239,\n+                            3.233, 3.241, 3.244, 3.245, 3.244, 3.245, 3.246, 3.249, 3.251, 3.252, 3.253, 3.252, 3.252, 3.252, 3.249, 3.238,\n+                            3.238, 3.241, 3.246, 3.246, 3.245, 3.245, 3.247, 3.249, 3.251, 3.252, 3.253, 3.253, 3.252, 3.252, 3.249, 3.239,\n+                            3.235, 3.241, 3.245, 3.245, 3.245, 3.245, 3.246, 3.247, 3.251, 3.254, 3.253, 3.255, 3.256, 3.255, 3.251, 3.241,\n+                            3.226, 3.235, 3.241, 3.241, 3.241, 3.241, 3.243, 3.245, 3.246, 3.252, 3.253, 3.254, 3.256, 3.254, 3.241, 3.237,\n+                            3.205, 3.213, 3.213, 3.214, 3.214, 3.214, 3.214, 3.213, 3.213, 3.216, 3.218, 3.216, 3.214, 3.213, 3.211, 3.208,\n+                            3.205, 3.205, 3.212, 3.212, 3.212, 3.213, 3.211, 3.211, 3.211, 3.213, 3.216, 3.214, 3.213, 3.211, 3.208, 3.196\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            1.645, 1.646, 1.649, 1.653, 1.654, 1.657, 1.659, 1.661, 1.663, 1.662, 1.661, 1.659, 1.656, 1.651, 1.645, 1.642,\n+                            1.646, 1.649, 1.652, 1.654, 1.656, 1.659, 1.662, 1.663, 1.664, 1.664, 1.662, 1.661, 1.657, 1.653, 1.649, 1.644,\n+                            1.648, 1.652, 1.654, 1.656, 1.658, 1.662, 1.665, 1.668, 1.668, 1.668, 1.665, 1.662, 1.658, 1.655, 1.652, 1.646,\n+                            1.649, 1.653, 1.656, 1.658, 1.661, 1.665, 1.667, 1.671, 1.673, 1.671, 1.668, 1.663, 1.659, 1.656, 1.654, 1.647,\n+                            1.649, 1.655, 1.657, 1.659, 1.661, 1.666, 1.671, 1.674, 1.675, 1.673, 1.671, 1.664, 1.659, 1.656, 1.654, 1.648,\n+                            1.649, 1.654, 1.656, 1.659, 1.661, 1.666, 1.673, 1.676, 1.676, 1.675, 1.671, 1.664, 1.659, 1.656, 1.654, 1.648,\n+                            1.649, 1.654, 1.656, 1.658, 1.659, 1.665, 1.672, 1.675, 1.675, 1.674, 1.668, 1.662, 1.658, 1.655, 1.654, 1.646,\n+                            1.652, 1.655, 1.657, 1.659, 1.661, 1.665, 1.671, 1.673, 1.673, 1.672, 1.668, 1.662, 1.658, 1.655, 1.654, 1.647,\n+                            1.652, 1.655, 1.657, 1.659, 1.661, 1.664, 1.667, 1.671, 1.672, 1.668, 1.666, 1.662, 1.659, 1.656, 1.654, 1.647,\n+                            1.647, 1.652, 1.655, 1.656, 1.657, 1.661, 1.664, 1.665, 1.665, 1.665, 1.663, 1.661, 1.657, 1.655, 1.647, 1.647,\n+                            1.639, 1.642, 1.644, 1.645, 1.646, 1.648, 1.648, 1.648, 1.649, 1.649, 1.649, 1.646, 1.645, 1.642, 1.639, 1.636,\n+                            1.639, 1.641, 1.642, 1.644, 1.645, 1.646, 1.647, 1.647, 1.648, 1.648, 1.647, 1.645, 1.642, 1.639, 1.636, 1.633\n+                        ]\n+                    }\n+                ],\n+                \"luminance_lut\":\n+                [\n+                    2.644, 2.396, 2.077, 1.863, 1.682, 1.535, 1.392, 1.382, 1.382, 1.382, 1.515, 1.657, 1.826, 2.035, 2.351, 2.604,\n+                    2.497, 2.229, 1.947, 1.733, 1.539, 1.424, 1.296, 1.249, 1.249, 1.285, 1.401, 1.519, 1.699, 1.908, 2.183, 2.456,\n+                    2.389, 2.109, 1.848, 1.622, 1.424, 1.296, 1.201, 1.146, 1.146, 1.188, 1.285, 1.401, 1.591, 1.811, 2.065, 2.347,\n+                    2.317, 2.026, 1.771, 1.535, 1.339, 1.201, 1.145, 1.069, 1.069, 1.134, 1.188, 1.318, 1.505, 1.734, 1.983, 2.273,\n+                    2.276, 1.972, 1.715, 1.474, 1.281, 1.148, 1.069, 1.033, 1.024, 1.065, 1.134, 1.262, 1.446, 1.679, 1.929, 2.233,\n+                    2.268, 1.941, 1.682, 1.441, 1.251, 1.119, 1.033, 1.013, 1.013, 1.024, 1.105, 1.231, 1.415, 1.649, 1.898, 2.227,\n+                    2.268, 1.941, 1.682, 1.441, 1.251, 1.119, 1.033, 1.001, 1.001, 1.024, 1.105, 1.231, 1.415, 1.649, 1.898, 2.227,\n+                    2.268, 1.951, 1.694, 1.456, 1.265, 1.131, 1.044, 1.026, 1.019, 1.039, 1.118, 1.246, 1.429, 1.663, 1.912, 2.227,\n+                    2.291, 1.992, 1.738, 1.505, 1.311, 1.175, 1.108, 1.044, 1.041, 1.106, 1.161, 1.292, 1.478, 1.707, 1.955, 2.252,\n+                    2.347, 2.058, 1.803, 1.581, 1.384, 1.245, 1.175, 1.108, 1.108, 1.161, 1.239, 1.364, 1.551, 1.773, 2.023, 2.311,\n+                    2.438, 2.156, 1.884, 1.674, 1.484, 1.373, 1.245, 1.199, 1.199, 1.239, 1.363, 1.463, 1.647, 1.858, 2.123, 2.406,\n+                    2.563, 2.305, 1.998, 1.792, 1.615, 1.472, 1.339, 1.322, 1.322, 1.326, 1.456, 1.593, 1.767, 1.973, 2.273, 2.532\n+                ],\n+                \"sigma\": 0.00178,\n+                \"sigma_Cb\": 0.00217\n+            }\n+        },\n+        {\n+            \"rpi.contrast\":\n+            {\n+                \"ce_enable\": 1,\n+                \"gamma_curve\":\n+                [\n+                    0, 0,\n+                    1024, 5040,\n+                    2048, 9338,\n+                    3072, 12356,\n+                    4096, 15312,\n+                    5120, 18051,\n+                    6144, 20790,\n+                    7168, 23193,\n+                    8192, 25744,\n+                    9216, 27942,\n+                    10240, 30035,\n+                    11264, 32005,\n+                    12288, 33975,\n+                    13312, 35815,\n+                    14336, 37600,\n+                    15360, 39168,\n+                    16384, 40642,\n+                    18432, 43379,\n+                    20480, 45749,\n+                    22528, 47753,\n+                    24576, 49621,\n+                    26624, 51253,\n+                    28672, 52698,\n+                    30720, 53796,\n+                    32768, 54876,\n+                    36864, 57012,\n+                    40960, 58656,\n+                    45056, 59954,\n+                    49152, 61183,\n+                    53248, 62355,\n+                    57344, 63419,\n+                    61440, 64476,\n+                    65535, 65535\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.ccm\":\n+            {\n+                \"ccms\": [\n+                    {\n+                        \"ct\": 2498,\n+                        \"ccm\":\n+                        [\n+                            1.14912, 0.28638, -0.43551,\n+                            -0.49691, 1.60391, -0.10701,\n+                            -0.10513, -1.09534, 2.20047\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2821,\n+                        \"ccm\":\n+                        [\n+                            1.18251, 0.15501, -0.33752,\n+                            -0.44304, 1.58495, -0.14191,\n+                            -0.05077, -0.96422, 2.01498\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2925,\n+                        \"ccm\":\n+                        [\n+                            1.18668, 0.00195, -0.18864,\n+                            -0.41617, 1.50514, -0.08897,\n+                            -0.02675, -0.91143, 1.93818\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2926,\n+                        \"ccm\":\n+                        [\n+                            1.50948, -0.44421, -0.06527,\n+                            -0.37241, 1.41726, -0.04486,\n+                            0.07098, -0.84694, 1.77596\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2951,\n+                        \"ccm\":\n+                        [\n+                            1.52743, -0.47333, -0.05411,\n+                            -0.36485, 1.40764, -0.04279,\n+                            0.08672, -0.90479, 1.81807\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2954,\n+                        \"ccm\":\n+                        [\n+                            1.51683, -0.46841, -0.04841,\n+                            -0.36288, 1.39914, -0.03625,\n+                            0.06421, -0.82034, 1.75613\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3578,\n+                        \"ccm\":\n+                        [\n+                            1.59888, -0.59105, -0.00784,\n+                            -0.29366, 1.32037, -0.02671,\n+                            0.06627, -0.76465, 1.69838\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3717,\n+                        \"ccm\":\n+                        [\n+                            1.59063, -0.58059, -0.01003,\n+                            -0.29583, 1.32715, -0.03132,\n+                            0.03613, -0.67431, 1.63817\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3784,\n+                        \"ccm\":\n+                        [\n+                            1.59379, -0.58861, -0.00517,\n+                            -0.29178, 1.33292, -0.04115,\n+                            0.03541, -0.66162, 1.62622\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4485,\n+                        \"ccm\":\n+                        [\n+                            1.40761, -0.34561, -0.06201,\n+                            -0.32388, 1.57221, -0.24832,\n+                            -0.01014, -0.63427, 1.64441\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4615,\n+                        \"ccm\":\n+                        [\n+                            1.41537, -0.35832, -0.05705,\n+                            -0.31429, 1.56019, -0.24591,\n+                            -0.01761, -0.61859, 1.63621\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4671,\n+                        \"ccm\":\n+                        [\n+                            1.42941, -0.38178, -0.04764,\n+                            -0.31421, 1.55925, -0.24504,\n+                            -0.01141, -0.62987, 1.64129\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5753,\n+                        \"ccm\":\n+                        [\n+                            1.64549, -0.63329, -0.01221,\n+                            -0.22431, 1.36423, -0.13992,\n+                            -0.00831, -0.55373, 1.56204\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5773,\n+                        \"ccm\":\n+                        [\n+                            1.63668, -0.63557, -0.00111,\n+                            -0.21919, 1.36234, -0.14315,\n+                            -0.00399, -0.57428, 1.57827\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 7433,\n+                        \"ccm\":\n+                        [\n+                            1.36007, -0.09277, -0.26729,\n+                            -0.36886, 2.09249, -0.72363,\n+                            -0.12573, -0.76761, 1.89334\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 55792,\n+                        \"ccm\":\n+                        [\n+                            1.65091, -0.63689, -0.01401,\n+                            -0.22277, 1.35752, -0.13475,\n+                            -0.00943, -0.55091, 1.56033\n+                        ]\n+                    }\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.sharpen\": { }\n+        },\n+        {\n+            \"rpi.focus\": { }\n+        },\n+        {\n+            \"rpi.af\":\n+            {\n+                \"ranges\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"min\": 0.0,\n+                        \"max\": 12.0,\n+                        \"default\": 1.0\n+                    },\n+                    \"macro\":\n+                    {\n+                        \"min\": 3.0,\n+                        \"max\": 15.0,\n+                        \"default\": 4.0\n+                    }\n+                },\n+                \"speeds\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"step_coarse\": 1.0,\n+                        \"step_fine\": 0.25,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.02,\n+                        \"pdaf_squelch\": 0.125,\n+                        \"max_slew\": 2.0,\n+                        \"pdaf_frames\": 20,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    }\n+                },\n+                \"conf_epsilon\": 8,\n+                \"conf_thresh\": 16,\n+                \"conf_clip\": 512,\n+                \"skip_frames\": 5,\n+                \"map\": [ 0.0, 445, 15.0, 925 ]\n+            }\n+        }\n+    ]\n+}\ndiff --git a/src/ipa/raspberrypi/data/imx708_wide.json b/src/ipa/raspberrypi/data/imx708_wide.json\nnew file mode 100644\nindex 000000000000..cdc61436995d\n--- /dev/null\n+++ b/src/ipa/raspberrypi/data/imx708_wide.json\n@@ -0,0 +1,462 @@\n+{\n+    \"version\": 2.0,\n+    \"target\": \"bcm2835\",\n+    \"algorithms\": [\n+        {\n+            \"rpi.black_level\":\n+            {\n+                \"black_level\": 4096\n+            }\n+        },\n+        {\n+            \"rpi.dpc\": { }\n+        },\n+        {\n+            \"rpi.lux\":\n+            {\n+                \"reference_shutter_speed\": 9989,\n+                \"reference_gain\": 1.23,\n+                \"reference_aperture\": 1.0,\n+                \"reference_lux\": 980,\n+                \"reference_Y\": 8345\n+            }\n+        },\n+        {\n+            \"rpi.noise\":\n+            {\n+                \"reference_constant\": 16.0,\n+                \"reference_slope\": 4.0\n+            }\n+        },\n+        {\n+            \"rpi.geq\":\n+            {\n+                \"offset\": 215,\n+                \"slope\": 0.00287\n+            }\n+        },\n+        {\n+            \"rpi.sdn\": { }\n+        },\n+        {\n+            \"rpi.awb\":\n+            {\n+                \"priors\": [\n+                    {\n+                        \"lux\": 0,\n+                        \"prior\":\n+                        [\n+                            2000, 1.0,\n+                            3000, 0.0,\n+                            13000, 0.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 800,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            6000, 2.0,\n+                            13000, 2.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 1500,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            4000, 1.0,\n+                            6000, 6.0,\n+                            6500, 7.0,\n+                            7000, 1.0,\n+                            13000, 1.0\n+                        ]\n+                    }\n+                ],\n+                \"modes\":\n+                {\n+                    \"auto\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 8000\n+                    },\n+                    \"incandescent\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 3000\n+                    },\n+                    \"tungsten\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 3500\n+                    },\n+                    \"fluorescent\":\n+                    {\n+                        \"lo\": 4000,\n+                        \"hi\": 4700\n+                    },\n+                    \"indoor\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 5000\n+                    },\n+                    \"daylight\":\n+                    {\n+                        \"lo\": 5500,\n+                        \"hi\": 6500\n+                    },\n+                    \"cloudy\":\n+                    {\n+                        \"lo\": 7000,\n+                        \"hi\": 8600\n+                    }\n+                },\n+                \"bayes\": 1,\n+                \"ct_curve\":\n+                [\n+                    2750.0, 0.7881, 0.2849,\n+                    2940.0, 0.7559, 0.3103,\n+                    3650.0, 0.6291, 0.4206,\n+                    4625.0, 0.5336, 0.5161,\n+                    5715.0, 0.4668, 0.5898\n+                ],\n+                \"sensitivity_r\": 1.05,\n+                \"sensitivity_b\": 1.05,\n+                \"transverse_pos\": 0.01165,\n+                \"transverse_neg\": 0.01601\n+            }\n+        },\n+        {\n+            \"rpi.agc\":\n+            {\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\": [ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 15000, 30000, 60000, 120000 ],\n+                        \"gain\": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 5000, 10000, 20000, 120000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        }\n+                    ],\n+                    \"highlight\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.8,\n+                                1000, 0.8\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ],\n+                \"startup_frames\": 5,\n+                \"convergence_frames\": 6,\n+                \"speed\": 0.15\n+            }\n+        },\n+        {\n+            \"rpi.alsc\":\n+            {\n+                \"omega\": 1.3,\n+                \"n_iter\": 100,\n+                \"luminance_strength\": 0.5,\n+                \"calibrations_Cr\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            1.529, 1.526, 1.522, 1.506, 1.489, 1.473, 1.458, 1.456, 1.456, 1.458, 1.474, 1.493, 1.513, 1.531, 1.541, 1.544,\n+                            1.527, 1.523, 1.511, 1.491, 1.474, 1.459, 1.445, 1.441, 1.441, 1.446, 1.461, 1.479, 1.499, 1.521, 1.536, 1.541,\n+                            1.524, 1.515, 1.498, 1.477, 1.459, 1.444, 1.431, 1.426, 1.426, 1.435, 1.446, 1.466, 1.487, 1.507, 1.528, 1.538,\n+                            1.522, 1.512, 1.491, 1.468, 1.447, 1.431, 1.423, 1.417, 1.418, 1.425, 1.435, 1.455, 1.479, 1.499, 1.523, 1.537,\n+                            1.522, 1.509, 1.485, 1.463, 1.441, 1.423, 1.416, 1.413, 1.415, 1.418, 1.429, 1.449, 1.473, 1.495, 1.521, 1.538,\n+                            1.522, 1.508, 1.483, 1.461, 1.438, 1.421, 1.413, 1.412, 1.412, 1.415, 1.428, 1.447, 1.471, 1.493, 1.519, 1.538,\n+                            1.522, 1.509, 1.484, 1.462, 1.439, 1.421, 1.414, 1.411, 1.412, 1.416, 1.428, 1.447, 1.471, 1.493, 1.519, 1.537,\n+                            1.523, 1.511, 1.487, 1.465, 1.443, 1.424, 1.417, 1.413, 1.415, 1.419, 1.429, 1.451, 1.473, 1.494, 1.519, 1.536,\n+                            1.524, 1.514, 1.493, 1.471, 1.451, 1.434, 1.424, 1.419, 1.419, 1.428, 1.437, 1.457, 1.477, 1.498, 1.521, 1.538,\n+                            1.527, 1.521, 1.503, 1.481, 1.462, 1.449, 1.434, 1.429, 1.429, 1.437, 1.451, 1.469, 1.488, 1.508, 1.527, 1.539,\n+                            1.529, 1.527, 1.515, 1.495, 1.477, 1.462, 1.449, 1.444, 1.444, 1.451, 1.467, 1.481, 1.499, 1.519, 1.535, 1.543,\n+                            1.534, 1.531, 1.527, 1.512, 1.492, 1.476, 1.463, 1.461, 1.461, 1.464, 1.479, 1.495, 1.515, 1.533, 1.543, 1.546\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            2.603, 2.599, 2.591, 2.567, 2.539, 2.515, 2.489, 2.489, 2.489, 2.491, 2.516, 2.543, 2.574, 2.597, 2.614, 2.617,\n+                            2.596, 2.591, 2.571, 2.542, 2.516, 2.489, 2.464, 2.458, 2.458, 2.469, 2.492, 2.518, 2.547, 2.576, 2.602, 2.614,\n+                            2.591, 2.576, 2.546, 2.519, 2.489, 2.464, 2.437, 2.427, 2.427, 2.441, 2.467, 2.492, 2.525, 2.553, 2.586, 2.605,\n+                            2.588, 2.568, 2.534, 2.503, 2.472, 2.437, 2.423, 2.409, 2.411, 2.425, 2.441, 2.475, 2.513, 2.541, 2.577, 2.602,\n+                            2.588, 2.565, 2.527, 2.494, 2.461, 2.425, 2.409, 2.399, 2.403, 2.409, 2.431, 2.466, 2.503, 2.534, 2.571, 2.601,\n+                            2.586, 2.561, 2.525, 2.491, 2.454, 2.418, 2.399, 2.396, 2.395, 2.402, 2.424, 2.461, 2.501, 2.531, 2.567, 2.599,\n+                            2.583, 2.559, 2.525, 2.491, 2.454, 2.418, 2.398, 2.393, 2.393, 2.401, 2.423, 2.459, 2.498, 2.531, 2.566, 2.597,\n+                            2.583, 2.559, 2.526, 2.494, 2.458, 2.421, 2.404, 2.397, 2.399, 2.404, 2.426, 2.461, 2.501, 2.531, 2.566, 2.596,\n+                            2.583, 2.563, 2.531, 2.501, 2.469, 2.435, 2.419, 2.405, 2.404, 2.422, 2.435, 2.471, 2.505, 2.537, 2.572, 2.596,\n+                            2.585, 2.571, 2.539, 2.516, 2.486, 2.458, 2.435, 2.424, 2.424, 2.435, 2.459, 2.489, 2.521, 2.546, 2.579, 2.601,\n+                            2.589, 2.578, 2.557, 2.532, 2.506, 2.483, 2.458, 2.449, 2.449, 2.459, 2.485, 2.507, 2.535, 2.563, 2.591, 2.605,\n+                            2.589, 2.586, 2.575, 2.551, 2.525, 2.503, 2.481, 2.476, 2.476, 2.481, 2.504, 2.526, 2.555, 2.583, 2.604, 2.611\n+                        ]\n+                    }\n+                ],\n+                \"calibrations_Cb\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            3.311, 3.339, 3.369, 3.374, 3.371, 3.363, 3.356, 3.353, 3.353, 3.353, 3.357, 3.362, 3.362, 3.356, 3.328, 3.311,\n+                            3.321, 3.354, 3.374, 3.374, 3.368, 3.359, 3.352, 3.349, 3.347, 3.347, 3.349, 3.357, 3.361, 3.359, 3.343, 3.324,\n+                            3.334, 3.368, 3.375, 3.374, 3.365, 3.356, 3.349, 3.347, 3.346, 3.346, 3.347, 3.349, 3.358, 3.361, 3.357, 3.336,\n+                            3.346, 3.378, 3.378, 3.369, 3.363, 3.358, 3.351, 3.348, 3.347, 3.346, 3.347, 3.348, 3.354, 3.364, 3.363, 3.345,\n+                            3.351, 3.381, 3.381, 3.368, 3.361, 3.357, 3.349, 3.347, 3.347, 3.345, 3.345, 3.347, 3.353, 3.364, 3.364, 3.347,\n+                            3.353, 3.379, 3.379, 3.366, 3.359, 3.351, 3.348, 3.343, 3.342, 3.342, 3.343, 3.345, 3.351, 3.363, 3.363, 3.347,\n+                            3.353, 3.376, 3.376, 3.363, 3.351, 3.347, 3.343, 3.338, 3.336, 3.338, 3.339, 3.343, 3.351, 3.361, 3.361, 3.347,\n+                            3.351, 3.374, 3.374, 3.359, 3.351, 3.345, 3.338, 3.334, 3.333, 3.334, 3.336, 3.339, 3.347, 3.358, 3.358, 3.345,\n+                            3.346, 3.368, 3.368, 3.359, 3.349, 3.343, 3.336, 3.332, 3.327, 3.331, 3.333, 3.337, 3.346, 3.356, 3.356, 3.341,\n+                            3.336, 3.362, 3.364, 3.359, 3.351, 3.342, 3.334, 3.324, 3.324, 3.325, 3.329, 3.336, 3.346, 3.351, 3.351, 3.333,\n+                            3.324, 3.349, 3.359, 3.358, 3.352, 3.341, 3.329, 3.323, 3.321, 3.322, 3.326, 3.336, 3.346, 3.347, 3.339, 3.319,\n+                            3.311, 3.328, 3.352, 3.354, 3.352, 3.341, 3.329, 3.321, 3.319, 3.321, 3.324, 3.338, 3.343, 3.343, 3.319, 3.312\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            1.634, 1.647, 1.665, 1.668, 1.668, 1.664, 1.662, 1.662, 1.661, 1.661, 1.661, 1.663, 1.663, 1.659, 1.643, 1.636,\n+                            1.639, 1.656, 1.668, 1.669, 1.668, 1.666, 1.664, 1.663, 1.663, 1.661, 1.661, 1.662, 1.663, 1.662, 1.654, 1.642,\n+                            1.645, 1.663, 1.669, 1.668, 1.667, 1.667, 1.667, 1.668, 1.668, 1.665, 1.662, 1.661, 1.662, 1.664, 1.661, 1.649,\n+                            1.651, 1.669, 1.669, 1.667, 1.666, 1.668, 1.669, 1.672, 1.672, 1.668, 1.665, 1.661, 1.661, 1.665, 1.665, 1.655,\n+                            1.654, 1.669, 1.669, 1.666, 1.666, 1.669, 1.672, 1.673, 1.673, 1.671, 1.666, 1.661, 1.661, 1.665, 1.665, 1.659,\n+                            1.654, 1.669, 1.669, 1.666, 1.666, 1.669, 1.671, 1.673, 1.672, 1.669, 1.667, 1.661, 1.661, 1.665, 1.665, 1.659,\n+                            1.654, 1.668, 1.668, 1.664, 1.663, 1.667, 1.669, 1.671, 1.669, 1.668, 1.665, 1.661, 1.661, 1.663, 1.663, 1.659,\n+                            1.653, 1.665, 1.665, 1.661, 1.661, 1.664, 1.667, 1.668, 1.668, 1.665, 1.661, 1.658, 1.659, 1.662, 1.662, 1.657,\n+                            1.651, 1.664, 1.664, 1.659, 1.659, 1.661, 1.663, 1.663, 1.662, 1.661, 1.658, 1.656, 1.657, 1.662, 1.662, 1.655,\n+                            1.645, 1.661, 1.663, 1.661, 1.659, 1.659, 1.659, 1.657, 1.657, 1.656, 1.654, 1.655, 1.656, 1.661, 1.661, 1.649,\n+                            1.641, 1.654, 1.661, 1.661, 1.659, 1.657, 1.655, 1.653, 1.652, 1.651, 1.652, 1.653, 1.657, 1.658, 1.655, 1.644,\n+                            1.635, 1.645, 1.661, 1.661, 1.661, 1.655, 1.653, 1.649, 1.648, 1.647, 1.651, 1.653, 1.657, 1.657, 1.646, 1.638\n+                        ]\n+                    }\n+                ],\n+                \"luminance_lut\":\n+                [\n+                    3.535, 3.279, 3.049, 2.722, 2.305, 1.958, 1.657, 1.647, 1.647, 1.656, 1.953, 2.289, 2.707, 3.058, 3.325, 3.589,\n+                    3.379, 3.157, 2.874, 2.421, 1.973, 1.735, 1.472, 1.388, 1.388, 1.471, 1.724, 1.963, 2.409, 2.877, 3.185, 3.416,\n+                    3.288, 3.075, 2.696, 2.169, 1.735, 1.472, 1.311, 1.208, 1.208, 1.306, 1.471, 1.724, 2.159, 2.695, 3.092, 3.321,\n+                    3.238, 3.001, 2.534, 1.981, 1.572, 1.311, 1.207, 1.082, 1.082, 1.204, 1.306, 1.563, 1.973, 2.529, 3.008, 3.259,\n+                    3.211, 2.938, 2.414, 1.859, 1.468, 1.221, 1.082, 1.036, 1.031, 1.079, 1.217, 1.463, 1.851, 2.403, 2.931, 3.229,\n+                    3.206, 2.904, 2.356, 1.802, 1.421, 1.181, 1.037, 1.002, 1.002, 1.032, 1.175, 1.414, 1.793, 2.343, 2.899, 3.223,\n+                    3.206, 2.904, 2.356, 1.802, 1.421, 1.181, 1.037, 1.005, 1.005, 1.032, 1.175, 1.414, 1.793, 2.343, 2.899, 3.223,\n+                    3.211, 2.936, 2.417, 1.858, 1.468, 1.222, 1.083, 1.037, 1.032, 1.083, 1.218, 1.463, 1.848, 2.403, 2.932, 3.226,\n+                    3.234, 2.997, 2.536, 1.979, 1.569, 1.311, 1.206, 1.084, 1.084, 1.204, 1.305, 1.565, 1.966, 2.524, 2.996, 3.251,\n+                    3.282, 3.069, 2.697, 2.166, 1.731, 1.471, 1.311, 1.207, 1.207, 1.305, 1.466, 1.729, 2.158, 2.689, 3.077, 3.304,\n+                    3.369, 3.146, 2.873, 2.415, 1.964, 1.722, 1.471, 1.382, 1.382, 1.466, 1.722, 1.964, 2.408, 2.871, 3.167, 3.401,\n+                    3.524, 3.253, 3.025, 2.691, 2.275, 1.939, 1.657, 1.628, 1.628, 1.654, 1.936, 2.275, 2.687, 3.029, 3.284, 3.574\n+                ],\n+                \"sigma\": 0.00195,\n+                \"sigma_Cb\": 0.00241\n+            }\n+        },\n+        {\n+            \"rpi.contrast\":\n+            {\n+                \"ce_enable\": 1,\n+                \"gamma_curve\":\n+                [\n+                    0, 0,\n+                    1024, 5040,\n+                    2048, 9338,\n+                    3072, 12356,\n+                    4096, 15312,\n+                    5120, 18051,\n+                    6144, 20790,\n+                    7168, 23193,\n+                    8192, 25744,\n+                    9216, 27942,\n+                    10240, 30035,\n+                    11264, 32005,\n+                    12288, 33975,\n+                    13312, 35815,\n+                    14336, 37600,\n+                    15360, 39168,\n+                    16384, 40642,\n+                    18432, 43379,\n+                    20480, 45749,\n+                    22528, 47753,\n+                    24576, 49621,\n+                    26624, 51253,\n+                    28672, 52698,\n+                    30720, 53796,\n+                    32768, 54876,\n+                    36864, 57012,\n+                    40960, 58656,\n+                    45056, 59954,\n+                    49152, 61183,\n+                    53248, 62355,\n+                    57344, 63419,\n+                    61440, 64476,\n+                    65535, 65535\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.ccm\":\n+            {\n+                \"ccms\": [\n+                    {\n+                        \"ct\": 2750,\n+                        \"ccm\":\n+                        [\n+                            1.13004, 0.36392, -0.49396,\n+                            -0.45885, 1.68171, -0.22286,\n+                            -0.06473, -0.86962, 1.93435\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2940,\n+                        \"ccm\":\n+                        [\n+                            1.29876, 0.09627, -0.39503,\n+                            -0.43085, 1.60258, -0.17172,\n+                            -0.02638, -0.92581, 1.95218\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3650,\n+                        \"ccm\":\n+                        [\n+                            1.57729, -0.29734, -0.27995,\n+                            -0.42965, 1.66231, -0.23265,\n+                            -0.02183, -0.62331, 1.64514\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4625,\n+                        \"ccm\":\n+                        [\n+                            1.52145, -0.22382, -0.29763,\n+                            -0.40445, 1.82186, -0.41742,\n+                            -0.05732, -0.56222, 1.61954\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5715,\n+                        \"ccm\":\n+                        [\n+                            1.67851, -0.39193, -0.28658,\n+                            -0.37169, 1.72949, -0.35781,\n+                            -0.09556, -0.41951, 1.51508\n+                        ]\n+                    }\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.sharpen\": { }\n+        },\n+        {\n+            \"rpi.focus\": { }\n+        },\n+        {\n+            \"rpi.af\":\n+            {\n+                \"ranges\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"min\": 0.0,\n+                        \"max\": 12.0,\n+                        \"default\": 1.0\n+                    },\n+                    \"macro\":\n+                    {\n+                        \"min\": 4.0,\n+                        \"max\": 32.0,\n+                        \"default\": 6.0\n+                    }\n+                },\n+                \"speeds\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"step_coarse\": 2.0,\n+                        \"step_fine\": 0.5,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.03,\n+                        \"pdaf_squelch\": 0.2,\n+                        \"max_slew\": 4.0,\n+                        \"pdaf_frames\": 20,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    },\n+                    \"fast\":\n+                    {\n+                        \"step_coarse\": 2.0,\n+                        \"step_fine\": 0.5,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.05,\n+                        \"pdaf_squelch\": 0.2,\n+                        \"max_slew\": 5.0,\n+                        \"pdaf_frames\": 16,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    }\n+                },\n+                \"conf_epsilon\": 8,\n+                \"conf_thresh\": 12,\n+                \"conf_clip\": 512,\n+                \"skip_frames\": 5,\n+                \"map\": [ 0.0, 420, 35.0, 920 ]\n+            }\n+        }\n+    ]\n+}\ndiff --git a/src/ipa/raspberrypi/data/imx708_wide_noir.json b/src/ipa/raspberrypi/data/imx708_wide_noir.json\nnew file mode 100644\nindex 000000000000..8a7f59910833\n--- /dev/null\n+++ b/src/ipa/raspberrypi/data/imx708_wide_noir.json\n@@ -0,0 +1,462 @@\n+{\n+    \"version\": 2.0,\n+    \"target\": \"bcm2835\",\n+    \"algorithms\": [\n+        {\n+            \"rpi.black_level\":\n+            {\n+                \"black_level\": 4096\n+            }\n+        },\n+        {\n+            \"rpi.dpc\": { }\n+        },\n+        {\n+            \"rpi.lux\":\n+            {\n+                \"reference_shutter_speed\": 9989,\n+                \"reference_gain\": 1.23,\n+                \"reference_aperture\": 1.0,\n+                \"reference_lux\": 980,\n+                \"reference_Y\": 8345\n+            }\n+        },\n+        {\n+            \"rpi.noise\":\n+            {\n+                \"reference_constant\": 16.0,\n+                \"reference_slope\": 4.0\n+            }\n+        },\n+        {\n+            \"rpi.geq\":\n+            {\n+                \"offset\": 215,\n+                \"slope\": 0.00287\n+            }\n+        },\n+        {\n+            \"rpi.sdn\": { }\n+        },\n+        {\n+            \"rpi.awb\":\n+            {\n+                \"priors\": [\n+                    {\n+                        \"lux\": 0,\n+                        \"prior\":\n+                        [\n+                            2000, 1.0,\n+                            3000, 0.0,\n+                            13000, 0.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 800,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            6000, 2.0,\n+                            13000, 2.0\n+                        ]\n+                    },\n+                    {\n+                        \"lux\": 1500,\n+                        \"prior\":\n+                        [\n+                            2000, 0.0,\n+                            4000, 1.0,\n+                            6000, 6.0,\n+                            6500, 7.0,\n+                            7000, 1.0,\n+                            13000, 1.0\n+                        ]\n+                    }\n+                ],\n+                \"modes\":\n+                {\n+                    \"auto\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 8000\n+                    },\n+                    \"incandescent\":\n+                    {\n+                        \"lo\": 2500,\n+                        \"hi\": 3000\n+                    },\n+                    \"tungsten\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 3500\n+                    },\n+                    \"fluorescent\":\n+                    {\n+                        \"lo\": 4000,\n+                        \"hi\": 4700\n+                    },\n+                    \"indoor\":\n+                    {\n+                        \"lo\": 3000,\n+                        \"hi\": 5000\n+                    },\n+                    \"daylight\":\n+                    {\n+                        \"lo\": 5500,\n+                        \"hi\": 6500\n+                    },\n+                    \"cloudy\":\n+                    {\n+                        \"lo\": 7000,\n+                        \"hi\": 8600\n+                    }\n+                },\n+                \"bayes\": 0,\n+                \"ct_curve\":\n+                [\n+                    2750.0, 0.7881, 0.2849,\n+                    2940.0, 0.7559, 0.3103,\n+                    3650.0, 0.6291, 0.4206,\n+                    4625.0, 0.5336, 0.5161,\n+                    5715.0, 0.4668, 0.5898\n+                ],\n+                \"sensitivity_r\": 1.05,\n+                \"sensitivity_b\": 1.05,\n+                \"transverse_pos\": 0.01165,\n+                \"transverse_neg\": 0.01601\n+            }\n+        },\n+        {\n+            \"rpi.agc\":\n+            {\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\": [ 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\": [ 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\": [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 15000, 30000, 60000, 120000 ],\n+                        \"gain\": [ 1.0, 1.0, 2.0, 4.0, 6.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 5000, 10000, 20000, 120000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 6.0, 6.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        }\n+                    ],\n+                    \"highlight\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.2,\n+                                1000, 0.2\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.8,\n+                                1000, 0.8\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ],\n+                \"startup_frames\": 5,\n+                \"convergence_frames\": 6,\n+                \"speed\": 0.15\n+            }\n+        },\n+        {\n+            \"rpi.alsc\":\n+            {\n+                \"omega\": 1.3,\n+                \"n_iter\": 100,\n+                \"luminance_strength\": 0.5,\n+                \"calibrations_Cr\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            1.529, 1.526, 1.522, 1.506, 1.489, 1.473, 1.458, 1.456, 1.456, 1.458, 1.474, 1.493, 1.513, 1.531, 1.541, 1.544,\n+                            1.527, 1.523, 1.511, 1.491, 1.474, 1.459, 1.445, 1.441, 1.441, 1.446, 1.461, 1.479, 1.499, 1.521, 1.536, 1.541,\n+                            1.524, 1.515, 1.498, 1.477, 1.459, 1.444, 1.431, 1.426, 1.426, 1.435, 1.446, 1.466, 1.487, 1.507, 1.528, 1.538,\n+                            1.522, 1.512, 1.491, 1.468, 1.447, 1.431, 1.423, 1.417, 1.418, 1.425, 1.435, 1.455, 1.479, 1.499, 1.523, 1.537,\n+                            1.522, 1.509, 1.485, 1.463, 1.441, 1.423, 1.416, 1.413, 1.415, 1.418, 1.429, 1.449, 1.473, 1.495, 1.521, 1.538,\n+                            1.522, 1.508, 1.483, 1.461, 1.438, 1.421, 1.413, 1.412, 1.412, 1.415, 1.428, 1.447, 1.471, 1.493, 1.519, 1.538,\n+                            1.522, 1.509, 1.484, 1.462, 1.439, 1.421, 1.414, 1.411, 1.412, 1.416, 1.428, 1.447, 1.471, 1.493, 1.519, 1.537,\n+                            1.523, 1.511, 1.487, 1.465, 1.443, 1.424, 1.417, 1.413, 1.415, 1.419, 1.429, 1.451, 1.473, 1.494, 1.519, 1.536,\n+                            1.524, 1.514, 1.493, 1.471, 1.451, 1.434, 1.424, 1.419, 1.419, 1.428, 1.437, 1.457, 1.477, 1.498, 1.521, 1.538,\n+                            1.527, 1.521, 1.503, 1.481, 1.462, 1.449, 1.434, 1.429, 1.429, 1.437, 1.451, 1.469, 1.488, 1.508, 1.527, 1.539,\n+                            1.529, 1.527, 1.515, 1.495, 1.477, 1.462, 1.449, 1.444, 1.444, 1.451, 1.467, 1.481, 1.499, 1.519, 1.535, 1.543,\n+                            1.534, 1.531, 1.527, 1.512, 1.492, 1.476, 1.463, 1.461, 1.461, 1.464, 1.479, 1.495, 1.515, 1.533, 1.543, 1.546\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            2.603, 2.599, 2.591, 2.567, 2.539, 2.515, 2.489, 2.489, 2.489, 2.491, 2.516, 2.543, 2.574, 2.597, 2.614, 2.617,\n+                            2.596, 2.591, 2.571, 2.542, 2.516, 2.489, 2.464, 2.458, 2.458, 2.469, 2.492, 2.518, 2.547, 2.576, 2.602, 2.614,\n+                            2.591, 2.576, 2.546, 2.519, 2.489, 2.464, 2.437, 2.427, 2.427, 2.441, 2.467, 2.492, 2.525, 2.553, 2.586, 2.605,\n+                            2.588, 2.568, 2.534, 2.503, 2.472, 2.437, 2.423, 2.409, 2.411, 2.425, 2.441, 2.475, 2.513, 2.541, 2.577, 2.602,\n+                            2.588, 2.565, 2.527, 2.494, 2.461, 2.425, 2.409, 2.399, 2.403, 2.409, 2.431, 2.466, 2.503, 2.534, 2.571, 2.601,\n+                            2.586, 2.561, 2.525, 2.491, 2.454, 2.418, 2.399, 2.396, 2.395, 2.402, 2.424, 2.461, 2.501, 2.531, 2.567, 2.599,\n+                            2.583, 2.559, 2.525, 2.491, 2.454, 2.418, 2.398, 2.393, 2.393, 2.401, 2.423, 2.459, 2.498, 2.531, 2.566, 2.597,\n+                            2.583, 2.559, 2.526, 2.494, 2.458, 2.421, 2.404, 2.397, 2.399, 2.404, 2.426, 2.461, 2.501, 2.531, 2.566, 2.596,\n+                            2.583, 2.563, 2.531, 2.501, 2.469, 2.435, 2.419, 2.405, 2.404, 2.422, 2.435, 2.471, 2.505, 2.537, 2.572, 2.596,\n+                            2.585, 2.571, 2.539, 2.516, 2.486, 2.458, 2.435, 2.424, 2.424, 2.435, 2.459, 2.489, 2.521, 2.546, 2.579, 2.601,\n+                            2.589, 2.578, 2.557, 2.532, 2.506, 2.483, 2.458, 2.449, 2.449, 2.459, 2.485, 2.507, 2.535, 2.563, 2.591, 2.605,\n+                            2.589, 2.586, 2.575, 2.551, 2.525, 2.503, 2.481, 2.476, 2.476, 2.481, 2.504, 2.526, 2.555, 2.583, 2.604, 2.611\n+                        ]\n+                    }\n+                ],\n+                \"calibrations_Cb\": [\n+                    {\n+                        \"ct\": 3000,\n+                        \"table\":\n+                        [\n+                            3.311, 3.339, 3.369, 3.374, 3.371, 3.363, 3.356, 3.353, 3.353, 3.353, 3.357, 3.362, 3.362, 3.356, 3.328, 3.311,\n+                            3.321, 3.354, 3.374, 3.374, 3.368, 3.359, 3.352, 3.349, 3.347, 3.347, 3.349, 3.357, 3.361, 3.359, 3.343, 3.324,\n+                            3.334, 3.368, 3.375, 3.374, 3.365, 3.356, 3.349, 3.347, 3.346, 3.346, 3.347, 3.349, 3.358, 3.361, 3.357, 3.336,\n+                            3.346, 3.378, 3.378, 3.369, 3.363, 3.358, 3.351, 3.348, 3.347, 3.346, 3.347, 3.348, 3.354, 3.364, 3.363, 3.345,\n+                            3.351, 3.381, 3.381, 3.368, 3.361, 3.357, 3.349, 3.347, 3.347, 3.345, 3.345, 3.347, 3.353, 3.364, 3.364, 3.347,\n+                            3.353, 3.379, 3.379, 3.366, 3.359, 3.351, 3.348, 3.343, 3.342, 3.342, 3.343, 3.345, 3.351, 3.363, 3.363, 3.347,\n+                            3.353, 3.376, 3.376, 3.363, 3.351, 3.347, 3.343, 3.338, 3.336, 3.338, 3.339, 3.343, 3.351, 3.361, 3.361, 3.347,\n+                            3.351, 3.374, 3.374, 3.359, 3.351, 3.345, 3.338, 3.334, 3.333, 3.334, 3.336, 3.339, 3.347, 3.358, 3.358, 3.345,\n+                            3.346, 3.368, 3.368, 3.359, 3.349, 3.343, 3.336, 3.332, 3.327, 3.331, 3.333, 3.337, 3.346, 3.356, 3.356, 3.341,\n+                            3.336, 3.362, 3.364, 3.359, 3.351, 3.342, 3.334, 3.324, 3.324, 3.325, 3.329, 3.336, 3.346, 3.351, 3.351, 3.333,\n+                            3.324, 3.349, 3.359, 3.358, 3.352, 3.341, 3.329, 3.323, 3.321, 3.322, 3.326, 3.336, 3.346, 3.347, 3.339, 3.319,\n+                            3.311, 3.328, 3.352, 3.354, 3.352, 3.341, 3.329, 3.321, 3.319, 3.321, 3.324, 3.338, 3.343, 3.343, 3.319, 3.312\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5000,\n+                        \"table\":\n+                        [\n+                            1.634, 1.647, 1.665, 1.668, 1.668, 1.664, 1.662, 1.662, 1.661, 1.661, 1.661, 1.663, 1.663, 1.659, 1.643, 1.636,\n+                            1.639, 1.656, 1.668, 1.669, 1.668, 1.666, 1.664, 1.663, 1.663, 1.661, 1.661, 1.662, 1.663, 1.662, 1.654, 1.642,\n+                            1.645, 1.663, 1.669, 1.668, 1.667, 1.667, 1.667, 1.668, 1.668, 1.665, 1.662, 1.661, 1.662, 1.664, 1.661, 1.649,\n+                            1.651, 1.669, 1.669, 1.667, 1.666, 1.668, 1.669, 1.672, 1.672, 1.668, 1.665, 1.661, 1.661, 1.665, 1.665, 1.655,\n+                            1.654, 1.669, 1.669, 1.666, 1.666, 1.669, 1.672, 1.673, 1.673, 1.671, 1.666, 1.661, 1.661, 1.665, 1.665, 1.659,\n+                            1.654, 1.669, 1.669, 1.666, 1.666, 1.669, 1.671, 1.673, 1.672, 1.669, 1.667, 1.661, 1.661, 1.665, 1.665, 1.659,\n+                            1.654, 1.668, 1.668, 1.664, 1.663, 1.667, 1.669, 1.671, 1.669, 1.668, 1.665, 1.661, 1.661, 1.663, 1.663, 1.659,\n+                            1.653, 1.665, 1.665, 1.661, 1.661, 1.664, 1.667, 1.668, 1.668, 1.665, 1.661, 1.658, 1.659, 1.662, 1.662, 1.657,\n+                            1.651, 1.664, 1.664, 1.659, 1.659, 1.661, 1.663, 1.663, 1.662, 1.661, 1.658, 1.656, 1.657, 1.662, 1.662, 1.655,\n+                            1.645, 1.661, 1.663, 1.661, 1.659, 1.659, 1.659, 1.657, 1.657, 1.656, 1.654, 1.655, 1.656, 1.661, 1.661, 1.649,\n+                            1.641, 1.654, 1.661, 1.661, 1.659, 1.657, 1.655, 1.653, 1.652, 1.651, 1.652, 1.653, 1.657, 1.658, 1.655, 1.644,\n+                            1.635, 1.645, 1.661, 1.661, 1.661, 1.655, 1.653, 1.649, 1.648, 1.647, 1.651, 1.653, 1.657, 1.657, 1.646, 1.638\n+                        ]\n+                    }\n+                ],\n+                \"luminance_lut\":\n+                [\n+                    3.535, 3.279, 3.049, 2.722, 2.305, 1.958, 1.657, 1.647, 1.647, 1.656, 1.953, 2.289, 2.707, 3.058, 3.325, 3.589,\n+                    3.379, 3.157, 2.874, 2.421, 1.973, 1.735, 1.472, 1.388, 1.388, 1.471, 1.724, 1.963, 2.409, 2.877, 3.185, 3.416,\n+                    3.288, 3.075, 2.696, 2.169, 1.735, 1.472, 1.311, 1.208, 1.208, 1.306, 1.471, 1.724, 2.159, 2.695, 3.092, 3.321,\n+                    3.238, 3.001, 2.534, 1.981, 1.572, 1.311, 1.207, 1.082, 1.082, 1.204, 1.306, 1.563, 1.973, 2.529, 3.008, 3.259,\n+                    3.211, 2.938, 2.414, 1.859, 1.468, 1.221, 1.082, 1.036, 1.031, 1.079, 1.217, 1.463, 1.851, 2.403, 2.931, 3.229,\n+                    3.206, 2.904, 2.356, 1.802, 1.421, 1.181, 1.037, 1.002, 1.002, 1.032, 1.175, 1.414, 1.793, 2.343, 2.899, 3.223,\n+                    3.206, 2.904, 2.356, 1.802, 1.421, 1.181, 1.037, 1.005, 1.005, 1.032, 1.175, 1.414, 1.793, 2.343, 2.899, 3.223,\n+                    3.211, 2.936, 2.417, 1.858, 1.468, 1.222, 1.083, 1.037, 1.032, 1.083, 1.218, 1.463, 1.848, 2.403, 2.932, 3.226,\n+                    3.234, 2.997, 2.536, 1.979, 1.569, 1.311, 1.206, 1.084, 1.084, 1.204, 1.305, 1.565, 1.966, 2.524, 2.996, 3.251,\n+                    3.282, 3.069, 2.697, 2.166, 1.731, 1.471, 1.311, 1.207, 1.207, 1.305, 1.466, 1.729, 2.158, 2.689, 3.077, 3.304,\n+                    3.369, 3.146, 2.873, 2.415, 1.964, 1.722, 1.471, 1.382, 1.382, 1.466, 1.722, 1.964, 2.408, 2.871, 3.167, 3.401,\n+                    3.524, 3.253, 3.025, 2.691, 2.275, 1.939, 1.657, 1.628, 1.628, 1.654, 1.936, 2.275, 2.687, 3.029, 3.284, 3.574\n+                ],\n+                \"sigma\": 0.00195,\n+                \"sigma_Cb\": 0.00241\n+            }\n+        },\n+        {\n+            \"rpi.contrast\":\n+            {\n+                \"ce_enable\": 1,\n+                \"gamma_curve\":\n+                [\n+                    0, 0,\n+                    1024, 5040,\n+                    2048, 9338,\n+                    3072, 12356,\n+                    4096, 15312,\n+                    5120, 18051,\n+                    6144, 20790,\n+                    7168, 23193,\n+                    8192, 25744,\n+                    9216, 27942,\n+                    10240, 30035,\n+                    11264, 32005,\n+                    12288, 33975,\n+                    13312, 35815,\n+                    14336, 37600,\n+                    15360, 39168,\n+                    16384, 40642,\n+                    18432, 43379,\n+                    20480, 45749,\n+                    22528, 47753,\n+                    24576, 49621,\n+                    26624, 51253,\n+                    28672, 52698,\n+                    30720, 53796,\n+                    32768, 54876,\n+                    36864, 57012,\n+                    40960, 58656,\n+                    45056, 59954,\n+                    49152, 61183,\n+                    53248, 62355,\n+                    57344, 63419,\n+                    61440, 64476,\n+                    65535, 65535\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.ccm\":\n+            {\n+                \"ccms\": [\n+                    {\n+                        \"ct\": 2750,\n+                        \"ccm\":\n+                        [\n+                            1.13004, 0.36392, -0.49396,\n+                            -0.45885, 1.68171, -0.22286,\n+                            -0.06473, -0.86962, 1.93435\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 2940,\n+                        \"ccm\":\n+                        [\n+                            1.29876, 0.09627, -0.39503,\n+                            -0.43085, 1.60258, -0.17172,\n+                            -0.02638, -0.92581, 1.95218\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 3650,\n+                        \"ccm\":\n+                        [\n+                            1.57729, -0.29734, -0.27995,\n+                            -0.42965, 1.66231, -0.23265,\n+                            -0.02183, -0.62331, 1.64514\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 4625,\n+                        \"ccm\":\n+                        [\n+                            1.52145, -0.22382, -0.29763,\n+                            -0.40445, 1.82186, -0.41742,\n+                            -0.05732, -0.56222, 1.61954\n+                        ]\n+                    },\n+                    {\n+                        \"ct\": 5715,\n+                        \"ccm\":\n+                        [\n+                            1.67851, -0.39193, -0.28658,\n+                            -0.37169, 1.72949, -0.35781,\n+                            -0.09556, -0.41951, 1.51508\n+                        ]\n+                    }\n+                ]\n+            }\n+        },\n+        {\n+            \"rpi.sharpen\": { }\n+        },\n+        {\n+            \"rpi.focus\": { }\n+        },\n+        {\n+            \"rpi.af\":\n+            {\n+                \"ranges\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"min\": 0.0,\n+                        \"max\": 12.0,\n+                        \"default\": 1.0\n+                    },\n+                    \"macro\":\n+                    {\n+                        \"min\": 4.0,\n+                        \"max\": 32.0,\n+                        \"default\": 6.0\n+                    }\n+                },\n+                \"speeds\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"step_coarse\": 2.0,\n+                        \"step_fine\": 0.5,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.03,\n+                        \"pdaf_squelch\": 0.2,\n+                        \"max_slew\": 4.0,\n+                        \"pdaf_frames\": 20,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    },\n+                    \"fast\":\n+                    {\n+                        \"step_coarse\": 2.0,\n+                        \"step_fine\": 0.5,\n+                        \"contrast_ratio\": 0.75,\n+                        \"pdaf_gain\": -0.05,\n+                        \"pdaf_squelch\": 0.2,\n+                        \"max_slew\": 5.0,\n+                        \"pdaf_frames\": 16,\n+                        \"dropout_frames\": 6,\n+                        \"step_frames\": 4\n+                    }\n+                },\n+                \"conf_epsilon\": 8,\n+                \"conf_thresh\": 12,\n+                \"conf_clip\": 512,\n+                \"skip_frames\": 5,\n+                \"map\": [ 0.0, 420, 35.0, 920 ]\n+            }\n+        }\n+    ]\n+}\ndiff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/raspberrypi/data/meson.build\nindex 5565508cf602..b163a052f57c 100644\n--- a/src/ipa/raspberrypi/data/meson.build\n+++ b/src/ipa/raspberrypi/data/meson.build\n@@ -11,6 +11,10 @@ conf_files = files([\n     'imx477_noir.json',\n     'imx477_scientific.json',\n     'imx519.json',\n+    'imx708.json',\n+    'imx708_noir.json',\n+    'imx708_wide.json',\n+    'imx708_wide_noir.json',\n     'ov5647.json',\n     'ov5647_noir.json',\n     'ov9281_mono.json',\ndiff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\nindex 4e2689536257..9230e17bca22 100644\n--- a/src/ipa/raspberrypi/meson.build\n+++ b/src/ipa/raspberrypi/meson.build\n@@ -23,6 +23,7 @@ rpi_ipa_sources = files([\n     'cam_helper_imx296.cpp',\n     'cam_helper_imx477.cpp',\n     'cam_helper_imx519.cpp',\n+    'cam_helper_imx708.cpp',\n     'cam_helper_ov9281.cpp',\n     'controller/controller.cpp',\n     'controller/histogram.cpp',\n","prefixes":["libcamera-devel","v2","14/14"]}