{"id":22473,"url":"https://patchwork.libcamera.org/api/1.1/covers/22473/?format=json","web_url":"https://patchwork.libcamera.org/cover/22473/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250109000942.1616565-1-paul.elder@ideasonboard.com>","date":"2025-01-09T00:09:30","name":"[v6,00/12] AEGC controls","submitter":{"id":17,"url":"https://patchwork.libcamera.org/api/1.1/people/17/?format=json","name":"Paul Elder","email":"paul.elder@ideasonboard.com"},"mbox":"https://patchwork.libcamera.org/cover/22473/mbox/","series":[{"id":4936,"url":"https://patchwork.libcamera.org/api/1.1/series/4936/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4936","date":"2025-01-09T00:09:30","name":"AEGC controls","version":6,"mbox":"https://patchwork.libcamera.org/series/4936/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/22473/comments/","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 5CD4BC326B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jan 2025 00:09:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 42D04684E2;\n\tThu,  9 Jan 2025 01:09:56 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7B76F608AA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jan 2025 01:09:54 +0100 (CET)","from pyrite.hamster-moth.ts.net (unknown\n\t[IPv6:2604:2d80:9e93:ad00:3d82:7e4f:ab9b:8a])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 83AF36F3;\n\tThu,  9 Jan 2025 01:08:59 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Gs414ua8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1736381341;\n\tbh=ZfWdDwPdyBrZACZG8JYzZEJSpncyy8/yD04Up3d5RZw=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=Gs414ua8ag+BMRIe6ils2LyShY/LZW5JphR6dUpy9XqSJ+bz62nYmEMSJHMXSr/RO\n\tXR5A+RNaifSjHc5CUgp2DSEz6kBl8OLkuZu1Q7797x8fjg7iswTnMK6BSs0o+AF0+Y\n\tqBwCSC3217j//o9TqBZ1aTdrDEQ8Mob8K7v1AlMM=","From":"Paul Elder <paul.elder@ideasonboard.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Paul Elder <paul.elder@ideasonboard.com>,\n\tlaurent.pinchart@ideasonboard.com, stefan.klug@ideasonboard.com","Subject":"[PATCH v6 00/12] AEGC controls","Date":"Wed,  8 Jan 2025 18:09:30 -0600","Message-Id":"<20250109000942.1616565-1-paul.elder@ideasonboard.com>","X-Mailer":"git-send-email 2.39.2","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":"This patch series introduces a new set of AEGC controls that allow:\n- flicker avoidance when switching from auto to manual\n- shutter priority / gain priority\n\nTo achieve this, we remove the existing AeEnable control and add two\nseparate controls that control enabling/disabling auto-exposure and\nauto-gain. The definition of AeState is also made more concrete. The\nfirst two patches add the new controls, as well as documentation and\ndesign rationale.\n\nThe rest of the patches naturally update the existing users of AeEnable,\nbefore finally removing the control altogether.\n\nv4 mainly improves documentation and implements the proper behavior when\ntransitioning between auto and manual modes for the rkisp1.\n\nv5 is mostly minor wording changes, plus a fix to the rkisp1 aegc\nimplementation to support mixed manual-auto ae modes (aka \"shutter\npriority\" / \"gain priority\").\n\nv6 notably re-introduces the AeEnable control, as it was deemed\nnecessary (see the relevant patches for details). Instead of re-writing\nthe previous patches, it is tacked on in the last 4 patches of the\nseries (with a trivial modification to the 8th patch).\n\nThanks,\n\nPaul\n\nJacopo Mondi (4):\n  libcamera: uvcvideo: Register ExposureTimeMode control\n  test: ipa_data_serialization: Use DebugMetadataEnable\n  ipa: raspberry: Port to the new AEGC controls\n  controls: Remove AeLocked\n\nPaul Elder (8):\n  controls: Introduce AEGC-related controls\n  Documentation: design: ae: Document the design for AE controls\n  ipa: rkisp1: Port to the new AEGC controls\n  gstreamer: Generate the new AEGC controls\n  controls: Redefine AeEnable\n  libcamera: camera: Pre-process AeEnable control\n  ipa: rkisp1: agc: Report new AeEnable control as available\n  ipa: raspberry: Report new AeEnable control as available\n\n Documentation/design/ae.rst                   | 331 ++++++++++++++++++\n Documentation/index.rst                       |   4 +-\n Documentation/meson.build                     |   1 +\n src/ipa/rkisp1/algorithms/agc.cpp             | 131 +++++--\n src/ipa/rkisp1/ipa_context.cpp                |  24 +-\n src/ipa/rkisp1/ipa_context.h                  |   8 +-\n src/ipa/rpi/common/ipa_base.cpp               |  74 +++-\n src/ipa/rpi/controller/agc_algorithm.h        |   8 +-\n src/ipa/rpi/controller/rpi/agc.cpp            |  52 ++-\n src/ipa/rpi/controller/rpi/agc.h              |   8 +-\n src/ipa/rpi/controller/rpi/agc_channel.cpp    |  24 +-\n src/ipa/rpi/controller/rpi/agc_channel.h      |   8 +-\n src/libcamera/camera.cpp                      |  18 +\n src/libcamera/control_ids_core.yaml           | 279 +++++++++++++--\n src/libcamera/control_ids_draft.yaml          |  30 --\n src/libcamera/pipeline/uvcvideo/uvcvideo.cpp  |  53 ++-\n .../ipa_data_serializer_test.cpp              |   2 +-\n utils/codegen/gen-gst-controls.py             |   5 +-\n 18 files changed, 939 insertions(+), 121 deletions(-)\n create mode 100644 Documentation/design/ae.rst"}