[libcamera-devel] [PATCH v7 3/6] libcamera: CameraSensorProperties: Add table of v4l2 index and test pattern

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jun 7 23:43:38 CEST 2021


Hello,

On Mon, Jun 07, 2021 at 04:29:26PM +0200, Jacopo Mondi wrote:
> On Mon, Jun 07, 2021 at 10:13:59AM +0900, Hirokazu Honda wrote:
> > The V4L2 specification defines the sensor test pattern modes
> > through a menu control, where a numerical index is associated to
> > a string that describes the test pattern. The index-to-pattern
> > mapping is driver specific and requires a corresponding representation
> > in the library.
> >
> > Add to the static list of CameraSensorProperties a map of indexes to
> > libcamera::controls::TestPatternModes values to be able to map the
> > indexes returned by the driver to the corresponding test pattern mode.
> >
> > Signed-off-by: Hirokazu Honda <hiroh at chromium.org>
> > ---
> >  .../internal/camera_sensor_properties.h       |  2 ++
> >  src/libcamera/camera_sensor_properties.cpp    | 31 +++++++++++++++++++
> >  2 files changed, 33 insertions(+)
> >
> > diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h
> > index f5e242cb..67c77920 100644
> > --- a/include/libcamera/internal/camera_sensor_properties.h
> > +++ b/include/libcamera/internal/camera_sensor_properties.h
> > @@ -7,6 +7,7 @@
> >  #ifndef __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__
> >  #define __LIBCAMERA_SENSOR_CAMERA_SENSOR_PROPERTIES_H__
> >
> > +#include <map>
> >  #include <string>
> >
> >  #include <libcamera/geometry.h>
> > @@ -17,6 +18,7 @@ struct CameraSensorProperties {
> >  	static const CameraSensorProperties *get(const std::string &sensor);
> >
> >  	Size unitCellSize;
> > +	std::map<int32_t, int32_t> testPatternModes;
> >  };
> >
> >  } /* namespace libcamera */
> > diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
> > index a2c04009..14270ef9 100644
> > --- a/src/libcamera/camera_sensor_properties.cpp
> > +++ b/src/libcamera/camera_sensor_properties.cpp
> > @@ -9,6 +9,8 @@
> >
> >  #include <map>
> >
> > +#include <libcamera/control_ids.h>
> > +
> >  #include "libcamera/internal/log.h"
> >
> >  /**
> > @@ -34,6 +36,11 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
> >   *
> >   * \var CameraSensorProperties::unitCellSize
> >   * \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
> >   */
> >
> >  /**
> > @@ -47,18 +54,42 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
> >  	static const std::map<std::string, const CameraSensorProperties> sensorProps = {
> >  		{ "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 },
> > +			},
> >  		} },
> >  		{ "imx258", {
> >  			.unitCellSize = { 1120, 1120 },
> >  		} },
> 
> I'm sad to report that with Clang 11.1.0 I get
> 
> ../src/libcamera/camera_sensor_properties.cpp: In static member function ‘static const libcamera::CameraSensorProperties* libcamera::CameraSensorProperties::get(const string&)’:
> ../src/libcamera/camera_sensor_properties.cpp:94:2: error: missing initializer for member ‘libcamera::CameraSensorProperties::testPatternModes’ [-Werror=missing-field-initializers]
>    94 |  };
>       |  ^
> cc1plus: all warnings being treated as errors
> 
> As it seems the test patterns for imx258 are required.

I want
https://en.cppreference.com/w/cpp/language/aggregate_initialization#Designated_initializers
in C++17 :-)

			.testPatternModes = {},

will fix this. With this change,

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> >  		{ "ov5670", {
> >  			.unitCellSize = { 1120, 1120 },
> > +			.testPatternModes = {
> > +				{ 0, controls::draft::TestPatternModeOff },
> > +				{ 1, controls::draft::TestPatternModeColorBars },
> > +			},
> >  		} },
> >  		{ "ov13858", {
> >  			.unitCellSize = { 1120, 1120 },
> > +			.testPatternModes =  {
> > +				{ 0, controls::draft::TestPatternModeOff },
> > +				{ 1, controls::draft::TestPatternModeColorBars },
> > +			},
> >  		} },
> >  		{ "ov5693", {
> >  			.unitCellSize = { 1400, 1400 },
> > +			.testPatternModes = {
> > +				{ 0, controls::draft::TestPatternModeOff },
> > +				{ 2, controls::draft::TestPatternModeColorBars },
> > +				/*
> > +				 * No corresponding test pattern mode for
> > +				 * 1: "Random data" and 3: "Colour Bars with
> > +				 * Rolling Bar".
> > +				 */
> > +			},
> >  		} },
> >  	};
> >

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list