[libcamera-devel,v5,3/6] libcamera: CameraSensorProperties: Add table of v4l2 index and test pattern
diff mbox series

Message ID 20210519075941.1337388-3-hiroh@chromium.org
State Superseded
Headers show
Series
  • [libcamera-devel,v5,1/6] libcamera: controls: Add sensor test pattern mode
Related show

Commit Message

Hirokazu Honda May 19, 2021, 7:59 a.m. UTC
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@chromium.org>
---
 .../internal/camera_sensor_properties.h       |  2 ++
 src/libcamera/camera_sensor_properties.cpp    | 22 +++++++++++++++++++
 2 files changed, 24 insertions(+)

Comments

Jacopo Mondi May 26, 2021, 9:09 p.m. UTC | #1
Hi Hiro,

On Wed, May 19, 2021 at 04:59:38PM +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@chromium.org>
> ---
>  .../internal/camera_sensor_properties.h       |  2 ++
>  src/libcamera/camera_sensor_properties.cpp    | 22 +++++++++++++++++++
>  2 files changed, 24 insertions(+)
>
> diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h
> index f5e242cb..88ec7261 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<uint8_t, uint8_t> testPatternModeMap;
>  };
>
>  } /* namespace libcamera */
> diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
> index 6ded31dc..3bf8e500 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,10 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
>   *
>   * \var CameraSensorProperties::unitCellSize
>   * \brief The physical size of a pixel, including pixel edges, in nanometers.
> + *
> + * \var CameraSensorProperties::testPatternModeMap
> + * \brief The table from a v4l2 menu index for V4L2_CID_TEST_PATTERN to the
> + * control value of libcamera test pattern mode.

How about:

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,12 +53,28 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
>  	static const std::map<std::string, const CameraSensorProperties> sensorProps = {
>  		{ "imx219", {
>  			.unitCellSize = { 1120, 1120 },
> +			.testPatternModeMap = {
> +				{ 0, controls::draft::TestPatternModeOff },
> +				{ 1, controls::draft::TestPatternModeColorBars },
> +				{ 2, controls::draft::TestPatternModeSolidColor },
> +				{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },
> +				{ 4, controls::draft::TestPatternModePn9 },
> +			},
>  		} },
>  		{ "ov5670", {
>  			.unitCellSize = { 1120, 1120 },
> +			.testPatternModeMap = {
> +				{ 0, controls::draft::TestPatternModeOff },
> +				{ 1, controls::draft::TestPatternModeColorBars },
> +			},
>  		} },
>  		{ "ov13858", {
>  			.unitCellSize = { 1120, 1120 },
> +			.testPatternModeMap =  {
> +				{ 0, controls::draft::TestPatternModeOff },
> +				{ 1, controls::draft::TestPatternModeColorBars },
> +				{ 2, controls::draft::TestPatternModeColorBarsFadeToGray },
> +			},
>  		} },

This patch breaks compilation as it requires the .testPatternModeMap
field to be defined for the ov5693 sensor too. I've now realized at
the time that sensor was not in the database :)

>  	};
>
> --
> 2.31.1.751.gd2f1c929bd-goog
>
Hirokazu Honda May 27, 2021, 6:27 a.m. UTC | #2
Hi Jacopo,

On Thu, May 27, 2021 at 6:08 AM Jacopo Mondi <jacopo@jmondi.org> wrote:

> Hi Hiro,
>
> On Wed, May 19, 2021 at 04:59:38PM +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@chromium.org>
> > ---
> >  .../internal/camera_sensor_properties.h       |  2 ++
> >  src/libcamera/camera_sensor_properties.cpp    | 22 +++++++++++++++++++
> >  2 files changed, 24 insertions(+)
> >
> > diff --git a/include/libcamera/internal/camera_sensor_properties.h
> b/include/libcamera/internal/camera_sensor_properties.h
> > index f5e242cb..88ec7261 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<uint8_t, uint8_t> testPatternModeMap;
> >  };
> >
> >  } /* namespace libcamera */
> > diff --git a/src/libcamera/camera_sensor_properties.cpp
> b/src/libcamera/camera_sensor_properties.cpp
> > index 6ded31dc..3bf8e500 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,10 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
> >   *
> >   * \var CameraSensorProperties::unitCellSize
> >   * \brief The physical size of a pixel, including pixel edges, in
> nanometers.
> > + *
> > + * \var CameraSensorProperties::testPatternModeMap
> > + * \brief The table from a v4l2 menu index for V4L2_CID_TEST_PATTERN to
> the
> > + * control value of libcamera test pattern mode.
>
> How about:
>
> 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,12 +53,28 @@ const CameraSensorProperties
> *CameraSensorProperties::get(const std::string &sen
> >       static const std::map<std::string, const CameraSensorProperties>
> sensorProps = {
> >               { "imx219", {
> >                       .unitCellSize = { 1120, 1120 },
> > +                     .testPatternModeMap = {
> > +                             { 0, controls::draft::TestPatternModeOff },
> > +                             { 1,
> controls::draft::TestPatternModeColorBars },
> > +                             { 2,
> controls::draft::TestPatternModeSolidColor },
> > +                             { 3,
> controls::draft::TestPatternModeColorBarsFadeToGray },
> > +                             { 4, controls::draft::TestPatternModePn9 },
> > +                     },
> >               } },
> >               { "ov5670", {
> >                       .unitCellSize = { 1120, 1120 },
> > +                     .testPatternModeMap = {
> > +                             { 0, controls::draft::TestPatternModeOff },
> > +                             { 1,
> controls::draft::TestPatternModeColorBars },
> > +                     },
> >               } },
> >               { "ov13858", {
> >                       .unitCellSize = { 1120, 1120 },
> > +                     .testPatternModeMap =  {
> > +                             { 0, controls::draft::TestPatternModeOff },
> > +                             { 1,
> controls::draft::TestPatternModeColorBars },
> > +                             { 2,
> controls::draft::TestPatternModeColorBarsFadeToGray },
> > +                     },
> >               } },
>
> This patch breaks compilation as it requires the .testPatternModeMap
> field to be defined for the ov5693 sensor too. I've now realized at
> the time that sensor was not in the database :)
>
>
ov5693 is mainly used in MS surface tablets according to the commit message
of the patch adding this.
Probably because of that, the sensor driver for it is not upstream to linux
kernel and it is impossible to construct this table for ov5693.
I couldn't even test pattern modes supported by it.

Jean, do you know anything about this?

-Hiro

> >       };
> >
> > --
> > 2.31.1.751.gd2f1c929bd-goog
> >
>
Tomasz Figa May 27, 2021, 7:03 a.m. UTC | #3
On Thu, May 27, 2021 at 3:27 PM Hirokazu Honda <hiroh@chromium.org> wrote:
>
> Hi Jacopo,
>
> On Thu, May 27, 2021 at 6:08 AM Jacopo Mondi <jacopo@jmondi.org> wrote:
>>
>> Hi Hiro,
>>
>> On Wed, May 19, 2021 at 04:59:38PM +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@chromium.org>
>> > ---
>> >  .../internal/camera_sensor_properties.h       |  2 ++
>> >  src/libcamera/camera_sensor_properties.cpp    | 22 +++++++++++++++++++
>> >  2 files changed, 24 insertions(+)
>> >
>> > diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h
>> > index f5e242cb..88ec7261 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<uint8_t, uint8_t> testPatternModeMap;
>> >  };
>> >
>> >  } /* namespace libcamera */
>> > diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
>> > index 6ded31dc..3bf8e500 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,10 @@ LOG_DEFINE_CATEGORY(CameraSensorProperties)
>> >   *
>> >   * \var CameraSensorProperties::unitCellSize
>> >   * \brief The physical size of a pixel, including pixel edges, in nanometers.
>> > + *
>> > + * \var CameraSensorProperties::testPatternModeMap
>> > + * \brief The table from a v4l2 menu index for V4L2_CID_TEST_PATTERN to the
>> > + * control value of libcamera test pattern mode.
>>
>> How about:
>>
>> 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,12 +53,28 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
>> >       static const std::map<std::string, const CameraSensorProperties> sensorProps = {
>> >               { "imx219", {
>> >                       .unitCellSize = { 1120, 1120 },
>> > +                     .testPatternModeMap = {
>> > +                             { 0, controls::draft::TestPatternModeOff },
>> > +                             { 1, controls::draft::TestPatternModeColorBars },
>> > +                             { 2, controls::draft::TestPatternModeSolidColor },
>> > +                             { 3, controls::draft::TestPatternModeColorBarsFadeToGray },
>> > +                             { 4, controls::draft::TestPatternModePn9 },
>> > +                     },
>> >               } },
>> >               { "ov5670", {
>> >                       .unitCellSize = { 1120, 1120 },
>> > +                     .testPatternModeMap = {
>> > +                             { 0, controls::draft::TestPatternModeOff },
>> > +                             { 1, controls::draft::TestPatternModeColorBars },
>> > +                     },
>> >               } },
>> >               { "ov13858", {
>> >                       .unitCellSize = { 1120, 1120 },
>> > +                     .testPatternModeMap =  {
>> > +                             { 0, controls::draft::TestPatternModeOff },
>> > +                             { 1, controls::draft::TestPatternModeColorBars },
>> > +                             { 2, controls::draft::TestPatternModeColorBarsFadeToGray },
>> > +                     },
>> >               } },
>>
>> This patch breaks compilation as it requires the .testPatternModeMap
>> field to be defined for the ov5693 sensor too. I've now realized at
>> the time that sensor was not in the database :)
>>
>
> ov5693 is mainly used in MS surface tablets according to the commit message of the patch adding this.
> Probably because of that, the sensor driver for it is not upstream to linux kernel and it is impossible to construct this table for ov5693.
> I couldn't even test pattern modes supported by it.

Hmm, was the patch applied accidentally? I indeed don't see the driver upstream.

>
> Jean, do you know anything about this?
>
> -Hiro
>>
>> >       };
>> >
>> > --
>> > 2.31.1.751.gd2f1c929bd-goog
>> >

Patch
diff mbox series

diff --git a/include/libcamera/internal/camera_sensor_properties.h b/include/libcamera/internal/camera_sensor_properties.h
index f5e242cb..88ec7261 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<uint8_t, uint8_t> testPatternModeMap;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/camera_sensor_properties.cpp b/src/libcamera/camera_sensor_properties.cpp
index 6ded31dc..3bf8e500 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,10 @@  LOG_DEFINE_CATEGORY(CameraSensorProperties)
  *
  * \var CameraSensorProperties::unitCellSize
  * \brief The physical size of a pixel, including pixel edges, in nanometers.
+ *
+ * \var CameraSensorProperties::testPatternModeMap
+ * \brief The table from a v4l2 menu index for V4L2_CID_TEST_PATTERN to the
+ * control value of libcamera test pattern mode.
  */
 
 /**
@@ -47,12 +53,28 @@  const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen
 	static const std::map<std::string, const CameraSensorProperties> sensorProps = {
 		{ "imx219", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModeMap = {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+				{ 2, controls::draft::TestPatternModeSolidColor },
+				{ 3, controls::draft::TestPatternModeColorBarsFadeToGray },
+				{ 4, controls::draft::TestPatternModePn9 },
+			},
 		} },
 		{ "ov5670", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModeMap = {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+			},
 		} },
 		{ "ov13858", {
 			.unitCellSize = { 1120, 1120 },
+			.testPatternModeMap =  {
+				{ 0, controls::draft::TestPatternModeOff },
+				{ 1, controls::draft::TestPatternModeColorBars },
+				{ 2, controls::draft::TestPatternModeColorBarsFadeToGray },
+			},
 		} },
 	};