[libcamera-devel] [RFC PATCH v2 1/5] libcamera: camera_sensor: Reverse the key and value of test pattern mode map
Jacopo Mondi
jacopo at jmondi.org
Tue Jun 22 12:08:11 CEST 2021
Hi Hiro,
On Tue, Jun 22, 2021 at 11:36:50AM +0900, Hirokazu Honda wrote:
> The key and value of the test pattern mode are originally the index of
> v4l2 control and the corresponding test pattern mode control value.
> This key and value are useful in the initialization for reporting
> available test pattern modes. However, the map of the reversed key and
> value is much more useful in applying a requested test pattern mode.
> Reverses the key and value of the map as the initialization is one
> time but the test pattern mode request will be multiple times.
>
> Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> ---
> src/libcamera/camera_sensor.cpp | 8 +++++--
> src/libcamera/camera_sensor_properties.cpp | 28 +++++++++++-----------
> 2 files changed, 20 insertions(+), 16 deletions(-)
>
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index 3e135353..70bbd97a 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -319,11 +319,15 @@ void CameraSensor::initTestPatternModes(
> return;
> }
>
> + std::map<int32_t, int32_t> indexToTestPatternMode;
> + for (const auto& it : testPatternModes)
> + indexToTestPatternMode[it.second] = it.first;
> +
At the expense of this additional vector, it is probably more
efficient to create it here instead of walking the testPatternModes
map looking for a value matching the index in all the iterations of
the below for loop like I would have done.
However, is this worth a comment ?
/*
* Create a map that associates the V4L2 control index to the
* test pattern mode by reversing the testPatternModes map
* provided by the camera sensor properties. This makes it
* easier to verify if the control index is supported in the below
* for loop that creates the list of supported test patterns.
*/
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> for (const ControlValue &value : v4l2TestPattern->second.values()) {
> const int32_t index = value.get<int32_t>();
>
> - const auto it = testPatternModes.find(index);
> - if (it == testPatternModes.end()) {
> + const auto it = indexToTestPatternMode.find(index);
> + if (it == indexToTestPatternMode.end()) {
> LOG(CameraSensor, Debug)
> << "Test pattern mode " << index << " ignored";
> continue;
> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
> index f660743a..d0b2ae0e 100644
> --- a/src/libcamera/camera_sensor_properties.cpp
> +++ b/src/libcamera/camera_sensor_properties.cpp
> @@ -38,9 +38,9 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
> * \brief The physical size of a pixel, including pixel edges, in nanometers.
> *
> * \var CameraSensorProperties::testPatternModes
> - * \brief Map that associates the indexes of the sensor test pattern modes as
> - * returned by V4L2_CID_TEST_PATTERN with the corresponding TestPattern
> - * control value
> + * \brief Map that associates the TestPattern control value with the indexes of
> + * the corresponding sensor test pattern modes as returned by
> + * V4L2_CID_TEST_PATTERN.
> */
>
> /**
> @@ -55,11 +55,11 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
> { "imx219", {
> .unitCellSize = { 1120, 1120 },
> .testPatternModes = {
> - { 0, controls::draft::TestPatternModeOff },
> - { 1, controls::draft::TestPatternModeColorBars },
> - { 2, controls::draft::TestPatternModeSolidColor },
> - { 3, controls::draft::TestPatternModeColorBarsFadeToGray },
> - { 4, controls::draft::TestPatternModePn9 },
> + { controls::draft::TestPatternModeOff, 0 },
> + { controls::draft::TestPatternModeColorBars, 1 },
> + { controls::draft::TestPatternModeSolidColor, 2 },
> + { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
> + { controls::draft::TestPatternModePn9, 4 },
> },
> } },
> { "imx258", {
> @@ -70,22 +70,22 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
> { "ov5670", {
> .unitCellSize = { 1120, 1120 },
> .testPatternModes = {
> - { 0, controls::draft::TestPatternModeOff },
> - { 1, controls::draft::TestPatternModeColorBars },
> + { controls::draft::TestPatternModeOff, 0 },
> + { controls::draft::TestPatternModeColorBars, 1 },
> },
> } },
> { "ov13858", {
> .unitCellSize = { 1120, 1120 },
> .testPatternModes = {
> - { 0, controls::draft::TestPatternModeOff },
> - { 1, controls::draft::TestPatternModeColorBars },
> + { controls::draft::TestPatternModeOff, 0 },
> + { controls::draft::TestPatternModeColorBars, 1 },
> },
> } },
> { "ov5693", {
> .unitCellSize = { 1400, 1400 },
> .testPatternModes = {
> - { 0, controls::draft::TestPatternModeOff },
> - { 2, controls::draft::TestPatternModeColorBars },
> + { controls::draft::TestPatternModeOff, 0 },
> + { controls::draft::TestPatternModeColorBars, 2 },
> /*
> * No corresponding test pattern mode for
> * 1: "Random data" and 3: "Colour Bars with
> --
> 2.32.0.288.g62a8d224e6-goog
>
More information about the libcamera-devel
mailing list