libcamera: controls: Use vendor tags for draft controls and properties
Label draft controls and properties through the "draft" vendor tag and deprecate the existing "draft: true" mechanism. This uses the new vendor tags mechanism to place draft controls in the same libcamera::controls::draft namespace and provide a defined control id range for these controls. This requires moving all draft controls from control_ids.yaml to control_ids_draft.yaml. One breaking change in this commit is that draft control ids also move to the libcamera::controls::draft namespace from the existing libcamera::controls namespace. This is desirable to avoid API breakages when adding new libcamera controls. So, for example, the use of controls::NOISE_REDUCTION_MODE will need to be replaced with controls::draft::NOISE_REDUCTION_MODE. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
d3365b358f
commit
e18a007b9d
15 changed files with 286 additions and 352 deletions
|
@ -26,12 +26,6 @@ ${controls}
|
|||
|
||||
extern const ControlIdMap controls;
|
||||
|
||||
namespace draft {
|
||||
|
||||
${draft_controls}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
${vendor_controls}
|
||||
|
||||
} /* namespace controls */
|
||||
|
|
|
@ -34,10 +34,12 @@ libcamera_headers_install_dir = get_option('includedir') / libcamera_include_dir
|
|||
|
||||
controls_map = {
|
||||
'controls': {
|
||||
'draft': 'control_ids_draft.yaml',
|
||||
'core': 'control_ids_core.yaml',
|
||||
},
|
||||
|
||||
'properties': {
|
||||
'draft': 'property_ids_draft.yaml',
|
||||
'core': 'property_ids_core.yaml',
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,12 +23,6 @@ ${ids}
|
|||
|
||||
${controls}
|
||||
|
||||
namespace draft {
|
||||
|
||||
${draft_controls}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
extern const ControlIdMap properties;
|
||||
|
||||
${vendor_controls}
|
||||
|
|
|
@ -1024,7 +1024,7 @@ void IpaBase::applyControls(const ControlList &controls)
|
|||
break;
|
||||
}
|
||||
|
||||
case controls::NOISE_REDUCTION_MODE:
|
||||
case controls::draft::NOISE_REDUCTION_MODE:
|
||||
/* Handled below in handleControls() */
|
||||
libcameraMetadata_.set(controls::draft::NoiseReductionMode,
|
||||
ctrl.second.get<int32_t>());
|
||||
|
|
|
@ -260,7 +260,7 @@ void IpaVc4::handleControls(const ControlList &controls)
|
|||
|
||||
for (auto const &ctrl : controls) {
|
||||
switch (ctrl.first) {
|
||||
case controls::NOISE_REDUCTION_MODE: {
|
||||
case controls::draft::NOISE_REDUCTION_MODE: {
|
||||
RPiController::DenoiseAlgorithm *sdn = dynamic_cast<RPiController::DenoiseAlgorithm *>(
|
||||
controller_.getAlgorithm("SDN"));
|
||||
/* Some platforms may have a combined "denoise" algorithm instead. */
|
||||
|
|
|
@ -24,15 +24,6 @@ namespace controls {
|
|||
|
||||
${controls_doc}
|
||||
|
||||
/**
|
||||
* \brief Namespace for libcamera draft controls
|
||||
*/
|
||||
namespace draft {
|
||||
|
||||
${draft_controls_doc}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
${vendor_controls_doc}
|
||||
|
||||
#ifndef __DOXYGEN__
|
||||
|
@ -42,12 +33,6 @@ ${vendor_controls_doc}
|
|||
*/
|
||||
${controls_def}
|
||||
|
||||
namespace draft {
|
||||
|
||||
${draft_controls_def}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
${vendor_controls_def}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -865,236 +865,4 @@ controls:
|
|||
description: |
|
||||
This is a long exposure image.
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Draft controls section
|
||||
|
||||
- AePrecaptureTrigger:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control for AE metering trigger. Currently identical to
|
||||
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER.
|
||||
|
||||
Whether the camera device will trigger a precapture metering sequence
|
||||
when it processes this request.
|
||||
enum:
|
||||
- name: AePrecaptureTriggerIdle
|
||||
value: 0
|
||||
description: The trigger is idle.
|
||||
- name: AePrecaptureTriggerStart
|
||||
value: 1
|
||||
description: The pre-capture AE metering is started by the camera.
|
||||
- name: AePrecaptureTriggerCancel
|
||||
value: 2
|
||||
description: |
|
||||
The camera will cancel any active or completed metering sequence.
|
||||
The AE algorithm is reset to its initial state.
|
||||
|
||||
- NoiseReductionMode:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to select the noise reduction algorithm mode. Currently
|
||||
identical to ANDROID_NOISE_REDUCTION_MODE.
|
||||
|
||||
Mode of operation for the noise reduction algorithm.
|
||||
enum:
|
||||
- name: NoiseReductionModeOff
|
||||
value: 0
|
||||
description: No noise reduction is applied
|
||||
- name: NoiseReductionModeFast
|
||||
value: 1
|
||||
description: |
|
||||
Noise reduction is applied without reducing the frame rate.
|
||||
- name: NoiseReductionModeHighQuality
|
||||
value: 2
|
||||
description: |
|
||||
High quality noise reduction at the expense of frame rate.
|
||||
- name: NoiseReductionModeMinimal
|
||||
value: 3
|
||||
description: |
|
||||
Minimal noise reduction is applied without reducing the frame rate.
|
||||
- name: NoiseReductionModeZSL
|
||||
value: 4
|
||||
description: |
|
||||
Noise reduction is applied at different levels to different streams.
|
||||
|
||||
- ColorCorrectionAberrationMode:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to select the color correction aberration mode. Currently
|
||||
identical to ANDROID_COLOR_CORRECTION_ABERRATION_MODE.
|
||||
|
||||
Mode of operation for the chromatic aberration correction algorithm.
|
||||
enum:
|
||||
- name: ColorCorrectionAberrationOff
|
||||
value: 0
|
||||
description: No aberration correction is applied.
|
||||
- name: ColorCorrectionAberrationFast
|
||||
value: 1
|
||||
description: Aberration correction will not slow down the frame rate.
|
||||
- name: ColorCorrectionAberrationHighQuality
|
||||
value: 2
|
||||
description: |
|
||||
High quality aberration correction which might reduce the frame
|
||||
rate.
|
||||
|
||||
- AeState:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to report the current AE algorithm state. Currently identical to
|
||||
ANDROID_CONTROL_AE_STATE.
|
||||
|
||||
Current state of the AE algorithm.
|
||||
enum:
|
||||
- name: AeStateInactive
|
||||
value: 0
|
||||
description: The AE algorithm is inactive.
|
||||
- name: AeStateSearching
|
||||
value: 1
|
||||
description: The AE algorithm has not converged yet.
|
||||
- name: AeStateConverged
|
||||
value: 2
|
||||
description: The AE algorithm has converged.
|
||||
- name: AeStateLocked
|
||||
value: 3
|
||||
description: The AE algorithm is locked.
|
||||
- name: AeStateFlashRequired
|
||||
value: 4
|
||||
description: The AE algorithm would need a flash for good results
|
||||
- name: AeStatePrecapture
|
||||
value: 5
|
||||
description: |
|
||||
The AE algorithm has started a pre-capture metering session.
|
||||
\sa AePrecaptureTrigger
|
||||
|
||||
- AwbState:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to report the current AWB algorithm state. Currently identical
|
||||
to ANDROID_CONTROL_AWB_STATE.
|
||||
|
||||
Current state of the AWB algorithm.
|
||||
enum:
|
||||
- name: AwbStateInactive
|
||||
value: 0
|
||||
description: The AWB algorithm is inactive.
|
||||
- name: AwbStateSearching
|
||||
value: 1
|
||||
description: The AWB algorithm has not converged yet.
|
||||
- name: AwbConverged
|
||||
value: 2
|
||||
description: The AWB algorithm has converged.
|
||||
- name: AwbLocked
|
||||
value: 3
|
||||
description: The AWB algorithm is locked.
|
||||
|
||||
- SensorRollingShutterSkew:
|
||||
type: int64_t
|
||||
draft: true
|
||||
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
|
||||
ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
|
||||
|
||||
- LensShadingMapMode:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to report if the lens shading map is available. Currently
|
||||
identical to ANDROID_STATISTICS_LENS_SHADING_MAP_MODE.
|
||||
enum:
|
||||
- name: LensShadingMapModeOff
|
||||
value: 0
|
||||
description: No lens shading map mode is available.
|
||||
- name: LensShadingMapModeOn
|
||||
value: 1
|
||||
description: The lens shading map mode is available.
|
||||
|
||||
- PipelineDepth:
|
||||
type: int32_t
|
||||
draft: true
|
||||
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
|
||||
framework. Always less than or equal to PipelineMaxDepth. Currently
|
||||
identical to ANDROID_REQUEST_PIPELINE_DEPTH.
|
||||
|
||||
The typical value for this control is 3 as a frame is first exposed,
|
||||
captured and then processed in a single pass through the ISP. Any
|
||||
additional processing step performed after the ISP pass (in example face
|
||||
detection, additional format conversions etc) count as an additional
|
||||
pipeline stage.
|
||||
|
||||
- MaxLatency:
|
||||
type: int32_t
|
||||
draft: true
|
||||
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
|
||||
becomes synchronized. A value of -1 indicates unknown latency, and 0
|
||||
indicates per-frame control. Currently identical to
|
||||
ANDROID_SYNC_MAX_LATENCY.
|
||||
|
||||
- TestPatternMode:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
Control to select the test pattern mode. Currently identical to
|
||||
ANDROID_SENSOR_TEST_PATTERN_MODE.
|
||||
enum:
|
||||
- name: TestPatternModeOff
|
||||
value: 0
|
||||
description: |
|
||||
No test pattern mode is used. The camera device returns frames from
|
||||
the image sensor.
|
||||
- name: TestPatternModeSolidColor
|
||||
value: 1
|
||||
description: |
|
||||
Each pixel in [R, G_even, G_odd, B] is replaced by its respective
|
||||
color channel provided in test pattern data.
|
||||
\todo Add control for test pattern data.
|
||||
- name: TestPatternModeColorBars
|
||||
value: 2
|
||||
description: |
|
||||
All pixel data is replaced with an 8-bar color pattern. The vertical
|
||||
bars (left-to-right) are as follows; white, yellow, cyan, green,
|
||||
magenta, red, blue and black. Each bar should take up 1/8 of the
|
||||
sensor pixel array width. When this is not possible, the bar size
|
||||
should be rounded down to the nearest integer and the pattern can
|
||||
repeat on the right side. Each bar's height must always take up the
|
||||
full sensor pixel array height.
|
||||
- name: TestPatternModeColorBarsFadeToGray
|
||||
value: 3
|
||||
description: |
|
||||
The test pattern is similar to TestPatternModeColorBars,
|
||||
except that each bar should start at its specified color at the top
|
||||
and fade to gray at the bottom. Furthermore each bar is further
|
||||
subdevided into a left and right half. The left half should have a
|
||||
smooth gradient, and the right half should have a quantized
|
||||
gradient. In particular, the right half's should consist of blocks
|
||||
of the same color for 1/16th active sensor pixel array width. The
|
||||
least significant bits in the quantized gradient should be copied
|
||||
from the most significant bits of the smooth gradient. The height of
|
||||
each bar should always be a multiple of 128. When this is not the
|
||||
case, the pattern should repeat at the bottom of the image.
|
||||
- name: TestPatternModePn9
|
||||
value: 4
|
||||
description: |
|
||||
All pixel data is replaced by a pseudo-random sequence generated
|
||||
from a PN9 512-bit sequence (typically implemented in hardware with
|
||||
a linear feedback shift register). The generator should be reset at
|
||||
the beginning of each frame, and thus each subsequent raw frame with
|
||||
this test pattern should be exactly the same as the last.
|
||||
- name: TestPatternModeCustom1
|
||||
value: 256
|
||||
description: |
|
||||
The first custom test pattern. All custom patterns that are
|
||||
available only on this camera device are at least this numeric
|
||||
value. All of the custom test patterns will be static (that is the
|
||||
raw image must not vary from frame to frame).
|
||||
|
||||
...
|
||||
|
|
230
src/libcamera/control_ids_draft.yaml
Normal file
230
src/libcamera/control_ids_draft.yaml
Normal file
|
@ -0,0 +1,230 @@
|
|||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#
|
||||
# Copyright (C) 2019, Google Inc.
|
||||
#
|
||||
%YAML 1.1
|
||||
---
|
||||
# Unless otherwise stated, all controls are bi-directional, i.e. they can be
|
||||
# set through Request::controls() and returned out through Request::metadata().
|
||||
vendor: draft
|
||||
controls:
|
||||
- AePrecaptureTrigger:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control for AE metering trigger. Currently identical to
|
||||
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER.
|
||||
|
||||
Whether the camera device will trigger a precapture metering sequence
|
||||
when it processes this request.
|
||||
enum:
|
||||
- name: AePrecaptureTriggerIdle
|
||||
value: 0
|
||||
description: The trigger is idle.
|
||||
- name: AePrecaptureTriggerStart
|
||||
value: 1
|
||||
description: The pre-capture AE metering is started by the camera.
|
||||
- name: AePrecaptureTriggerCancel
|
||||
value: 2
|
||||
description: |
|
||||
The camera will cancel any active or completed metering sequence.
|
||||
The AE algorithm is reset to its initial state.
|
||||
|
||||
- NoiseReductionMode:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to select the noise reduction algorithm mode. Currently
|
||||
identical to ANDROID_NOISE_REDUCTION_MODE.
|
||||
|
||||
Mode of operation for the noise reduction algorithm.
|
||||
enum:
|
||||
- name: NoiseReductionModeOff
|
||||
value: 0
|
||||
description: No noise reduction is applied
|
||||
- name: NoiseReductionModeFast
|
||||
value: 1
|
||||
description: |
|
||||
Noise reduction is applied without reducing the frame rate.
|
||||
- name: NoiseReductionModeHighQuality
|
||||
value: 2
|
||||
description: |
|
||||
High quality noise reduction at the expense of frame rate.
|
||||
- name: NoiseReductionModeMinimal
|
||||
value: 3
|
||||
description: |
|
||||
Minimal noise reduction is applied without reducing the frame rate.
|
||||
- name: NoiseReductionModeZSL
|
||||
value: 4
|
||||
description: |
|
||||
Noise reduction is applied at different levels to different streams.
|
||||
|
||||
- ColorCorrectionAberrationMode:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to select the color correction aberration mode. Currently
|
||||
identical to ANDROID_COLOR_CORRECTION_ABERRATION_MODE.
|
||||
|
||||
Mode of operation for the chromatic aberration correction algorithm.
|
||||
enum:
|
||||
- name: ColorCorrectionAberrationOff
|
||||
value: 0
|
||||
description: No aberration correction is applied.
|
||||
- name: ColorCorrectionAberrationFast
|
||||
value: 1
|
||||
description: Aberration correction will not slow down the frame rate.
|
||||
- name: ColorCorrectionAberrationHighQuality
|
||||
value: 2
|
||||
description: |
|
||||
High quality aberration correction which might reduce the frame
|
||||
rate.
|
||||
|
||||
- AeState:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to report the current AE algorithm state. Currently identical to
|
||||
ANDROID_CONTROL_AE_STATE.
|
||||
|
||||
Current state of the AE algorithm.
|
||||
enum:
|
||||
- name: AeStateInactive
|
||||
value: 0
|
||||
description: The AE algorithm is inactive.
|
||||
- name: AeStateSearching
|
||||
value: 1
|
||||
description: The AE algorithm has not converged yet.
|
||||
- name: AeStateConverged
|
||||
value: 2
|
||||
description: The AE algorithm has converged.
|
||||
- name: AeStateLocked
|
||||
value: 3
|
||||
description: The AE algorithm is locked.
|
||||
- name: AeStateFlashRequired
|
||||
value: 4
|
||||
description: The AE algorithm would need a flash for good results
|
||||
- name: AeStatePrecapture
|
||||
value: 5
|
||||
description: |
|
||||
The AE algorithm has started a pre-capture metering session.
|
||||
\sa AePrecaptureTrigger
|
||||
|
||||
- AwbState:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to report the current AWB algorithm state. Currently identical
|
||||
to ANDROID_CONTROL_AWB_STATE.
|
||||
|
||||
Current state of the AWB algorithm.
|
||||
enum:
|
||||
- name: AwbStateInactive
|
||||
value: 0
|
||||
description: The AWB algorithm is inactive.
|
||||
- name: AwbStateSearching
|
||||
value: 1
|
||||
description: The AWB algorithm has not converged yet.
|
||||
- name: AwbConverged
|
||||
value: 2
|
||||
description: The AWB algorithm has converged.
|
||||
- name: AwbLocked
|
||||
value: 3
|
||||
description: The AWB algorithm is locked.
|
||||
|
||||
- SensorRollingShutterSkew:
|
||||
type: int64_t
|
||||
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
|
||||
ANDROID_SENSOR_ROLLING_SHUTTER_SKEW
|
||||
|
||||
- LensShadingMapMode:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to report if the lens shading map is available. Currently
|
||||
identical to ANDROID_STATISTICS_LENS_SHADING_MAP_MODE.
|
||||
enum:
|
||||
- name: LensShadingMapModeOff
|
||||
value: 0
|
||||
description: No lens shading map mode is available.
|
||||
- name: LensShadingMapModeOn
|
||||
value: 1
|
||||
description: The lens shading map mode is available.
|
||||
|
||||
- PipelineDepth:
|
||||
type: int32_t
|
||||
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
|
||||
framework. Always less than or equal to PipelineMaxDepth. Currently
|
||||
identical to ANDROID_REQUEST_PIPELINE_DEPTH.
|
||||
|
||||
The typical value for this control is 3 as a frame is first exposed,
|
||||
captured and then processed in a single pass through the ISP. Any
|
||||
additional processing step performed after the ISP pass (in example face
|
||||
detection, additional format conversions etc) count as an additional
|
||||
pipeline stage.
|
||||
|
||||
- MaxLatency:
|
||||
type: int32_t
|
||||
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
|
||||
becomes synchronized. A value of -1 indicates unknown latency, and 0
|
||||
indicates per-frame control. Currently identical to
|
||||
ANDROID_SYNC_MAX_LATENCY.
|
||||
|
||||
- TestPatternMode:
|
||||
type: int32_t
|
||||
description: |
|
||||
Control to select the test pattern mode. Currently identical to
|
||||
ANDROID_SENSOR_TEST_PATTERN_MODE.
|
||||
enum:
|
||||
- name: TestPatternModeOff
|
||||
value: 0
|
||||
description: |
|
||||
No test pattern mode is used. The camera device returns frames from
|
||||
the image sensor.
|
||||
- name: TestPatternModeSolidColor
|
||||
value: 1
|
||||
description: |
|
||||
Each pixel in [R, G_even, G_odd, B] is replaced by its respective
|
||||
color channel provided in test pattern data.
|
||||
\todo Add control for test pattern data.
|
||||
- name: TestPatternModeColorBars
|
||||
value: 2
|
||||
description: |
|
||||
All pixel data is replaced with an 8-bar color pattern. The vertical
|
||||
bars (left-to-right) are as follows; white, yellow, cyan, green,
|
||||
magenta, red, blue and black. Each bar should take up 1/8 of the
|
||||
sensor pixel array width. When this is not possible, the bar size
|
||||
should be rounded down to the nearest integer and the pattern can
|
||||
repeat on the right side. Each bar's height must always take up the
|
||||
full sensor pixel array height.
|
||||
- name: TestPatternModeColorBarsFadeToGray
|
||||
value: 3
|
||||
description: |
|
||||
The test pattern is similar to TestPatternModeColorBars,
|
||||
except that each bar should start at its specified color at the top
|
||||
and fade to gray at the bottom. Furthermore each bar is further
|
||||
subdevided into a left and right half. The left half should have a
|
||||
smooth gradient, and the right half should have a quantized
|
||||
gradient. In particular, the right half's should consist of blocks
|
||||
of the same color for 1/16th active sensor pixel array width. The
|
||||
least significant bits in the quantized gradient should be copied
|
||||
from the most significant bits of the smooth gradient. The height of
|
||||
each bar should always be a multiple of 128. When this is not the
|
||||
case, the pattern should repeat at the bottom of the image.
|
||||
- name: TestPatternModePn9
|
||||
value: 4
|
||||
description: |
|
||||
All pixel data is replaced by a pseudo-random sequence generated
|
||||
from a PN9 512-bit sequence (typically implemented in hardware with
|
||||
a linear feedback shift register). The generator should be reset at
|
||||
the beginning of each frame, and thus each subsequent raw frame with
|
||||
this test pattern should be exactly the same as the last.
|
||||
- name: TestPatternModeCustom1
|
||||
value: 256
|
||||
description: |
|
||||
The first custom test pattern. All custom patterns that are
|
||||
available only on this camera device are at least this numeric
|
||||
value. All of the custom test patterns will be static (that is the
|
||||
raw image must not vary from frame to frame).
|
||||
|
||||
...
|
|
@ -23,15 +23,6 @@ namespace properties {
|
|||
|
||||
${controls_doc}
|
||||
|
||||
/**
|
||||
* \brief Namespace for libcamera draft properties
|
||||
*/
|
||||
namespace draft {
|
||||
|
||||
${draft_controls_doc}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
${vendor_controls_doc}
|
||||
|
||||
#ifndef __DOXYGEN__
|
||||
|
@ -41,12 +32,6 @@ ${vendor_controls_doc}
|
|||
*/
|
||||
${controls_def}
|
||||
|
||||
namespace draft {
|
||||
|
||||
${draft_controls_def}
|
||||
|
||||
} /* namespace draft */
|
||||
|
||||
${vendor_controls_def}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -701,37 +701,4 @@ controls:
|
|||
|
||||
Different cameras may report identical devices.
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Draft properties section
|
||||
|
||||
- ColorFilterArrangement:
|
||||
type: int32_t
|
||||
draft: true
|
||||
description: |
|
||||
The arrangement of color filters on sensor; represents the colors in the
|
||||
top-left 2x2 section of the sensor, in reading order. Currently
|
||||
identical to ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT.
|
||||
enum:
|
||||
- name: RGGB
|
||||
value: 0
|
||||
description: RGGB Bayer pattern
|
||||
- name: GRBG
|
||||
value: 1
|
||||
description: GRBG Bayer pattern
|
||||
- name: GBRG
|
||||
value: 2
|
||||
description: GBRG Bayer pattern
|
||||
- name: BGGR
|
||||
value: 3
|
||||
description: BGGR Bayer pattern
|
||||
- name: RGB
|
||||
value: 4
|
||||
description: |
|
||||
Sensor is not Bayer; output has 3 16-bit values for each pixel,
|
||||
instead of just 1 16-bit value per pixel.
|
||||
- name: MONO
|
||||
value: 5
|
||||
description: |
|
||||
Sensor is not Bayer; output consists of a single colour channel.
|
||||
|
||||
...
|
||||
|
|
39
src/libcamera/property_ids_draft.yaml
Normal file
39
src/libcamera/property_ids_draft.yaml
Normal file
|
@ -0,0 +1,39 @@
|
|||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
#
|
||||
# Copyright (C) 2019, Google Inc.
|
||||
#
|
||||
%YAML 1.1
|
||||
---
|
||||
vendor: draft
|
||||
controls:
|
||||
- ColorFilterArrangement:
|
||||
type: int32_t
|
||||
vendor: draft
|
||||
description: |
|
||||
The arrangement of color filters on sensor; represents the colors in the
|
||||
top-left 2x2 section of the sensor, in reading order. Currently
|
||||
identical to ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT.
|
||||
enum:
|
||||
- name: RGGB
|
||||
value: 0
|
||||
description: RGGB Bayer pattern
|
||||
- name: GRBG
|
||||
value: 1
|
||||
description: GRBG Bayer pattern
|
||||
- name: GBRG
|
||||
value: 2
|
||||
description: GBRG Bayer pattern
|
||||
- name: BGGR
|
||||
value: 3
|
||||
description: BGGR Bayer pattern
|
||||
- name: RGB
|
||||
value: 4
|
||||
description: |
|
||||
Sensor is not Bayer; output has 3 16-bit values for each pixel,
|
||||
instead of just 1 16-bit value per pixel.
|
||||
- name: MONO
|
||||
value: 5
|
||||
description: |
|
||||
Sensor is not Bayer; output consists of a single colour channel.
|
||||
|
||||
...
|
|
@ -32,14 +32,12 @@ def generate_py(controls, mode):
|
|||
name, ctrl = ctrls.popitem()
|
||||
|
||||
if vendor not in vendors and vendor != 'libcamera':
|
||||
vendors_class_def.append('class Py{}Controls\n{{\n}};\n'.format(vendor))
|
||||
vendor_defs.append('\tauto {} = py::class_<Py{}Controls>(controls, \"{}\");'.format(vendor, vendor, vendor))
|
||||
vendor_mode_str = f'{vendor.capitalize()}{mode.capitalize()}'
|
||||
vendors_class_def.append('class Py{}\n{{\n}};\n'.format(vendor_mode_str))
|
||||
vendor_defs.append('\tauto {} = py::class_<Py{}>(controls, \"{}\");'.format(vendor, vendor_mode_str, vendor))
|
||||
vendors.append(vendor)
|
||||
|
||||
if ctrl.get('draft'):
|
||||
ns = 'libcamera::{}::draft::'.format(mode)
|
||||
container = 'draft'
|
||||
elif vendor != 'libcamera':
|
||||
if vendor != 'libcamera':
|
||||
ns = 'libcamera::{}::{}::'.format(mode, vendor)
|
||||
container = vendor
|
||||
else:
|
||||
|
|
|
@ -17,16 +17,11 @@ class PyControls
|
|||
{
|
||||
};
|
||||
|
||||
class PyDraftControls
|
||||
{
|
||||
};
|
||||
|
||||
${vendors_class_def}
|
||||
|
||||
void init_py_controls_generated(py::module& m)
|
||||
{
|
||||
auto controls = py::class_<PyControls>(m, "controls");
|
||||
auto draft = py::class_<PyDraftControls>(controls, "draft");
|
||||
${vendors_defs}
|
||||
|
||||
${controls}
|
||||
|
|
|
@ -17,16 +17,11 @@ class PyProperties
|
|||
{
|
||||
};
|
||||
|
||||
class PyDraftProperties
|
||||
{
|
||||
};
|
||||
|
||||
${vendors_class_def}
|
||||
|
||||
void init_py_properties_generated(py::module& m)
|
||||
{
|
||||
auto controls = py::class_<PyProperties>(m, "properties");
|
||||
auto draft = py::class_<PyDraftProperties>(controls, "draft");
|
||||
${vendors_defs}
|
||||
|
||||
${controls}
|
||||
|
|
|
@ -86,11 +86,6 @@ class Control(object):
|
|||
"""Is the control an enumeration"""
|
||||
return self.__enum_values is not None
|
||||
|
||||
@property
|
||||
def is_draft(self):
|
||||
"""Is the control a draft control"""
|
||||
return self.__data.get('draft') is not None
|
||||
|
||||
@property
|
||||
def vendor(self):
|
||||
"""The vendor string, or None"""
|
||||
|
@ -101,12 +96,6 @@ class Control(object):
|
|||
"""The control name (CamelCase)"""
|
||||
return self.__name
|
||||
|
||||
@property
|
||||
def q_name(self):
|
||||
"""The control name, qualified with a namespace"""
|
||||
ns = 'draft::' if self.is_draft else ''
|
||||
return ns + self.__name
|
||||
|
||||
@property
|
||||
def type(self):
|
||||
typ = self.__data.get('type')
|
||||
|
@ -159,7 +148,7 @@ ${description}
|
|||
for ctrl in controls:
|
||||
id_name = snake_case(ctrl.name).upper()
|
||||
|
||||
vendor = 'draft' if ctrl.is_draft else ctrl.vendor
|
||||
vendor = ctrl.vendor
|
||||
if vendor not in ctrls_doc:
|
||||
ctrls_doc[vendor] = []
|
||||
ctrls_def[vendor] = []
|
||||
|
@ -208,7 +197,8 @@ ${description}
|
|||
target_doc.append(doc_template.substitute(info))
|
||||
target_def.append(def_template.substitute(info))
|
||||
|
||||
ctrls_map.append('\t{ ' + id_name + ', &' + ctrl.q_name + ' },')
|
||||
vendor_ns = vendor + '::' if vendor != "libcamera" else ''
|
||||
ctrls_map.append('\t{ ' + vendor_ns + id_name + ', &' + vendor_ns + ctrl.name + ' },')
|
||||
|
||||
vendor_ctrl_doc_sub = []
|
||||
vendor_ctrl_template = string.Template('''
|
||||
|
@ -221,18 +211,16 @@ ${vendor_controls_str}
|
|||
|
||||
} /* namespace ${vendor} */''')
|
||||
|
||||
for vendor in [v for v in ctrls_doc.keys() if v not in ['libcamera', 'draft']]:
|
||||
for vendor in [v for v in ctrls_doc.keys() if v not in ['libcamera']]:
|
||||
vendor_ctrl_doc_sub.append(vendor_ctrl_template.substitute({'vendor': vendor, 'vendor_controls_str': '\n\n'.join(ctrls_doc[vendor])}))
|
||||
|
||||
vendor_ctrl_def_sub = []
|
||||
for vendor in [v for v in ctrls_def.keys() if v not in ['libcamera', 'draft']]:
|
||||
for vendor in [v for v in ctrls_def.keys() if v not in ['libcamera']]:
|
||||
vendor_ctrl_def_sub.append(vendor_ctrl_template.substitute({'vendor': vendor, 'vendor_controls_str': '\n'.join(ctrls_def[vendor])}))
|
||||
|
||||
return {
|
||||
'controls_doc': '\n\n'.join(ctrls_doc['libcamera']),
|
||||
'controls_def': '\n'.join(ctrls_def['libcamera']),
|
||||
'draft_controls_doc': '\n\n'.join(ctrls_doc['draft']),
|
||||
'draft_controls_def': '\n\n'.join(ctrls_def['draft']),
|
||||
'controls_map': '\n'.join(ctrls_map),
|
||||
'vendor_controls_doc': '\n'.join(vendor_ctrl_doc_sub),
|
||||
'vendor_controls_def': '\n'.join(vendor_ctrl_def_sub),
|
||||
|
@ -252,7 +240,7 @@ def generate_h(controls, mode, ranges):
|
|||
for ctrl in controls:
|
||||
id_name = snake_case(ctrl.name).upper()
|
||||
|
||||
vendor = 'draft' if ctrl.is_draft else ctrl.vendor
|
||||
vendor = ctrl.vendor
|
||||
if vendor not in ctrls:
|
||||
if vendor not in ranges.keys():
|
||||
raise RuntimeError(f'Control id range is not defined for vendor {vendor}')
|
||||
|
@ -260,8 +248,7 @@ def generate_h(controls, mode, ranges):
|
|||
ids[vendor] = []
|
||||
ctrls[vendor] = []
|
||||
|
||||
# Core and draft controls use the same ID value
|
||||
target_ids = ids['libcamera'] if vendor in ['libcamera', 'draft'] else ids[vendor]
|
||||
target_ids = ids[vendor]
|
||||
target_ids.append('\t' + id_name + ' = ' + str(id_value[vendor]) + ',')
|
||||
|
||||
info = {
|
||||
|
@ -269,11 +256,7 @@ def generate_h(controls, mode, ranges):
|
|||
'type': ctrl.type,
|
||||
}
|
||||
|
||||
target_ctrls = ctrls['libcamera']
|
||||
if ctrl.is_draft:
|
||||
target_ctrls = ctrls['draft']
|
||||
elif vendor != 'libcamera':
|
||||
target_ctrls = ctrls[vendor]
|
||||
target_ctrls = ctrls[vendor]
|
||||
|
||||
if ctrl.is_enum:
|
||||
target_ctrls.append(enum_template_start.substitute(info))
|
||||
|
@ -312,7 +295,7 @@ ${vendor_controls}
|
|||
''')
|
||||
|
||||
vendor_sub = []
|
||||
for vendor in [v for v in ctrls.keys() if v not in ['libcamera', 'draft']]:
|
||||
for vendor in [v for v in ctrls.keys() if v != 'libcamera']:
|
||||
vendor_sub.append(vendor_template.substitute({'mode': mode.upper(),
|
||||
'vendor': vendor,
|
||||
'vendor_def': vendor.upper(),
|
||||
|
@ -322,7 +305,6 @@ ${vendor_controls}
|
|||
return {
|
||||
'ids': '\n'.join(ids['libcamera']),
|
||||
'controls': '\n'.join(ctrls['libcamera']),
|
||||
'draft_controls': '\n'.join(ctrls['draft']),
|
||||
'vendor_controls': '\n'.join(vendor_sub)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue