| Related |
show
-
[RFC,v3,00/19] ipa: libipa: agc: Take exposure margin into account
-
[RFC,v3,01/19] ipa: libipa: exposure_mode_helper: Remove defaulted destructor
-
[RFC,v3,02/19] ipa: libipa: exposure_mode_helper: Keep stage params together
-
[RFC,v3,03/19] ipa: libipa: exposure_mode_helper: Remove limit getters
-
[RFC,v3,04/19] ipa: libipa: exposure_mode_helper: Move `stageGain` variable
-
[RFC,v3,05/19] ipa: libipa: exposure_mode_helper: Handle no stages
-
[RFC,v3,06/19] ipa: libipa: exposure_mode_helper: Consider last stage as hard-limit
-
[RFC,v3,07/19] ipa: libipa: exposure_mode_helper: Add separate maximize/minimize modes
-
[RFC,v3,08/19] libcamera: controls: Add two new exposure modes
-
[RFC,v3,09/19] ipa: libipa: agc: Keep frame duration limits ordered
-
[RFC,v3,10/19] ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier
-
[RFC,v3,11/19] ipa: libipa: agc: Report `FrameDurationLimits`
-
[RFC,v3,12/19] ipa: libipa: agc: Calculate vblank and frame duration sooner
-
[RFC,v3,13/19] ipa: libipa: agc: Take parameters from active state for calculation
-
[RFC,v3,14/19] libcamera: pipeline: Set vblank on more platforms
-
[RFC,v3,15/19] ipa: libipa: agc: Rework frame duration limit calculation
-
[RFC,v3,16/19] ipa: camera_sensor_helper: Introduce exposure margin
-
[RFC,v3,17/19] ipa: libipa: agc: Move control info map setup
-
[RFC,v3,18/19] ipa: libipa: exposure_mode_helper: Add getter for max exp time
-
[RFC,v3,19/19] ipa: libipa: agc: Take exposure margin into account
|
The maximum available exposure depends on the frame duration, but this is not considered by the current agc implementation, it fixes the maximum exposure time based on whatever configuration was used to configure the algorithm. This means that in certain situations the full exposure range might not be used, even in dark scenes. This a third attempt at adapting https://patchwork.libcamera.org/project/libcamera/list/?series=5590 on the current master branch. But now that the agc handling is largely unified, fewer changes are needed to make this work on every platform. So effectively only patch 7 is taken directly, but only the exposure margin introduction part of it. This was mainly tested on rkisp1+imx219, softisp+ov2740, rppx1+imx708. Unfortunately, back to RFC this time, mainly due to https://gitlab.freedesktop.org/camera/libcamera/-/work_items/362 It turns out to be a bit problematic. So this version adds significant changes: * last exposure stage constitutes a hard-limit for both exposure time and gain, this matches the behaviour of the raspberry pi ipa (see AgcChannel::computeTargetExposure() ) ( https://gitlab.freedesktop.org/camera/libcamera/-/work_items/362 ) * empty stage list is no longer supported, instead two new exposure modes are introduced: minimize and maximize, which implement the very simple behaviour of either minimizing or maximizing the exposure time, respectively; these modes are always available, even without any specific tuning, and this effectively preserves the current behaviour * the default max frame duration is now determined based on the largest exposure time among all stages (if any), otherwise it is capped to the arbitrary limit of 100ms ~ 10fps changes in v2: * report `FrameDurationLimits` in metadata * add exposure margin to more sensor helpers v2: https://patchwork.libcamera.org/cover/28367/ v1: https://patchwork.libcamera.org/cover/28111/ Barnabás Pőcze (18): ipa: libipa: exposure_mode_helper: Remove defaulted destructor ipa: libipa: exposure_mode_helper: Keep stage params together ipa: libipa: exposure_mode_helper: Remove limit getters ipa: libipa: exposure_mode_helper: Move `stageGain` variable ipa: libipa: exposure_mode_helper: Handle no stages ipa: libipa: exposure_mode_helper: Consider last stage as hard-limit ipa: libipa: exposure_mode_helper: Add separate maximize/minimize modes libcamera: controls: Add two new exposure modes ipa: libipa: agc: Keep frame duration limits ordered ipa: libipa: agc: Retrieve `FrameDurationLimits` earlier ipa: libipa: agc: Report `FrameDurationLimits` ipa: libipa: agc: Calculate vblank and frame duration sooner ipa: libipa: agc: Take parameters from active state for calculation libcamera: pipeline: Set vblank on more platforms ipa: libipa: agc: Rework frame duration limit calculation ipa: libipa: agc: Move control info map setup ipa: libipa: exposure_mode_helper: Add getter for max exp time ipa: libipa: agc: Take exposure margin into account Jacopo Mondi (1): ipa: camera_sensor_helper: Introduce exposure margin src/ipa/ipu3/algorithms/agc.cpp | 2 +- src/ipa/ipu3/ipu3.cpp | 3 +- src/ipa/libipa/agc.cpp | 311 +++++++++++-------- src/ipa/libipa/agc.h | 18 +- src/ipa/libipa/agc_mean_luminance.cpp | 37 ++- src/ipa/libipa/camera_sensor_helper.cpp | 68 ++++ src/ipa/libipa/camera_sensor_helper.h | 2 + src/ipa/libipa/exposure_mode_helper.cpp | 231 +++++++++----- src/ipa/libipa/exposure_mode_helper.h | 50 ++- src/ipa/mali-c55/algorithms/agc.cpp | 2 +- src/ipa/mali-c55/mali-c55.cpp | 3 +- src/ipa/rkisp1/algorithms/agc.cpp | 2 +- src/ipa/rkisp1/rkisp1.cpp | 4 +- src/ipa/softisp/algorithms/agc.cpp | 2 +- src/ipa/softisp/softisp.cpp | 3 +- src/libcamera/control_ids_core.yaml | 6 + src/libcamera/pipeline/ipu3/ipu3.cpp | 1 + src/libcamera/pipeline/mali-c55/mali-c55.cpp | 1 + src/libcamera/pipeline/simple/simple.cpp | 1 + 19 files changed, 500 insertions(+), 247 deletions(-) -- 2.56.0