{"id":20218,"url":"https://patchwork.libcamera.org/api/patches/20218/?format=json","web_url":"https://patchwork.libcamera.org/patch/20218/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<20240606101512.375178-5-david.plowman@raspberrypi.com>","date":"2024-06-06T10:15:10","name":"[4/6] utils: raspberrypi: ctt: Update tuning tool for HDR","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"9bbbcd6c696541eeda5b2e199a6d268529d1ed10","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/?format=json","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/20218/mbox/","series":[{"id":4367,"url":"https://patchwork.libcamera.org/api/series/4367/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4367","date":"2024-06-06T10:15:06","name":"Raspberry Pi Camera Tuning Tool updates","version":1,"mbox":"https://patchwork.libcamera.org/series/4367/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/20218/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/20218/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 AE87ABD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  6 Jun 2024 10:15:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D8D2E65459;\n\tThu,  6 Jun 2024 12:15:39 +0200 (CEST)","from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com\n\t[IPv6:2a00:1450:4864:20::52d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 250296545A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  6 Jun 2024 12:15:33 +0200 (CEST)","by mail-ed1-x52d.google.com with SMTP id\n\t4fb4d7f45d1cf-57a68b0fbd0so807237a12.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 06 Jun 2024 03:15:33 -0700 (PDT)","from pi5-davidp.pitowers.org\n\t([2001:4d4e:300:1f:c732:5d0a:406b:ae46])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-a6c805c59a2sm75809866b.50.2024.06.06.03.15.31\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 06 Jun 2024 03:15:31 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"I8ttmovn\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1717668932; x=1718273732;\n\tdarn=lists.libcamera.org; \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=6nH8hD6TqopDewdCCAXY6b7lUwaffPrh4fUbV/TkoAo=;\n\tb=I8ttmovnn+hSzr/IqW/dPernrDAR549If8kFRp4mhRD0f1eHucRc6aBcIDkXOMc8CC\n\tNmKPFRK3S0pRwT9260Aoswld9sLhNp0WA6aP776FTu31zfFH5pdILxuJicpr7Pes0ppg\n\tXV5BWQ4tKutEJXYLMCJZSgBZ4XTpxgWPkIKu9OLqU//g+4aEZ3Z6npQ00wJORIYEzA8/\n\taO7JItkkXSO5mxUMTlYOOzxKxjygLztj0f/foSvov8kkPlgSbPs0DCnyI6BacuFBSF7Z\n\tNcN+9vE7tAKjsOtWbKFP2gIX85e2ChyG05b6Zv2PLORaK4V3mqUQQTnXtb9zEpCDYfeJ\n\tfKUg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1717668932; x=1718273732;\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=6nH8hD6TqopDewdCCAXY6b7lUwaffPrh4fUbV/TkoAo=;\n\tb=kJWGhCwpLFF3+8wJ+t2pXPH/WCMWtvVbV/WXWGI53fi0vHKX50jiS+JUlzjEeSE3O0\n\t4philP/6HhyZ9DFa0Mj9fIwZMEQnBg4padDK/SBTg/EEALTJ17/Owz951TC2Q8dKYZKR\n\tOX6JfiuTe+daG4WOAVndK+COZAJW+t/f6YHeYysAA2c6Ak2XxP6ToUHzo4VucrR30ZKZ\n\tRtrgr0lqQ8ml8B9su3rzmsKcniFI8qWgyglhH/vj4ietAuXp+ZmInLN/Ig0jcUji+MwI\n\tNBKj47t9jHM3dVlkWOgL1fK1fZUTL5A0O5tjwq866ADkgRcvKPzFDjnruu00wRCrD1mC\n\t+Dbw==","X-Gm-Message-State":"AOJu0YzIGI+HaCFtHOdt+HMbO9z0CJrHb52aJcTjyvZYXawlzqtutABU\n\tl5lHGtQd9ins7K7V3CdPwQodl7lBDu10DI/3Z6vmb6Jy8OvrxOI8qHQU4BwJnXwEX3h/ZsDmJSG\n\tY","X-Google-Smtp-Source":"AGHT+IG6LBtDn9XqNjGltvhZbEgAMd+daj49iwtlropmmBFpXfTG6v08BUCvf7F4lcDBdiz437JgcQ==","X-Received":"by 2002:a17:906:1b4a:b0:a68:4491:59e2 with SMTP id\n\ta640c23a62f3a-a699f67ecbcmr289755066b.3.1717668931988; \n\tThu, 06 Jun 2024 03:15:31 -0700 (PDT)","From":"David Plowman <david.plowman@raspberrypi.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"David Plowman <david.plowman@raspberrypi.com>,\n\tNaushir Patuck <naush@raspberrypi.com>","Subject":"[PATCH 4/6] utils: raspberrypi: ctt: Update tuning tool for HDR","Date":"Thu,  6 Jun 2024 11:15:10 +0100","Message-Id":"<20240606101512.375178-5-david.plowman@raspberrypi.com>","X-Mailer":"git-send-email 2.39.2","In-Reply-To":"<20240606101512.375178-1-david.plowman@raspberrypi.com>","References":"<20240606101512.375178-1-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The various boilerplate parts of the tuning file are extended to\ninclude the necessary extra bits for HDR, specifically:\n\n* rpi.denoise has different configurations for HDR modes\n* rpi.agc now has extra channels for HDR\n* rpi.hdr parameters are added.\n\nSigned-off-by: David Plowman <david.plowman@raspberrypi.com>\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n---\n utils/raspberrypi/ctt/ctt_pisp.py             | 785 ++++++++++++++++--\n .../raspberrypi/ctt/ctt_pretty_print_json.py  |   3 +-\n 2 files changed, 695 insertions(+), 93 deletions(-)","diff":"diff --git a/utils/raspberrypi/ctt/ctt_pisp.py b/utils/raspberrypi/ctt/ctt_pisp.py\nindex 4c432f17..a59b053c 100755\n--- a/utils/raspberrypi/ctt/ctt_pisp.py\n+++ b/utils/raspberrypi/ctt/ctt_pisp.py\n@@ -25,23 +25,68 @@ json_template = {\n     },\n     \"rpi.denoise\":\n     {\n-        \"sdn\":\n+        \"normal\":\n         {\n-            \"deviation\": 1.6,\n-            \"strength\": 0.5,\n-            \"deviation2\": 3.2,\n-            \"deviation_no_tdn\": 3.2,\n-            \"strength_no_tdn\": 0.75\n+            \"sdn\":\n+            {\n+                \"deviation\": 1.6,\n+                \"strength\": 0.5,\n+                \"deviation2\": 3.2,\n+                \"deviation_no_tdn\": 3.2,\n+                \"strength_no_tdn\": 0.75\n+            },\n+            \"cdn\":\n+            {\n+                \"deviation\": 200,\n+                \"strength\": 0.3\n+            },\n+            \"tdn\":\n+            {\n+                \"deviation\": 0.8,\n+                \"threshold\": 0.05\n+            }\n         },\n-        \"cdn\":\n+        \"hdr\":\n         {\n-            \"deviation\": 200,\n-            \"strength\": 0.3\n+            \"sdn\":\n+            {\n+                \"deviation\": 1.6,\n+                \"strength\": 0.5,\n+                \"deviation2\": 3.2,\n+                \"deviation_no_tdn\": 3.2,\n+                \"strength_no_tdn\": 0.75\n+            },\n+            \"cdn\":\n+            {\n+                \"deviation\": 200,\n+                \"strength\": 0.3\n+            },\n+            \"tdn\":\n+            {\n+                \"deviation\": 1.3,\n+                \"threshold\": 0.1\n+            }\n         },\n-        \"tdn\":\n+        \"night\":\n         {\n-            \"deviation\": 0.8,\n-            \"threshold\": 0.05\n+            \"sdn\":\n+            {\n+                \"deviation\": 1.6,\n+                \"strength\": 0.5,\n+                \"deviation2\": 3.2,\n+                \"deviation_no_tdn\": 3.2,\n+                \"strength_no_tdn\": 0.75\n+            },\n+            \"cdn\":\n+            {\n+                \"deviation\": 200,\n+                \"strength\": 0.3\n+            },\n+            \"tdn\":\n+            {\n+                \"deviation\": 1.3,\n+                \"threshold\": 0.1\n+            }\n         }\n     },\n     \"rpi.awb\": {\n@@ -61,91 +106,605 @@ json_template = {\n         },\n         \"bayes\": 1\n     },\n-    \"rpi.agc\": {\n-        \"metering_modes\": {\n-            \"centre-weighted\": {\n-\t\t\"weights\": [\n-\t\t    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n-\t\t    0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n-\t\t    1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n-\t\t    1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n-\t\t    0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n-\t\t    0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0\n-\t\t]\n-            },\n-            \"spot\": {\n-\t\t\"weights\": [\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n-\t\t    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n-\t\t]\n+    \"rpi.agc\":\n+    {\n+        \"channels\":\n+        [\n+            {\n+                \"comment\": \"Channel 0 is normal AGC\",\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0\n+                        ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n+                        ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n+                        ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 10000, 30000, 60000, 66666 ],\n+                        \"gain\": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 5000, 10000, 20000, 60000 ],\n+                        \"gain\": [ 1.0, 1.5, 2.0, 4.0, 8.0 ]\n+                    },\n+                    \"long\":\n+                    {\n+                        \"shutter\": [ 100, 10000, 30000, 60000, 90000, 120000 ],\n+                        \"gain\": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.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.5,\n+                                1000, 0.5\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.5,\n+                                1000, 0.5\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+                    \"shadows\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.0,\n+                            \"q_hi\": 0.5,\n+                            \"y_target\":\n+                            [\n+                                0, 0.17,\n+                                1000, 0.17\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ]\n             },\n-            \"matrix\": {\n-                \"weights\": [\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n-\t\t    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n-\t\t]\n-            }\n-        },\n-        \"exposure_modes\": {\n-            \"normal\": {\n-                \"shutter\": [100, 10000, 30000, 60000, 66666],\n-                \"gain\": [1.0, 1.5, 2.0, 4.0, 8.0]\n+            {\n+                \"comment\": \"Channel 1 is the HDR short channel\",\n+                \"desaturate\": 0,\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0\n+                        ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n+                        ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n+                        ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 60000 ],\n+                        \"gain\": [ 1.0, 1.0, 1.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 60000 ],\n+                        \"gain\": [ 1.0, 1.0, 1.0 ]\n+                    },\n+                    \"long\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 60000 ],\n+                        \"gain\": [ 1.0, 1.0, 1.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.5,\n+                                1000, 0.5\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.7,\n+                                1000, 0.7\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.0,\n+                            \"q_hi\": 0.2,\n+                            \"y_target\":\n+                            [\n+                                0, 0.002,\n+                                1000, 0.002\n+                            ]\n+                        }\n+                    ],\n+                    \"highlight\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.5,\n+                                1000, 0.5\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.7,\n+                                1000, 0.7\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.0,\n+                            \"q_hi\": 0.2,\n+                            \"y_target\":\n+                            [\n+                                0, 0.002,\n+                                1000, 0.002\n+                            ]\n+                        }\n+                    ],\n+                    \"shadows\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.5,\n+                                1000, 0.5\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"UPPER\",\n+                            \"q_lo\": 0.95,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.7,\n+                                1000, 0.7\n+                            ]\n+                        },\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.0,\n+                            \"q_hi\": 0.2,\n+                            \"y_target\":\n+                            [\n+                                0, 0.002,\n+                                1000, 0.002\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ]\n             },\n-            \"short\": {\n-                \"shutter\": [100, 5000, 10000, 20000, 60000],\n-                \"gain\": [1.0, 1.5, 2.0, 4.0, 8.0]\n+            {\n+                \"comment\": \"Channel 2 is the HDR long channel\",\n+                \"desaturate\": 0,\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0\n+                        ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n+                        ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n+                        ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 30000, 60000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 8.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 30000, 60000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 8.0 ]\n+                    },\n+                    \"long\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 30000, 60000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 8.0 ]\n+                    }\n+                },\n+                \"constraint_modes\":\n+                {\n+                    \"normal\": [\n+                    ],\n+                    \"highlight\": [\n+                    ],\n+                    \"shadows\": [\n+                    ]\n+                },\n+                \"channel_constraints\":\n+                [\n+                    {\n+                        \"bound\": \"UPPER\",\n+                        \"channel\": 4,\n+                        \"factor\": 8\n+                    },\n+                    {\n+                        \"bound\": \"LOWER\",\n+                        \"channel\": 4,\n+                        \"factor\": 2\n+                    }\n+                ],\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.165,\n+                    10000, 0.17\n+                ]\n             },\n-            \"long\":\n             {\n-                \"shutter\": [ 100, 10000, 30000, 60000, 90000, 120000 ],\n-                \"gain\": [ 1.0, 1.5, 2.0, 4.0, 8.0, 12.0 ]\n+                \"comment\": \"Channel 3 is the night mode channel\",\n+                \"base_ev\": 0.33,\n+                \"metering_modes\":\n+                {\n+                    \"centre-weighted\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 4, 4, 4, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 3, 3, 3, 4, 3, 3, 3, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1,\n+                            1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,\n+                            0, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 0,\n+                            0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0\n+                        ]\n+                    },\n+                    \"spot\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 1, 2, 3, 2, 1, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n+                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0\n+                        ]\n+                    },\n+                    \"matrix\":\n+                    {\n+                        \"weights\":\n+                        [\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n+                            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1\n+                        ]\n+                    }\n+                },\n+                \"exposure_modes\":\n+                {\n+                    \"normal\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 66666 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0 ]\n+                    },\n+                    \"short\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 33333 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0 ]\n+                    },\n+                    \"long\":\n+                    {\n+                        \"shutter\": [ 100, 20000, 66666, 120000 ],\n+                        \"gain\": [ 1.0, 2.0, 4.0, 4.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.5,\n+                                1000, 0.5\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.5,\n+                                1000, 0.5\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+                    \"shadows\": [\n+                        {\n+                            \"bound\": \"LOWER\",\n+                            \"q_lo\": 0.98,\n+                            \"q_hi\": 1.0,\n+                            \"y_target\":\n+                            [\n+                                0, 0.5,\n+                                1000, 0.5\n+                            ]\n+                        }\n+                    ]\n+                },\n+                \"y_target\":\n+                [\n+                    0, 0.16,\n+                    1000, 0.16,\n+                    10000, 0.17\n+                ]\n             }\n-        },\n-        \"constraint_modes\": {\n-            \"normal\": [\n-                {\"bound\": \"LOWER\", \"q_lo\": 0.98, \"q_hi\": 1.0, \"y_target\": [0, 0.5, 1000, 0.5]}\n-            ],\n-            \"highlight\": [\n-                {\"bound\": \"LOWER\", \"q_lo\": 0.98, \"q_hi\": 1.0, \"y_target\": [0, 0.5, 1000, 0.5]},\n-                {\"bound\": \"UPPER\", \"q_lo\": 0.98, \"q_hi\": 1.0, \"y_target\": [0, 0.8, 1000, 0.8]}\n-            ]\n-        },\n-        \"y_target\": [0, 0.16, 1000, 0.165, 10000, 0.17]\n+        ]\n     },\n     \"rpi.alsc\": {\n         'omega': 1.3,\n@@ -198,6 +757,48 @@ json_template = {\n \t\"threshold\": 0.25,\n \t\"limit\": 1.0,\n \t\"strength\": 1.0\n+    },\n+    \"rpi.hdr\":\n+    {\n+        \"Off\":\n+        {\n+            \"cadence\": [ 0 ]\n+        },\n+        \"MultiExposureUnmerged\":\n+        {\n+            \"cadence\": [ 1, 2 ],\n+            \"channel_map\": { \"short\": 1, \"long\": 2 }\n+        },\n+        \"SingleExposure\":\n+        {\n+            \"cadence\": [1],\n+            \"channel_map\": { \"short\": 1 },\n+            \"spatial_gain\": 2.0,\n+            \"tonemap_enable\": 1\n+        },\n+        \"MultiExposure\":\n+        {\n+            \"cadence\": [1, 2],\n+            \"channel_map\": { \"short\": 1, \"long\": 2 },\n+            \"stitch_enable\": 1,\n+            \"spatial_gain\": 2.0,\n+            \"tonemap_enable\": 1\n+        },\n+        \"Night\":\n+        {\n+            \"cadence\": [ 3 ],\n+            \"channel_map\": { \"night\": 3 },\n+            \"tonemap_enable\": 1,\n+            \"tonemap\":\n+            [\n+                0, 0,\n+                5000, 20000,\n+                10000, 30000,\n+                20000, 47000,\n+                30000, 55000,\n+                65535, 65535\n+            ]\n+        }\n     }\n }\n \ndiff --git a/utils/raspberrypi/ctt/ctt_pretty_print_json.py b/utils/raspberrypi/ctt/ctt_pretty_print_json.py\nindex 350cec65..a4cae62d 100755\n--- a/utils/raspberrypi/ctt/ctt_pretty_print_json.py\n+++ b/utils/raspberrypi/ctt/ctt_pretty_print_json.py\n@@ -30,7 +30,8 @@ class Encoder(json.JSONEncoder):\n             'lut_ry': 9,\n             'gamma_curve': 2,\n             'y_target': 2,\n-            'prior': 2\n+            'prior': 2,\n+            'tonemap': 2\n         }\n \n     def encode(self, o, node_key=None):\n","prefixes":["4/6"]}