Patch Detail
Show a patch.
GET /api/1.1/patches/10537/?format=api
{ "id": 10537, "url": "https://patchwork.libcamera.org/api/1.1/patches/10537/?format=api", "web_url": "https://patchwork.libcamera.org/patch/10537/", "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": "<20201201175536.11093-3-david.plowman@raspberrypi.com>", "date": "2020-12-01T17:55:33", "name": "[libcamera-devel,v4,2/5] src: ipa: raspberrypi: agc: Make AGC handle Pause/Resume for itself", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "8d91521aaf077b5fd5f785dd26d0ee7a02c81ca4", "submitter": { "id": 42, "url": "https://patchwork.libcamera.org/api/1.1/people/42/?format=api", "name": "David Plowman", "email": "david.plowman@raspberrypi.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/10537/mbox/", "series": [ { "id": 1499, "url": "https://patchwork.libcamera.org/api/1.1/series/1499/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=1499", "date": "2020-12-01T17:55:31", "name": "Raspberry Pi AGC improvements", "version": 4, "mbox": "https://patchwork.libcamera.org/series/1499/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/10537/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/10537/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 1884EBE176\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 1 Dec 2020 17:55:47 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D5E736350A;\n\tTue, 1 Dec 2020 18:55:46 +0100 (CET)", "from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com\n\t[IPv6:2a00:1450:4864:20::42d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6807F6350A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 1 Dec 2020 18:55:44 +0100 (CET)", "by mail-wr1-x42d.google.com with SMTP id z7so4043290wrn.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 01 Dec 2020 09:55:44 -0800 (PST)", "from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72])\n\tby smtp.gmail.com with ESMTPSA id\n\tl3sm438561wrr.89.2020.12.01.09.55.43\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 01 Dec 2020 09:55:43 -0800 (PST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"fZSvx52u\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=ER5bp6kWDKmeBDzRb8dI93yLVd9KdrJ8QDJlGEaxezc=;\n\tb=fZSvx52uB9pqb/XnYob+ag5ahp0eghmMjs4bPf5Byo8u2uh2VbFRG+ZXGjIlUoxEmb\n\tuYSW8Th4dln0Np15/GoiO340/p0krsWRVlu/SjMo2NSkvCC8waiB1hPX7zRQp3T+6VjW\n\tm994FhKlhceUYL/U+yc7MeoFtdnAO67EFTjiB0Jjdr4gbbN17bpN1X20f9jXtUKIzq+v\n\tvhoNbcvYBM2LzbA4e7IW0NWNWAEq04o7W2qILu8eZMHk0TjGuMxehnpZHpfB/YGV9O84\n\tshUDpoTHBDqkDQx1oesOj6eH6mgJVFCRLpT1zTHfNQMsqdUYa0aSmOlOyd5BCHwDMWm0\n\tgSYQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=ER5bp6kWDKmeBDzRb8dI93yLVd9KdrJ8QDJlGEaxezc=;\n\tb=Ecoz9EytAnUMuRutfcTP/4/yvTiKZexNFxN/S/gACKXkD2FxvIJ6lIuni/OAB0o/8Y\n\te0j45FrNx5FBAmvMjtFoXOrqAEpcv+KxWnNiODsZ5/vEyiSkGjadifGv5Bm9JGIlOdZy\n\td2wy20XsCHp8hC/drVyQKYWVlsfldKphgtFwMdSf1q6wANQPkXH68UOPUGohseaHsyMl\n\tGXy0GoJKUaxufnU7lTh1AnThnYXWd8N8Y+7XKaBmXhsLnBAQfNBHdPk5b8zLe0/HUw0N\n\tuC+/mdHcwD7nPXV6cQUzHVjSKJw8RDnUlue/gOTt95eZUeRW3c0vNGTJk0ktuHbVAh8W\n\tVA7Q==", "X-Gm-Message-State": "AOAM532FEylYHAogP6OvcqeHPj9TbkZQVcAl9GeL9ysaN0AOMkFVV/5/\n\tehbnWPTnz0/DjRKkkRqlfBqjihy7DDUyJ38z", "X-Google-Smtp-Source": "ABdhPJyoqVz4YuTJA0WBYYlneTzJd6/OIIlExvj3WpfxAUA4OY6KxvjveAaIml6JSoic2AEUPHClpg==", "X-Received": "by 2002:a5d:67c5:: with SMTP id n5mr5426810wrw.179.1606845343900;\n\tTue, 01 Dec 2020 09:55:43 -0800 (PST)", "From": "David Plowman <david.plowman@raspberrypi.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Tue, 1 Dec 2020 17:55:33 +0000", "Message-Id": "<20201201175536.11093-3-david.plowman@raspberrypi.com>", "X-Mailer": "git-send-email 2.20.1", "In-Reply-To": "<20201201175536.11093-1-david.plowman@raspberrypi.com>", "References": "<20201201175536.11093-1-david.plowman@raspberrypi.com>", "MIME-Version": "1.0", "Subject": "[libcamera-devel] [PATCH v4 2/5] src: ipa: raspberrypi: agc: Make\n\tAGC handle Pause/Resume for itself", "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>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "AGC, when paused, sets the last exposure/gain it wrote to be its\n\"fixed\" values and will therefore continue to return them. When\nresumed, we clear them so that both will float again.\n\nThis approach is better because AGC can be paused and we can\nsubsequently change (for example) the exposure and the gain won't\nfloat again.\n\nSigned-off-by: David Plowman <david.plowman@raspberrypi.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/ipa/raspberrypi/controller/rpi/agc.cpp | 24 ++++++++++++++++++++++\n src/ipa/raspberrypi/controller/rpi/agc.hpp | 4 ++++\n 2 files changed, 28 insertions(+)", "diff": "diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp\nindex 30a1c1c1..9da18c31 100644\n--- a/src/ipa/raspberrypi/controller/rpi/agc.cpp\n+++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp\n@@ -184,6 +184,26 @@ void Agc::Read(boost::property_tree::ptree const ¶ms)\n \texposure_mode_ = &config_.exposure_modes[exposure_mode_name_];\n \tconstraint_mode_name_ = config_.default_constraint_mode;\n \tconstraint_mode_ = &config_.constraint_modes[constraint_mode_name_];\n+\t// Set up the \"last shutter/gain\" values, in case AGC starts \"disabled\".\n+\tstatus_.shutter_time = config_.default_exposure_time;\n+\tstatus_.analogue_gain = config_.default_analogue_gain;\n+}\n+\n+bool Agc::IsPaused() const\n+{\n+\treturn false;\n+}\n+\n+void Agc::Pause()\n+{\n+\tfixed_shutter_ = status_.shutter_time;\n+\tfixed_analogue_gain_ = status_.analogue_gain;\n+}\n+\n+void Agc::Resume()\n+{\n+\tfixed_shutter_ = 0;\n+\tfixed_analogue_gain_ = 0;\n }\n \n void Agc::SetEv(double ev)\n@@ -199,11 +219,15 @@ void Agc::SetFlickerPeriod(double flicker_period)\n void Agc::SetFixedShutter(double fixed_shutter)\n {\n \tfixed_shutter_ = fixed_shutter;\n+\t// Set this in case someone calls Pause() straight after.\n+\tstatus_.shutter_time = fixed_shutter;\n }\n \n void Agc::SetFixedAnalogueGain(double fixed_analogue_gain)\n {\n \tfixed_analogue_gain_ = fixed_analogue_gain;\n+\t// Set this in case someone calls Pause() straight after.\n+\tstatus_.analogue_gain = fixed_analogue_gain;\n }\n \n void Agc::SetMeteringMode(std::string const &metering_mode_name)\ndiff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp b/src/ipa/raspberrypi/controller/rpi/agc.hpp\nindex 47ebb324..95db1812 100644\n--- a/src/ipa/raspberrypi/controller/rpi/agc.hpp\n+++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp\n@@ -70,6 +70,10 @@ public:\n \tAgc(Controller *controller);\n \tchar const *Name() const override;\n \tvoid Read(boost::property_tree::ptree const ¶ms) override;\n+\t// AGC handles \"pausing\" for itself.\n+\tbool IsPaused() const override;\n+\tvoid Pause() override;\n+\tvoid Resume() override;\n \tvoid SetEv(double ev) override;\n \tvoid SetFlickerPeriod(double flicker_period) override;\n \tvoid SetFixedShutter(double fixed_shutter) override; // microseconds\n", "prefixes": [ "libcamera-devel", "v4", "2/5" ] }