[libcamera-devel] [PATCH] libcamera: camera_sensor: Reverse the key and value of test pattern mode map

Hirokazu Honda hiroh at chromium.org
Tue Oct 5 06:34:13 CEST 2021


Hi Laurent,

On Tue, Oct 5, 2021 at 6:48 AM Laurent Pinchart
<laurent.pinchart at ideasonboard.com> wrote:
>
> Hi Hiro,
>
> Thank you for the patch.
>
> On Mon, Oct 04, 2021 at 03:58:56PM +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>
> > Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> >  src/libcamera/camera_sensor.cpp            | 15 ++++++-
> >  src/libcamera/camera_sensor_properties.cpp | 52 +++++++++++-----------
> >  2 files changed, 39 insertions(+), 28 deletions(-)
> >
> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> > index 87668509..e5844c04 100644
> > --- a/src/libcamera/camera_sensor.cpp
> > +++ b/src/libcamera/camera_sensor.cpp
> > @@ -320,11 +320,22 @@ void CameraSensor::initTestPatternModes(
> >               return;
> >       }
> >
> > +        /*
> > +         * Create a map that associates the V4L2 control index to the test
>
> Tabs instead of space for indentation.
>
> > +      * 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.
> > +         */
> > +     std::map<int32_t, int32_t> indexToTestPatternMode;
> > +     for (const auto& it : testPatternModes)
>
> s/& it/ &it/
>
> I'll fix those two small issues and push the patch.
>

Thanks for pushing.

> > +             indexToTestPatternMode[it.second] = it.first;
>
> On a side note, I wonder if we should add a function to utils.h for
> this.
>

I am not sure this is such a common pattern that it is worth adding to utils.h.
Let's add once we have much code like this in the codebase.

-Hiro
> > +
> >       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 39bb282d..48305ac4 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
> >               { "hi846", {
> >                       .unitCellSize = { 1120, 1120 },
> >                       .testPatternModes = {
> > -                             { 0, controls::draft::TestPatternModeOff },
> > -                             { 1, controls::draft::TestPatternModeSolidColor },
> > -                             { 2, controls::draft::TestPatternModeColorBars },
> > -                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },
> > -                             { 4, controls::draft::TestPatternModePn9 },
> > +                             { controls::draft::TestPatternModeOff, 0 },
> > +                             { controls::draft::TestPatternModeSolidColor, 1 },
> > +                             { controls::draft::TestPatternModeColorBars, 2 },
> > +                             { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
> > +                             { controls::draft::TestPatternModePn9, 4 },
> >                               /*
> >                                * No corresponding test pattern mode for:
> >                                * 5: "Gradient Horizontal"
> > @@ -73,21 +73,21 @@ 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", {
> >                       .unitCellSize = { 1120, 1120 },
> >                       .testPatternModes = {
> > -                             { 0, controls::draft::TestPatternModeOff },
> > -                             { 1, controls::draft::TestPatternModeSolidColor },
> > -                             { 2, controls::draft::TestPatternModeColorBars },
> > -                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },
> > -                             { 4, controls::draft::TestPatternModePn9 },
> > +                             { controls::draft::TestPatternModeOff, 0 },
> > +                             { controls::draft::TestPatternModeSolidColor, 1 },
> > +                             { controls::draft::TestPatternModeColorBars, 2 },
> > +                             { controls::draft::TestPatternModeColorBarsFadeToGray, 3 },
> > +                             { controls::draft::TestPatternModePn9, 4 },
> >                       },
> >               } },
> >               { "ov5647", {
> > @@ -97,15 +97,15 @@ 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 },
> >                       },
> >               } },
> >               { "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
> > @@ -116,8 +116,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
> >               { "ov8865", {
> >                       .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"
> > @@ -130,8 +130,8 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
> >               { "ov13858", {
> >                       .unitCellSize = { 1120, 1120 },
> >                       .testPatternModes =  {
> > -                             { 0, controls::draft::TestPatternModeOff },
> > -                             { 1, controls::draft::TestPatternModeColorBars },
> > +                             { controls::draft::TestPatternModeOff, 0 },
> > +                             { controls::draft::TestPatternModeColorBars, 1 },
> >                       },
> >               } },
> >       };
>
> --
> Regards,
>
> Laurent Pinchart


More information about the libcamera-devel mailing list