[PATCH v3 1/4] libcamera: controls: Populate direction field in control definitions
Kieran Bingham
kieran.bingham at ideasonboard.com
Fri Dec 6 13:18:46 CET 2024
Quoting Paul Elder (2024-11-29 09:19:13)
> In preparation for adding support for querying direction information
> from controls, populate the corresponding field in the control ID
> defintions.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
>
> ---
> No change in v3
>
> Changes in v2:
> - add missing entries
> - add entries for all controls, since this field should be mandatory
> ---
> src/libcamera/control_ids_core.yaml | 44 ++++++++++++++++++++++++++++
> src/libcamera/control_ids_draft.yaml | 15 ++++++++++
> src/libcamera/control_ids_rpi.yaml | 3 ++
> 3 files changed, 62 insertions(+)
>
> diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml
> index d45cf8e56187..7335dd6ef4fa 100644
> --- a/src/libcamera/control_ids_core.yaml
> +++ b/src/libcamera/control_ids_core.yaml
> @@ -10,6 +10,7 @@ vendor: libcamera
> controls:
> - AeEnable:
> type: bool
> + direction: inout
> description: |
> Enable or disable the AE.
>
> @@ -17,6 +18,7 @@ controls:
>
> - AeLocked:
> type: bool
> + direction: out
> description: |
> Report the lock status of a running AE algorithm.
>
> @@ -31,6 +33,7 @@ controls:
> # - Better handling of custom types.
> - AeMeteringMode:
> type: int32_t
> + direction: inout
> description: |
> Specify a metering mode for the AE algorithm to use.
>
> @@ -56,6 +59,7 @@ controls:
> # - Better handling of custom types.
> - AeConstraintMode:
> type: int32_t
> + direction: inout
> description: |
> Specify a constraint mode for the AE algorithm to use.
>
> @@ -98,6 +102,7 @@ controls:
> # - Better handling of custom types.
> - AeExposureMode:
> type: int32_t
> + direction: inout
> description: |
> Specify an exposure mode for the AE algorithm to use.
>
> @@ -120,6 +125,7 @@ controls:
>
> - ExposureValue:
> type: float
> + direction: inout
> description: |
> Specify an Exposure Value (EV) parameter.
>
> @@ -134,6 +140,7 @@ controls:
>
> - ExposureTime:
> type: int32_t
> + direction: inout
> description: |
> Exposure time for the frame applied in the sensor device.
I had to go look up again what the distinction is between EV and ET
above.
Looks like something we should have as some common helpers so we can
ensure we report things consistently or convert consistently in all
Pipeline handlers at somepoint ... but anyway - not related to this
patch.
>
> @@ -153,6 +160,7 @@ controls:
>
> - AnalogueGain:
> type: float
> + direction: inout
> description: |
> Analogue gain value applied in the sensor device.
>
> @@ -173,6 +181,7 @@ controls:
>
> - AeFlickerMode:
> type: int32_t
> + direction: inout
> description: |
> Set the flicker avoidance mode for AGC/AEC.
>
> @@ -215,6 +224,7 @@ controls:
>
> - AeFlickerPeriod:
> type: int32_t
> + direction: inout
> description: |
> Manual flicker period in microseconds.
>
> @@ -235,6 +245,7 @@ controls:
>
> - AeFlickerDetected:
> type: int32_t
> + direction: out
> description: |
> Flicker period detected in microseconds.
>
> @@ -257,6 +268,7 @@ controls:
>
> - Brightness:
> type: float
> + direction: inout
> description: |
> Specify a fixed brightness parameter.
>
> @@ -265,6 +277,7 @@ controls:
>
> - Contrast:
> type: float
> + direction: inout
> description: |
> Specify a fixed contrast parameter.
>
> @@ -273,6 +286,7 @@ controls:
>
> - Lux:
> type: float
> + direction: out
> description: |
> Report an estimate of the current illuminance level in lux.
>
> @@ -280,6 +294,7 @@ controls:
>
> - AwbEnable:
> type: bool
> + direction: inout
> description: |
> Enable or disable the AWB.
>
> @@ -290,6 +305,7 @@ controls:
> # - Better handling of custom types.
> - AwbMode:
> type: int32_t
> + direction: inout
> description: |
> Specify the range of illuminants to use for the AWB algorithm.
>
> @@ -323,6 +339,7 @@ controls:
>
> - AwbLocked:
> type: bool
> + direction: out
> description: |
> Report the lock status of a running AWB algorithm.
>
> @@ -334,6 +351,7 @@ controls:
>
> - ColourGains:
> type: float
> + direction: inout
> description: |
> Pair of gain values for the Red and Blue colour channels, in that
> order.
> @@ -345,6 +363,7 @@ controls:
>
> - ColourTemperature:
> type: int32_t
> + direction: out
Interestingly - this might change soon ... but I expect it's correct
now.
> description: |
> Report the estimate of the colour temperature for the frame, in kelvin.
>
> @@ -352,6 +371,7 @@ controls:
>
> - Saturation:
> type: float
> + direction: inout
> description: |
> Specify a fixed saturation parameter.
>
> @@ -360,6 +380,7 @@ controls:
>
> - SensorBlackLevels:
> type: int32_t
> + direction: out
> description: |
> Reports the sensor black levels used for processing a frame.
>
> @@ -370,6 +391,7 @@ controls:
>
> - Sharpness:
> type: float
> + direction: inout
> description: |
> Intensity of the sharpening applied to the image.
>
> @@ -384,6 +406,7 @@ controls:
>
> - FocusFoM:
> type: int32_t
> + direction: out
> description: |
> Reports a Figure of Merit (FoM) to indicate how in-focus the frame is.
>
> @@ -396,6 +419,7 @@ controls:
>
> - ColourCorrectionMatrix:
> type: float
> + direction: inout
Oh - that will be something fun to add to camshark one day!
> description: |
> The 3x3 matrix that converts camera RGB to sRGB within the imaging
> pipeline.
> @@ -409,6 +433,7 @@ controls:
>
> - ScalerCrop:
> type: Rectangle
> + direction: inout
> description: |
> Sets the image portion that will be scaled to form the whole of
> the final output image.
> @@ -424,6 +449,7 @@ controls:
>
> - DigitalGain:
> type: float
> + direction: inout
> description: |
> Digital gain value applied during the processing steps applied
> to the image as captured from the sensor.
> @@ -441,6 +467,7 @@ controls:
>
> - FrameDuration:
> type: int64_t
> + direction: out
> description: |
> The instantaneous frame duration from start of frame exposure to start
> of next exposure, expressed in microseconds.
> @@ -449,6 +476,7 @@ controls:
>
> - FrameDurationLimits:
> type: int64_t
> + direction: inout
> description: |
> The minimum and maximum (in that order) frame duration, expressed in
> microseconds.
> @@ -485,6 +513,7 @@ controls:
>
> - SensorTemperature:
> type: float
> + direction: out
> description: |
> Temperature measure from the camera sensor in Celsius.
>
> @@ -497,6 +526,7 @@ controls:
>
> - SensorTimestamp:
> type: int64_t
> + direction: out
> description: |
> The time when the first row of the image sensor active array is exposed.
>
> @@ -511,6 +541,7 @@ controls:
>
> - AfMode:
> type: int32_t
> + direction: inout
> description: |
> The mode of the AF (autofocus) algorithm.
>
> @@ -575,6 +606,7 @@ controls:
>
> - AfRange:
> type: int32_t
> + direction: inout
> description: |
> The range of focus distances that is scanned.
>
> @@ -602,6 +634,7 @@ controls:
>
> - AfSpeed:
> type: int32_t
> + direction: inout
> description: |
> Determine whether the AF is to move the lens as quickly as possible or
> more steadily.
> @@ -620,6 +653,7 @@ controls:
>
> - AfMetering:
> type: int32_t
> + direction: inout
> description: |
> The parts of the image used by the AF algorithm to measure focus.
> enum:
> @@ -636,6 +670,7 @@ controls:
>
> - AfWindows:
> type: Rectangle
> + direction: inout
> description: |
> The focus windows used by the AF algorithm when AfMetering is set to
> AfMeteringWindows.
> @@ -665,6 +700,7 @@ controls:
>
> - AfTrigger:
> type: int32_t
> + direction: in
Aha! I was wondering if we would have any 'In' only ... and we do.
> description: |
> Start an autofocus scan.
>
> @@ -690,6 +726,7 @@ controls:
>
> - AfPause:
> type: int32_t
> + direction: in
I wonder if 'being paused' should be reported in metadata, but I don't
think it currently states that it is so I think this is correct at the
moment.
> description: |
> Pause lens movements when in continuous autofocus mode.
>
> @@ -734,6 +771,7 @@ controls:
>
> - LensPosition:
> type: float
> + direction: inout
> description: |
> Set and report the focus lens position.
>
> @@ -768,6 +806,7 @@ controls:
>
> - AfState:
> type: int32_t
> + direction: out
> description: |
> The current state of the AF algorithm.
>
> @@ -825,6 +864,7 @@ controls:
>
> - AfPauseState:
> type: int32_t
> + direction: inout
> description: |
> Report whether the autofocus is currently running, paused or pausing.
Aha, I see.
But I think this is an out only! As it probably reports the AfPause
control state. It can't be changed by the application.
> @@ -860,6 +900,7 @@ controls:
>
> - HdrMode:
> type: int32_t
> + direction: inout
> description: |
> Set the mode to be used for High Dynamic Range (HDR) imaging.
>
> @@ -926,6 +967,7 @@ controls:
>
> - HdrChannel:
> type: int32_t
> + direction: out
> description: |
> The HDR channel used to capture the frame.
>
> @@ -960,6 +1002,7 @@ controls:
>
> - Gamma:
> type: float
> + direction: inout
> description: |
> Specify a fixed gamma value.
>
> @@ -968,6 +1011,7 @@ controls:
>
> - DebugMetadataEnable:
> type: bool
> + direction: inout
> description: |
> Enable or disable the debug metadata.
>
> diff --git a/src/libcamera/control_ids_draft.yaml b/src/libcamera/control_ids_draft.yaml
> index 1b284257f601..894d4749fb03 100644
> --- a/src/libcamera/control_ids_draft.yaml
> +++ b/src/libcamera/control_ids_draft.yaml
> @@ -10,6 +10,7 @@ vendor: draft
> controls:
> - AePrecaptureTrigger:
> type: int32_t
> + direction: inout
> description: |
> Control for AE metering trigger. Currently identical to
> ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER.
> @@ -31,6 +32,7 @@ controls:
>
> - NoiseReductionMode:
> type: int32_t
> + direction: inout
> description: |
> Control to select the noise reduction algorithm mode. Currently
> identical to ANDROID_NOISE_REDUCTION_MODE.
> @@ -59,6 +61,7 @@ controls:
>
> - ColorCorrectionAberrationMode:
> type: int32_t
> + direction: out
Shouldn't this be inout then ?
> description: |
> Control to select the color correction aberration mode. Currently
> identical to ANDROID_COLOR_CORRECTION_ABERRATION_MODE.
> @@ -79,6 +82,7 @@ controls:
>
> - AeState:
> type: int32_t
> + direction: out
> description: |
> Control to report the current AE algorithm state. Currently identical to
> ANDROID_CONTROL_AE_STATE.
> @@ -108,6 +112,7 @@ controls:
>
> - AwbState:
> type: int32_t
> + direction: out
> description: |
> Control to report the current AWB algorithm state. Currently identical
> to ANDROID_CONTROL_AWB_STATE.
> @@ -129,6 +134,7 @@ controls:
>
> - SensorRollingShutterSkew:
> type: int64_t
> + direction: out
> description: |
> Control to report the time between the start of exposure of the first
> row and the start of exposure of the last row. Currently identical to
Oh that's an interesting metadata we should be reporting with libipa AE
implementation probably!
> @@ -136,6 +142,7 @@ controls:
>
> - LensShadingMapMode:
> type: int32_t
> + direction: out
Should we use this as a way to turn on and off LensShadingMaps ? If so -
it would be inout
> description: |
> Control to report if the lens shading map is available. Currently
> identical to ANDROID_STATISTICS_LENS_SHADING_MAP_MODE.
> @@ -149,6 +156,7 @@ controls:
>
> - PipelineDepth:
> type: int32_t
> + direction: out
> description: |
> Specifies the number of pipeline stages the frame went through from when
> it was exposed to when the final completed result was available to the
> @@ -163,6 +171,7 @@ controls:
>
> - MaxLatency:
> type: int32_t
> + direction: out
> description: |
> The maximum number of frames that can occur after a request (different
> than the previous) has been submitted, and before the result's state
> @@ -172,6 +181,7 @@ controls:
>
> - TestPatternMode:
> type: int32_t
> + direction: out
Isn't this inout? It has to be in'able right ?
> description: |
> Control to select the test pattern mode. Currently identical to
> ANDROID_SENSOR_TEST_PATTERN_MODE.
> @@ -229,6 +239,7 @@ controls:
>
> - FaceDetectMode:
> type: int32_t
> + direction: out
> description: |
> Control to select the face detection mode used by the pipeline.
'select' means inout ...
So I think there's a few corrections in here. Once they are considered,
then I've gone through the rest so:
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> @@ -262,6 +273,7 @@ controls:
>
> - FaceDetectFaceRectangles:
> type: Rectangle
> + direction: out
> description: |
> Boundary rectangles of the detected faces. The number of values is
> the number of detected faces.
> @@ -273,6 +285,7 @@ controls:
>
> - FaceDetectFaceScores:
> type: uint8_t
> + direction: out
> description: |
> Confidence score of each of the detected faces. The range of score is
> [0, 100]. The number of values should be the number of faces reported
> @@ -285,6 +298,7 @@ controls:
>
> - FaceDetectFaceLandmarks:
> type: Point
> + direction: out
> description: |
> Array of human face landmark coordinates in format [..., left_eye_i,
> right_eye_i, mouth_i, left_eye_i+1, ...], with i = index of face. The
> @@ -298,6 +312,7 @@ controls:
>
> - FaceDetectFaceIds:
> type: int32_t
> + direction: out
> description: |
> Each detected face is given a unique ID that is valid for as long as the
> face is visible to the camera device. A face that leaves the field of
> diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml
> index 34bbdfc863c5..7524c5d23258 100644
> --- a/src/libcamera/control_ids_rpi.yaml
> +++ b/src/libcamera/control_ids_rpi.yaml
> @@ -9,6 +9,7 @@ vendor: rpi
> controls:
> - StatsOutputEnable:
> type: bool
> + direction: inout
> description: |
> Toggles the Raspberry Pi IPA to output the hardware generated statistics.
>
> @@ -21,6 +22,7 @@ controls:
> - Bcm2835StatsOutput:
> type: uint8_t
> size: [n]
> + direction: out
> description: |
> Span of the BCM2835 ISP generated statistics for the current frame.
>
> @@ -33,6 +35,7 @@ controls:
> - ScalerCrops:
> type: Rectangle
> size: [n]
> + direction: out
> description: |
> An array of rectangles, where each singular value has identical
> functionality to the ScalerCrop control. This control allows the
> --
> 2.39.2
>
More information about the libcamera-devel
mailing list