[libcamera-devel] [PATCH v4 1/2] libcamera: controls: Add controls for AEC/AGC flicker avoidance
David Plowman
david.plowman at raspberrypi.com
Thu Jul 13 17:12:17 CEST 2023
Flicker is the term used to describe brightness banding or oscillation
of images caused typically by artificial lighting driven by a 50 or
60Hz mains supply. We add three controls intended to be used by
AEC/AGC algorithms:
AeFlickerMode to enable flicker avoidance.
AeFlickerCustom to set custom flicker periods.
AeFlickerDetected to report any flicker that is currently detected.
Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
---
src/libcamera/control_ids.yaml | 79 ++++++++++++++++++++++++++--------
1 file changed, 62 insertions(+), 17 deletions(-)
diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
index 056886e6..f1629b89 100644
--- a/src/libcamera/control_ids.yaml
+++ b/src/libcamera/control_ids.yaml
@@ -156,6 +156,68 @@ controls:
control of which features should be automatically adjusted shouldn't
better be handled through a separate AE mode control.
+ - AeFlickerMode:
+ type: int32_t
+ description: |
+ Set the flicker mode, which determines whether, and how, the AGC/AEC
+ algorithm attempts to hide flicker effects caused by the duty cycle of
+ artificial lighting.
+
+ Although implementation dependent, many algorithms for "flicker
+ avoidance" work by restricting this exposure time to integer multiples
+ of the cycle period, wherever possible.
+
+ Implementations may not support all of the flicker modes listed below.
+
+ By default the system will start in FlickerAuto mode if this is
+ supported, otherwise the flicker mode will be set to FlickerOff.
+
+ enum:
+ - name: FlickerOff
+ value: 0
+ description: No flicker avoidance is performed.
+ - name: FlickerCustom
+ value: 1
+ description: Custom flicker avoidance.
+ Suppress flicker effects caused by lighting running with a period
+ specified by the AeFlickerCustom control.
+ \sa AeFlickerCustom
+ - name: FlickerAuto
+ value: 2
+ description: Automatic flicker period detection and avoidance.
+ The system will automatically determine the most likely value of
+ flicker period, and avoid flicker of this frequency. Once flicker
+ is being corrected, it is implementation dependent whether the
+ system is still able to detect a change in the flicker period.
+
+ - AeFlickerCustom:
+ type: int32_t
+ description: Custom flicker period in microseconds.
+ This value sets the current flicker period to avoid. It is used when
+ AeFlickerMode is set to FlickerCustom.
+
+ To cancel 50Hz mains flicker, this should be set to 10000 (corresponding
+ to 100Hz), or 8333 (120Hz) for 60Hz mains.
+
+ If this control is not available, then the setting of custom flicker
+ periods is not supported.
+
+ \sa AeFlickerMode
+
+ - AeFlickerDetected:
+ type: int32_t
+ description: Flicker period detected in microseconds.
+ The value reported here indicates the currently detected flicker
+ period, or zero if no flicker at all is detected.
+
+ In the case of 50Hz mains flicker, the value would be 10000
+ (corresponding to 100Hz), or 8333 (120Hz) for 60Hz mains flicker.
+
+ It is implementation dependent exactly when the system is able
+ to detect and report the flicker period.
+
+ \sa AeFlickerMode
+
- Brightness:
type: float
description: |
@@ -850,23 +912,6 @@ controls:
value: 1
description: The lens shading map mode is available.
- - SceneFlicker:
- type: int32_t
- draft: true
- description: |
- Control to report the detected scene light frequency. Currently
- identical to ANDROID_STATISTICS_SCENE_FLICKER.
- enum:
- - name: SceneFickerOff
- value: 0
- description: No flickering detected.
- - name: SceneFicker50Hz
- value: 1
- description: 50Hz flickering detected.
- - name: SceneFicker60Hz
- value: 2
- description: 60Hz flickering detected.
-
- PipelineDepth:
type: int32_t
draft: true
--
2.30.2
More information about the libcamera-devel
mailing list