Patch Detail
Show a patch.
GET /api/1.1/patches/18189/?format=api
{ "id": 18189, "url": "https://patchwork.libcamera.org/api/1.1/patches/18189/?format=api", "web_url": "https://patchwork.libcamera.org/patch/18189/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "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=api", "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=api", "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 ®isters,\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 ®isters,\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" ] }