[libcamera-devel] ipa: mojom: Move CameraSensorInfo struct exclusively to IPA IPC
diff mbox series

Message ID 20210511115611.57642-1-umang.jain@ideasonboard.com
State Superseded
Delegated to: Umang Jain
Headers show
Series
  • [libcamera-devel] ipa: mojom: Move CameraSensorInfo struct exclusively to IPA IPC
Related show

Commit Message

Umang Jain May 11, 2021, 11:56 a.m. UTC
CameraSensorInfo structure is designed to pass in camera sensor related
information from pipeline-handler to IPA. Since the pipeline-hander
and IPA are connected via mojom IPC IPA interface, the interface
itself provides a more suitable placement of CameraSensorInfo,
instead of camera_sensor.h (which is a libcamera internal header
ultimately, at this point).

As CameraSensorInfo is already defined in core.mojom, it is just
a matter of removing [skipHeader] tag to allow code-generation
of CameraSensorInfo. Also, update header paths to include
CameraSensorInfo definition from IPA interfaces instead of
"libcamera/internal/camera_sensor.h".

Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
---
 include/libcamera/internal/camera_sensor.h |  17 +---
 include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-
 include/libcamera/ipa/ipa_interface.h      |   2 -
 src/ipa/raspberrypi/raspberrypi.cpp        |   1 -
 src/libcamera/camera_sensor.cpp            | 111 --------------------
 5 files changed, 112 insertions(+), 131 deletions(-)

Comments

Kieran Bingham May 11, 2021, 4:31 p.m. UTC | #1
Hi Umang,

On 11/05/2021 12:56, Umang Jain wrote:
> CameraSensorInfo structure is designed to pass in camera sensor related
> information from pipeline-handler to IPA. Since the pipeline-hander
> and IPA are connected via mojom IPC IPA interface, the interface
> itself provides a more suitable placement of CameraSensorInfo,
> instead of camera_sensor.h (which is a libcamera internal header
> ultimately, at this point).
> 
> As CameraSensorInfo is already defined in core.mojom, it is just
> a matter of removing [skipHeader] tag to allow code-generation
> of CameraSensorInfo. Also, update header paths to include
> CameraSensorInfo definition from IPA interfaces instead of
> "libcamera/internal/camera_sensor.h".
> 
> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
> ---
>  include/libcamera/internal/camera_sensor.h |  17 +---
>  include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-
>  include/libcamera/ipa/ipa_interface.h      |   2 -
>  src/ipa/raspberrypi/raspberrypi.cpp        |   1 -
>  src/libcamera/camera_sensor.cpp            | 111 --------------------
>  5 files changed, 112 insertions(+), 131 deletions(-)
> 
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index 2a5c51a1..0905ebfa 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -14,6 +14,7 @@
>  #include <libcamera/class.h>
>  #include <libcamera/controls.h>
>  #include <libcamera/geometry.h>
> +#include <libcamera/ipa/core_ipa_interface.h>

Hrm, I feel like that deserves it's own 'group' (i.e. a new line above
it) because it's the IPA as a sub component almost ... but equally, it's
in the right place here by alphabetical sorting so ... I suspect it's fine.



>  
>  #include "libcamera/internal/formats.h"
>  #include "libcamera/internal/log.h"
> @@ -24,22 +25,6 @@ namespace libcamera {
>  class BayerFormat;
>  class MediaEntity;
>  
> -struct CameraSensorInfo {
> -	std::string model;
> -
> -	uint32_t bitsPerPixel;
> -
> -	Size activeAreaSize;
> -	Rectangle analogCrop;
> -	Size outputSize;
> -
> -	uint64_t pixelRate;
> -	uint32_t lineLength;
> -
> -	uint32_t minFrameLength;
> -	uint32_t maxFrameLength;
> -};
> -
>  class CameraSensor : protected Loggable
>  {
>  public:
> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
> index 6caaa63e..2a09b233 100644
> --- a/include/libcamera/ipa/core.mojom
> +++ b/include/libcamera/ipa/core.mojom
> @@ -78,7 +78,117 @@ module libcamera;
>  	uint32 height;
>  };
>  
> -[skipHeader] struct CameraSensorInfo {
> +/**
> + * \struct CameraSensorInfo
> + * \brief Report the image sensor characteristics

I haven't checked yet, but do we need to do anything to make sure
doxygen parses this?

Hopefully doxygen will pick it up from the generated header file - but
can you check that it builds please?



> + *
> + * The structure reports image sensor characteristics used by IPA modules to
> + * tune their algorithms based on the image sensor model currently in use and
> + * its configuration.
> + *
> + * The reported information describes the sensor's intrinsics characteristics,
> + * such as its pixel array size and the sensor model name, as well as
> + * information relative to the currently configured mode, such as the produced
> + * image size and the bit depth of the requested image format.
> + *
> + * Instances of this structure are meant to be assembled by the CameraSensor
> + * class by inspecting the sensor static properties as well as information
> + * relative to the current configuration.
> + */
> +
> +/**
> + * \var CameraSensorInfo::model
> + * \brief The image sensor model name
> + *
> + * The sensor model name is a free-formed string that uniquely identifies the
> + * sensor model.
> + */
> +
> +/**
> + * \var CameraSensorInfo::bitsPerPixel
> + * \brief The number of bits per pixel of the image format produced by the
> + * image sensor
> + */
> +
> +/**
> + * \var CameraSensorInfo::activeAreaSize
> + * \brief The size of the pixel array active area of the sensor
> + */
> +
> +/**
> + * \var CameraSensorInfo::analogCrop
> + * \brief The portion of the pixel array active area which is read-out and
> + * processed
> + *
> + * The analog crop rectangle top-left corner is defined as the displacement
> + * from the top-left corner of the pixel array active area. The rectangle
> + * horizontal and vertical sizes define the portion of the pixel array which
> + * is read-out and provided to the sensor's internal processing pipeline, before
> + * any pixel sub-sampling method, such as pixel binning, skipping and averaging
> + * take place.
> + */
> +
> +/**
> + * \var CameraSensorInfo::outputSize
> + * \brief The size of the images produced by the camera sensor
> + *
> + * The output image size defines the horizontal and vertical sizes of the images
> + * produced by the image sensor. The output image size is defined as the end
> + * result of the sensor's internal image processing pipeline stages, applied on
> + * the pixel array portion defined by the analog crop rectangle. Each image
> + * processing stage that performs pixel sub-sampling techniques, such as pixel
> + * binning or skipping, or perform any additional digital scaling concur in the
> + * definition of the output image size.
> + */
> +
> +/**
> + * \var CameraSensorInfo::pixelRate
> + * \brief The number of pixels produced in a second
> + *
> + * To obtain the read-out time in seconds of a full line:
> + *
> + * \verbatim
> +	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
> +   \endverbatim
> + */
> +
> +/**
> + * \var CameraSensorInfo::lineLength
> + * \brief Total line length in pixels
> + *
> + * The total line length in pixel clock periods, including blanking.
> + */
> +
> +/**
> + * \var CameraSensorInfo::minFrameLength
> + * \brief The minimum allowable frame length in units of lines
> + *
> + * The sensor frame length comprises of active output lines and blanking lines
> + * in a frame. The minimum frame length value dictates the minimum allowable
> + * frame duration of the sensor mode.
> + *
> + * To obtain the minimum frame duration:
> + *
> + * \verbatim
> +	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> +   \endverbatim
> + */
> +
> +/**
> + * \var CameraSensorInfo::maxFrameLength
> + * \brief The maximum allowable frame length in units of lines
> + *
> + * The sensor frame length comprises of active output lines and blanking lines
> + * in a frame. The maximum frame length value dictates the maximum allowable
> + * frame duration of the sensor mode.
> + *
> + * To obtain the maximum frame duration:
> + *
> + * \verbatim
> +	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> +   \endverbatim
> + */
> +struct CameraSensorInfo {
>  	string model;
>  
>  	uint32 bitsPerPixel;
> diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
> index dfe1b40a..4aefaa71 100644
> --- a/include/libcamera/ipa/ipa_interface.h
> +++ b/include/libcamera/ipa/ipa_interface.h
> @@ -18,8 +18,6 @@
>  #include <libcamera/geometry.h>
>  #include <libcamera/signal.h>
>  
> -#include "libcamera/internal/camera_sensor.h"
> -

Certainly glad to see this go now ;-)

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>


>  namespace libcamera {
>  
>  /*
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> index 52d91db2..87774500 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -25,7 +25,6 @@
>  #include <libcamera/span.h>
>  
>  #include "libcamera/internal/buffer.h"
> -#include "libcamera/internal/camera_sensor.h"
>  #include "libcamera/internal/log.h"
>  
>  #include <linux/bcm2835-isp.h>
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index eb84d9eb..170de827 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -33,117 +33,6 @@ namespace libcamera {
>  
>  LOG_DEFINE_CATEGORY(CameraSensor)
>  
> -/**
> - * \struct CameraSensorInfo
> - * \brief Report the image sensor characteristics
> - *
> - * The structure reports image sensor characteristics used by IPA modules to
> - * tune their algorithms based on the image sensor model currently in use and
> - * its configuration.
> - *
> - * The reported information describes the sensor's intrinsics characteristics,
> - * such as its pixel array size and the sensor model name, as well as
> - * information relative to the currently configured mode, such as the produced
> - * image size and the bit depth of the requested image format.
> - *
> - * Instances of this structure are meant to be assembled by the CameraSensor
> - * class by inspecting the sensor static properties as well as information
> - * relative to the current configuration.
> - */
> -
> -/**
> - * \var CameraSensorInfo::model
> - * \brief The image sensor model name
> - *
> - * The sensor model name is a free-formed string that uniquely identifies the
> - * sensor model.
> - */
> -
> -/**
> - * \var CameraSensorInfo::bitsPerPixel
> - * \brief The number of bits per pixel of the image format produced by the
> - * image sensor
> - */
> -
> -/**
> - * \var CameraSensorInfo::activeAreaSize
> - * \brief The size of the pixel array active area of the sensor
> - */
> -
> -/**
> - * \var CameraSensorInfo::analogCrop
> - * \brief The portion of the pixel array active area which is read-out and
> - * processed
> - *
> - * The analog crop rectangle top-left corner is defined as the displacement
> - * from the top-left corner of the pixel array active area. The rectangle
> - * horizontal and vertical sizes define the portion of the pixel array which
> - * is read-out and provided to the sensor's internal processing pipeline, before
> - * any pixel sub-sampling method, such as pixel binning, skipping and averaging
> - * take place.
> - */
> -
> -/**
> - * \var CameraSensorInfo::outputSize
> - * \brief The size of the images produced by the camera sensor
> - *
> - * The output image size defines the horizontal and vertical sizes of the images
> - * produced by the image sensor. The output image size is defined as the end
> - * result of the sensor's internal image processing pipeline stages, applied on
> - * the pixel array portion defined by the analog crop rectangle. Each image
> - * processing stage that performs pixel sub-sampling techniques, such as pixel
> - * binning or skipping, or perform any additional digital scaling concur in the
> - * definition of the output image size.
> - */
> -
> -/**
> - * \var CameraSensorInfo::pixelRate
> - * \brief The number of pixels produced in a second
> - *
> - * To obtain the read-out time in seconds of a full line:
> - *
> - * \verbatim
> -	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
> -   \endverbatim
> - */
> -
> -/**
> - * \var CameraSensorInfo::lineLength
> - * \brief Total line length in pixels
> - *
> - * The total line length in pixel clock periods, including blanking.
> - */
> -
> -/**
> - * \var CameraSensorInfo::minFrameLength
> - * \brief The minimum allowable frame length in units of lines
> - *
> - * The sensor frame length comprises of active output lines and blanking lines
> - * in a frame. The minimum frame length value dictates the minimum allowable
> - * frame duration of the sensor mode.
> - *
> - * To obtain the minimum frame duration:
> - *
> - * \verbatim
> -	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> -   \endverbatim
> - */
> -
> -/**
> - * \var CameraSensorInfo::maxFrameLength
> - * \brief The maximum allowable frame length in units of lines
> - *
> - * The sensor frame length comprises of active output lines and blanking lines
> - * in a frame. The maximum frame length value dictates the maximum allowable
> - * frame duration of the sensor mode.
> - *
> - * To obtain the maximum frame duration:
> - *
> - * \verbatim
> -	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> -   \endverbatim
> - */
> -
>  /**
>   * \class CameraSensor
>   * \brief A camera sensor based on V4L2 subdevices
>
Laurent Pinchart May 11, 2021, 6:46 p.m. UTC | #2
Hello,

On Tue, May 11, 2021 at 05:31:38PM +0100, Kieran Bingham wrote:
> On 11/05/2021 12:56, Umang Jain wrote:
> > CameraSensorInfo structure is designed to pass in camera sensor related
> > information from pipeline-handler to IPA. Since the pipeline-hander
> > and IPA are connected via mojom IPC IPA interface, the interface
> > itself provides a more suitable placement of CameraSensorInfo,
> > instead of camera_sensor.h (which is a libcamera internal header
> > ultimately, at this point).
> > 
> > As CameraSensorInfo is already defined in core.mojom, it is just
> > a matter of removing [skipHeader] tag to allow code-generation
> > of CameraSensorInfo. Also, update header paths to include
> > CameraSensorInfo definition from IPA interfaces instead of
> > "libcamera/internal/camera_sensor.h".
> > 
> > Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
> > ---
> >  include/libcamera/internal/camera_sensor.h |  17 +---
> >  include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-
> >  include/libcamera/ipa/ipa_interface.h      |   2 -
> >  src/ipa/raspberrypi/raspberrypi.cpp        |   1 -
> >  src/libcamera/camera_sensor.cpp            | 111 --------------------
> >  5 files changed, 112 insertions(+), 131 deletions(-)
> > 
> > diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> > index 2a5c51a1..0905ebfa 100644
> > --- a/include/libcamera/internal/camera_sensor.h
> > +++ b/include/libcamera/internal/camera_sensor.h
> > @@ -14,6 +14,7 @@
> >  #include <libcamera/class.h>
> >  #include <libcamera/controls.h>
> >  #include <libcamera/geometry.h>
> > +#include <libcamera/ipa/core_ipa_interface.h>
> 
> Hrm, I feel like that deserves it's own 'group' (i.e. a new line above
> it) because it's the IPA as a sub component almost ... but equally, it's
> in the right place here by alphabetical sorting so ... I suspect it's fine.
> 
> >  
> >  #include "libcamera/internal/formats.h"
> >  #include "libcamera/internal/log.h"
> > @@ -24,22 +25,6 @@ namespace libcamera {
> >  class BayerFormat;
> >  class MediaEntity;
> >  
> > -struct CameraSensorInfo {
> > -	std::string model;
> > -
> > -	uint32_t bitsPerPixel;
> > -
> > -	Size activeAreaSize;
> > -	Rectangle analogCrop;
> > -	Size outputSize;
> > -
> > -	uint64_t pixelRate;
> > -	uint32_t lineLength;
> > -
> > -	uint32_t minFrameLength;
> > -	uint32_t maxFrameLength;
> > -};
> > -
> >  class CameraSensor : protected Loggable
> >  {
> >  public:
> > diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
> > index 6caaa63e..2a09b233 100644
> > --- a/include/libcamera/ipa/core.mojom
> > +++ b/include/libcamera/ipa/core.mojom
> > @@ -78,7 +78,117 @@ module libcamera;
> >  	uint32 height;
> >  };
> >  
> > -[skipHeader] struct CameraSensorInfo {
> > +/**
> > + * \struct CameraSensorInfo

I wonder if we should rename this to IPACameraSensorInfo to match the
other structures.

> > + * \brief Report the image sensor characteristics
> 
> I haven't checked yet, but do we need to do anything to make sure
> doxygen parses this?
> 
> Hopefully doxygen will pick it up from the generated header file - but
> can you check that it builds please?

As far as I can tell, mojo doesn't process comments, and doxygen can't
parse mojom files. We may need to move this to an otherwise empty .cpp
file.

> > + *
> > + * The structure reports image sensor characteristics used by IPA modules to
> > + * tune their algorithms based on the image sensor model currently in use and
> > + * its configuration.
> > + *
> > + * The reported information describes the sensor's intrinsics characteristics,
> > + * such as its pixel array size and the sensor model name, as well as
> > + * information relative to the currently configured mode, such as the produced
> > + * image size and the bit depth of the requested image format.
> > + *
> > + * Instances of this structure are meant to be assembled by the CameraSensor
> > + * class by inspecting the sensor static properties as well as information
> > + * relative to the current configuration.
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::model
> > + * \brief The image sensor model name
> > + *
> > + * The sensor model name is a free-formed string that uniquely identifies the
> > + * sensor model.
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::bitsPerPixel
> > + * \brief The number of bits per pixel of the image format produced by the
> > + * image sensor
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::activeAreaSize
> > + * \brief The size of the pixel array active area of the sensor
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::analogCrop
> > + * \brief The portion of the pixel array active area which is read-out and
> > + * processed
> > + *
> > + * The analog crop rectangle top-left corner is defined as the displacement
> > + * from the top-left corner of the pixel array active area. The rectangle
> > + * horizontal and vertical sizes define the portion of the pixel array which
> > + * is read-out and provided to the sensor's internal processing pipeline, before
> > + * any pixel sub-sampling method, such as pixel binning, skipping and averaging
> > + * take place.
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::outputSize
> > + * \brief The size of the images produced by the camera sensor
> > + *
> > + * The output image size defines the horizontal and vertical sizes of the images
> > + * produced by the image sensor. The output image size is defined as the end
> > + * result of the sensor's internal image processing pipeline stages, applied on
> > + * the pixel array portion defined by the analog crop rectangle. Each image
> > + * processing stage that performs pixel sub-sampling techniques, such as pixel
> > + * binning or skipping, or perform any additional digital scaling concur in the
> > + * definition of the output image size.
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::pixelRate
> > + * \brief The number of pixels produced in a second
> > + *
> > + * To obtain the read-out time in seconds of a full line:
> > + *
> > + * \verbatim
> > +	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
> > +   \endverbatim
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::lineLength
> > + * \brief Total line length in pixels
> > + *
> > + * The total line length in pixel clock periods, including blanking.
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::minFrameLength
> > + * \brief The minimum allowable frame length in units of lines
> > + *
> > + * The sensor frame length comprises of active output lines and blanking lines
> > + * in a frame. The minimum frame length value dictates the minimum allowable
> > + * frame duration of the sensor mode.
> > + *
> > + * To obtain the minimum frame duration:
> > + *
> > + * \verbatim
> > +	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> > +   \endverbatim
> > + */
> > +
> > +/**
> > + * \var CameraSensorInfo::maxFrameLength
> > + * \brief The maximum allowable frame length in units of lines
> > + *
> > + * The sensor frame length comprises of active output lines and blanking lines
> > + * in a frame. The maximum frame length value dictates the maximum allowable
> > + * frame duration of the sensor mode.
> > + *
> > + * To obtain the maximum frame duration:
> > + *
> > + * \verbatim
> > +	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> > +   \endverbatim
> > + */
> > +struct CameraSensorInfo {
> >  	string model;
> >  
> >  	uint32 bitsPerPixel;
> > diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
> > index dfe1b40a..4aefaa71 100644
> > --- a/include/libcamera/ipa/ipa_interface.h
> > +++ b/include/libcamera/ipa/ipa_interface.h
> > @@ -18,8 +18,6 @@
> >  #include <libcamera/geometry.h>
> >  #include <libcamera/signal.h>
> >  
> > -#include "libcamera/internal/camera_sensor.h"
> > -
> 
> Certainly glad to see this go now ;-)
> 
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> 
> >  namespace libcamera {
> >  
> >  /*
> > diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> > index 52d91db2..87774500 100644
> > --- a/src/ipa/raspberrypi/raspberrypi.cpp
> > +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> > @@ -25,7 +25,6 @@
> >  #include <libcamera/span.h>
> >  
> >  #include "libcamera/internal/buffer.h"
> > -#include "libcamera/internal/camera_sensor.h"
> >  #include "libcamera/internal/log.h"
> >  
> >  #include <linux/bcm2835-isp.h>
> > diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> > index eb84d9eb..170de827 100644
> > --- a/src/libcamera/camera_sensor.cpp
> > +++ b/src/libcamera/camera_sensor.cpp
> > @@ -33,117 +33,6 @@ namespace libcamera {
> >  
> >  LOG_DEFINE_CATEGORY(CameraSensor)
> >  
> > -/**
> > - * \struct CameraSensorInfo
> > - * \brief Report the image sensor characteristics
> > - *
> > - * The structure reports image sensor characteristics used by IPA modules to
> > - * tune their algorithms based on the image sensor model currently in use and
> > - * its configuration.
> > - *
> > - * The reported information describes the sensor's intrinsics characteristics,
> > - * such as its pixel array size and the sensor model name, as well as
> > - * information relative to the currently configured mode, such as the produced
> > - * image size and the bit depth of the requested image format.
> > - *
> > - * Instances of this structure are meant to be assembled by the CameraSensor
> > - * class by inspecting the sensor static properties as well as information
> > - * relative to the current configuration.
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::model
> > - * \brief The image sensor model name
> > - *
> > - * The sensor model name is a free-formed string that uniquely identifies the
> > - * sensor model.
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::bitsPerPixel
> > - * \brief The number of bits per pixel of the image format produced by the
> > - * image sensor
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::activeAreaSize
> > - * \brief The size of the pixel array active area of the sensor
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::analogCrop
> > - * \brief The portion of the pixel array active area which is read-out and
> > - * processed
> > - *
> > - * The analog crop rectangle top-left corner is defined as the displacement
> > - * from the top-left corner of the pixel array active area. The rectangle
> > - * horizontal and vertical sizes define the portion of the pixel array which
> > - * is read-out and provided to the sensor's internal processing pipeline, before
> > - * any pixel sub-sampling method, such as pixel binning, skipping and averaging
> > - * take place.
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::outputSize
> > - * \brief The size of the images produced by the camera sensor
> > - *
> > - * The output image size defines the horizontal and vertical sizes of the images
> > - * produced by the image sensor. The output image size is defined as the end
> > - * result of the sensor's internal image processing pipeline stages, applied on
> > - * the pixel array portion defined by the analog crop rectangle. Each image
> > - * processing stage that performs pixel sub-sampling techniques, such as pixel
> > - * binning or skipping, or perform any additional digital scaling concur in the
> > - * definition of the output image size.
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::pixelRate
> > - * \brief The number of pixels produced in a second
> > - *
> > - * To obtain the read-out time in seconds of a full line:
> > - *
> > - * \verbatim
> > -	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
> > -   \endverbatim
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::lineLength
> > - * \brief Total line length in pixels
> > - *
> > - * The total line length in pixel clock periods, including blanking.
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::minFrameLength
> > - * \brief The minimum allowable frame length in units of lines
> > - *
> > - * The sensor frame length comprises of active output lines and blanking lines
> > - * in a frame. The minimum frame length value dictates the minimum allowable
> > - * frame duration of the sensor mode.
> > - *
> > - * To obtain the minimum frame duration:
> > - *
> > - * \verbatim
> > -	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> > -   \endverbatim
> > - */
> > -
> > -/**
> > - * \var CameraSensorInfo::maxFrameLength
> > - * \brief The maximum allowable frame length in units of lines
> > - *
> > - * The sensor frame length comprises of active output lines and blanking lines
> > - * in a frame. The maximum frame length value dictates the maximum allowable
> > - * frame duration of the sensor mode.
> > - *
> > - * To obtain the maximum frame duration:
> > - *
> > - * \verbatim
> > -	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
> > -   \endverbatim
> > - */
> > -
> >  /**
> >   * \class CameraSensor
> >   * \brief A camera sensor based on V4L2 subdevices
Umang Jain May 12, 2021, 6:47 a.m. UTC | #3
Hi Laurent,

On 5/12/21 12:16 AM, Laurent Pinchart wrote:
> Hello,
>
> On Tue, May 11, 2021 at 05:31:38PM +0100, Kieran Bingham wrote:
>> On 11/05/2021 12:56, Umang Jain wrote:
>>> CameraSensorInfo structure is designed to pass in camera sensor related
>>> information from pipeline-handler to IPA. Since the pipeline-hander
>>> and IPA are connected via mojom IPC IPA interface, the interface
>>> itself provides a more suitable placement of CameraSensorInfo,
>>> instead of camera_sensor.h (which is a libcamera internal header
>>> ultimately, at this point).
>>>
>>> As CameraSensorInfo is already defined in core.mojom, it is just
>>> a matter of removing [skipHeader] tag to allow code-generation
>>> of CameraSensorInfo. Also, update header paths to include
>>> CameraSensorInfo definition from IPA interfaces instead of
>>> "libcamera/internal/camera_sensor.h".
>>>
>>> Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
>>> ---
>>>   include/libcamera/internal/camera_sensor.h |  17 +---
>>>   include/libcamera/ipa/core.mojom           | 112 ++++++++++++++++++++-
>>>   include/libcamera/ipa/ipa_interface.h      |   2 -
>>>   src/ipa/raspberrypi/raspberrypi.cpp        |   1 -
>>>   src/libcamera/camera_sensor.cpp            | 111 --------------------
>>>   5 files changed, 112 insertions(+), 131 deletions(-)
>>>
>>> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
>>> index 2a5c51a1..0905ebfa 100644
>>> --- a/include/libcamera/internal/camera_sensor.h
>>> +++ b/include/libcamera/internal/camera_sensor.h
>>> @@ -14,6 +14,7 @@
>>>   #include <libcamera/class.h>
>>>   #include <libcamera/controls.h>
>>>   #include <libcamera/geometry.h>
>>> +#include <libcamera/ipa/core_ipa_interface.h>
>> Hrm, I feel like that deserves it's own 'group' (i.e. a new line above
>> it) because it's the IPA as a sub component almost ... but equally, it's
>> in the right place here by alphabetical sorting so ... I suspect it's fine.
>>
>>>   
>>>   #include "libcamera/internal/formats.h"
>>>   #include "libcamera/internal/log.h"
>>> @@ -24,22 +25,6 @@ namespace libcamera {
>>>   class BayerFormat;
>>>   class MediaEntity;
>>>   
>>> -struct CameraSensorInfo {
>>> -	std::string model;
>>> -
>>> -	uint32_t bitsPerPixel;
>>> -
>>> -	Size activeAreaSize;
>>> -	Rectangle analogCrop;
>>> -	Size outputSize;
>>> -
>>> -	uint64_t pixelRate;
>>> -	uint32_t lineLength;
>>> -
>>> -	uint32_t minFrameLength;
>>> -	uint32_t maxFrameLength;
>>> -};
>>> -
>>>   class CameraSensor : protected Loggable
>>>   {
>>>   public:
>>> diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
>>> index 6caaa63e..2a09b233 100644
>>> --- a/include/libcamera/ipa/core.mojom
>>> +++ b/include/libcamera/ipa/core.mojom
>>> @@ -78,7 +78,117 @@ module libcamera;
>>>   	uint32 height;
>>>   };
>>>   
>>> -[skipHeader] struct CameraSensorInfo {
>>> +/**
>>> + * \struct CameraSensorInfo
> I wonder if we should rename this to IPACameraSensorInfo to match the
> other structures.
yes, I agree and have applied the changes locally.
>
>>> + * \brief Report the image sensor characteristics
>> I haven't checked yet, but do we need to do anything to make sure
>> doxygen parses this?
>>
>> Hopefully doxygen will pick it up from the generated header file - but
>> can you check that it builds please?
> As far as I can tell, mojo doesn't process comments, and doxygen can't
> parse mojom files. We may need to move this to an otherwise empty .cpp
> file.
Pinged epaul for that on IRC and see what path we should take.
I will follow up there itself
>>> + *
>>> + * The structure reports image sensor characteristics used by IPA modules to
>>> + * tune their algorithms based on the image sensor model currently in use and
>>> + * its configuration.
>>> + *
>>> + * The reported information describes the sensor's intrinsics characteristics,
>>> + * such as its pixel array size and the sensor model name, as well as
>>> + * information relative to the currently configured mode, such as the produced
>>> + * image size and the bit depth of the requested image format.
>>> + *
>>> + * Instances of this structure are meant to be assembled by the CameraSensor
>>> + * class by inspecting the sensor static properties as well as information
>>> + * relative to the current configuration.
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::model
>>> + * \brief The image sensor model name
>>> + *
>>> + * The sensor model name is a free-formed string that uniquely identifies the
>>> + * sensor model.
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::bitsPerPixel
>>> + * \brief The number of bits per pixel of the image format produced by the
>>> + * image sensor
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::activeAreaSize
>>> + * \brief The size of the pixel array active area of the sensor
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::analogCrop
>>> + * \brief The portion of the pixel array active area which is read-out and
>>> + * processed
>>> + *
>>> + * The analog crop rectangle top-left corner is defined as the displacement
>>> + * from the top-left corner of the pixel array active area. The rectangle
>>> + * horizontal and vertical sizes define the portion of the pixel array which
>>> + * is read-out and provided to the sensor's internal processing pipeline, before
>>> + * any pixel sub-sampling method, such as pixel binning, skipping and averaging
>>> + * take place.
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::outputSize
>>> + * \brief The size of the images produced by the camera sensor
>>> + *
>>> + * The output image size defines the horizontal and vertical sizes of the images
>>> + * produced by the image sensor. The output image size is defined as the end
>>> + * result of the sensor's internal image processing pipeline stages, applied on
>>> + * the pixel array portion defined by the analog crop rectangle. Each image
>>> + * processing stage that performs pixel sub-sampling techniques, such as pixel
>>> + * binning or skipping, or perform any additional digital scaling concur in the
>>> + * definition of the output image size.
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::pixelRate
>>> + * \brief The number of pixels produced in a second
>>> + *
>>> + * To obtain the read-out time in seconds of a full line:
>>> + *
>>> + * \verbatim
>>> +	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
>>> +   \endverbatim
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::lineLength
>>> + * \brief Total line length in pixels
>>> + *
>>> + * The total line length in pixel clock periods, including blanking.
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::minFrameLength
>>> + * \brief The minimum allowable frame length in units of lines
>>> + *
>>> + * The sensor frame length comprises of active output lines and blanking lines
>>> + * in a frame. The minimum frame length value dictates the minimum allowable
>>> + * frame duration of the sensor mode.
>>> + *
>>> + * To obtain the minimum frame duration:
>>> + *
>>> + * \verbatim
>>> +	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
>>> +   \endverbatim
>>> + */
>>> +
>>> +/**
>>> + * \var CameraSensorInfo::maxFrameLength
>>> + * \brief The maximum allowable frame length in units of lines
>>> + *
>>> + * The sensor frame length comprises of active output lines and blanking lines
>>> + * in a frame. The maximum frame length value dictates the maximum allowable
>>> + * frame duration of the sensor mode.
>>> + *
>>> + * To obtain the maximum frame duration:
>>> + *
>>> + * \verbatim
>>> +	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
>>> +   \endverbatim
>>> + */
>>> +struct CameraSensorInfo {
>>>   	string model;
>>>   
>>>   	uint32 bitsPerPixel;
>>> diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
>>> index dfe1b40a..4aefaa71 100644
>>> --- a/include/libcamera/ipa/ipa_interface.h
>>> +++ b/include/libcamera/ipa/ipa_interface.h
>>> @@ -18,8 +18,6 @@
>>>   #include <libcamera/geometry.h>
>>>   #include <libcamera/signal.h>
>>>   
>>> -#include "libcamera/internal/camera_sensor.h"
>>> -
>> Certainly glad to see this go now ;-)
>>
>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
>>
>>>   namespace libcamera {
>>>   
>>>   /*
>>> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
>>> index 52d91db2..87774500 100644
>>> --- a/src/ipa/raspberrypi/raspberrypi.cpp
>>> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
>>> @@ -25,7 +25,6 @@
>>>   #include <libcamera/span.h>
>>>   
>>>   #include "libcamera/internal/buffer.h"
>>> -#include "libcamera/internal/camera_sensor.h"
>>>   #include "libcamera/internal/log.h"
>>>   
>>>   #include <linux/bcm2835-isp.h>
>>> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
>>> index eb84d9eb..170de827 100644
>>> --- a/src/libcamera/camera_sensor.cpp
>>> +++ b/src/libcamera/camera_sensor.cpp
>>> @@ -33,117 +33,6 @@ namespace libcamera {
>>>   
>>>   LOG_DEFINE_CATEGORY(CameraSensor)
>>>   
>>> -/**
>>> - * \struct CameraSensorInfo
>>> - * \brief Report the image sensor characteristics
>>> - *
>>> - * The structure reports image sensor characteristics used by IPA modules to
>>> - * tune their algorithms based on the image sensor model currently in use and
>>> - * its configuration.
>>> - *
>>> - * The reported information describes the sensor's intrinsics characteristics,
>>> - * such as its pixel array size and the sensor model name, as well as
>>> - * information relative to the currently configured mode, such as the produced
>>> - * image size and the bit depth of the requested image format.
>>> - *
>>> - * Instances of this structure are meant to be assembled by the CameraSensor
>>> - * class by inspecting the sensor static properties as well as information
>>> - * relative to the current configuration.
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::model
>>> - * \brief The image sensor model name
>>> - *
>>> - * The sensor model name is a free-formed string that uniquely identifies the
>>> - * sensor model.
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::bitsPerPixel
>>> - * \brief The number of bits per pixel of the image format produced by the
>>> - * image sensor
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::activeAreaSize
>>> - * \brief The size of the pixel array active area of the sensor
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::analogCrop
>>> - * \brief The portion of the pixel array active area which is read-out and
>>> - * processed
>>> - *
>>> - * The analog crop rectangle top-left corner is defined as the displacement
>>> - * from the top-left corner of the pixel array active area. The rectangle
>>> - * horizontal and vertical sizes define the portion of the pixel array which
>>> - * is read-out and provided to the sensor's internal processing pipeline, before
>>> - * any pixel sub-sampling method, such as pixel binning, skipping and averaging
>>> - * take place.
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::outputSize
>>> - * \brief The size of the images produced by the camera sensor
>>> - *
>>> - * The output image size defines the horizontal and vertical sizes of the images
>>> - * produced by the image sensor. The output image size is defined as the end
>>> - * result of the sensor's internal image processing pipeline stages, applied on
>>> - * the pixel array portion defined by the analog crop rectangle. Each image
>>> - * processing stage that performs pixel sub-sampling techniques, such as pixel
>>> - * binning or skipping, or perform any additional digital scaling concur in the
>>> - * definition of the output image size.
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::pixelRate
>>> - * \brief The number of pixels produced in a second
>>> - *
>>> - * To obtain the read-out time in seconds of a full line:
>>> - *
>>> - * \verbatim
>>> -	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
>>> -   \endverbatim
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::lineLength
>>> - * \brief Total line length in pixels
>>> - *
>>> - * The total line length in pixel clock periods, including blanking.
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::minFrameLength
>>> - * \brief The minimum allowable frame length in units of lines
>>> - *
>>> - * The sensor frame length comprises of active output lines and blanking lines
>>> - * in a frame. The minimum frame length value dictates the minimum allowable
>>> - * frame duration of the sensor mode.
>>> - *
>>> - * To obtain the minimum frame duration:
>>> - *
>>> - * \verbatim
>>> -	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
>>> -   \endverbatim
>>> - */
>>> -
>>> -/**
>>> - * \var CameraSensorInfo::maxFrameLength
>>> - * \brief The maximum allowable frame length in units of lines
>>> - *
>>> - * The sensor frame length comprises of active output lines and blanking lines
>>> - * in a frame. The maximum frame length value dictates the maximum allowable
>>> - * frame duration of the sensor mode.
>>> - *
>>> - * To obtain the maximum frame duration:
>>> - *
>>> - * \verbatim
>>> -	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
>>> -   \endverbatim
>>> - */
>>> -
>>>   /**
>>>    * \class CameraSensor
>>>    * \brief A camera sensor based on V4L2 subdevices

Patch
diff mbox series

diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index 2a5c51a1..0905ebfa 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -14,6 +14,7 @@ 
 #include <libcamera/class.h>
 #include <libcamera/controls.h>
 #include <libcamera/geometry.h>
+#include <libcamera/ipa/core_ipa_interface.h>
 
 #include "libcamera/internal/formats.h"
 #include "libcamera/internal/log.h"
@@ -24,22 +25,6 @@  namespace libcamera {
 class BayerFormat;
 class MediaEntity;
 
-struct CameraSensorInfo {
-	std::string model;
-
-	uint32_t bitsPerPixel;
-
-	Size activeAreaSize;
-	Rectangle analogCrop;
-	Size outputSize;
-
-	uint64_t pixelRate;
-	uint32_t lineLength;
-
-	uint32_t minFrameLength;
-	uint32_t maxFrameLength;
-};
-
 class CameraSensor : protected Loggable
 {
 public:
diff --git a/include/libcamera/ipa/core.mojom b/include/libcamera/ipa/core.mojom
index 6caaa63e..2a09b233 100644
--- a/include/libcamera/ipa/core.mojom
+++ b/include/libcamera/ipa/core.mojom
@@ -78,7 +78,117 @@  module libcamera;
 	uint32 height;
 };
 
-[skipHeader] struct CameraSensorInfo {
+/**
+ * \struct CameraSensorInfo
+ * \brief Report the image sensor characteristics
+ *
+ * The structure reports image sensor characteristics used by IPA modules to
+ * tune their algorithms based on the image sensor model currently in use and
+ * its configuration.
+ *
+ * The reported information describes the sensor's intrinsics characteristics,
+ * such as its pixel array size and the sensor model name, as well as
+ * information relative to the currently configured mode, such as the produced
+ * image size and the bit depth of the requested image format.
+ *
+ * Instances of this structure are meant to be assembled by the CameraSensor
+ * class by inspecting the sensor static properties as well as information
+ * relative to the current configuration.
+ */
+
+/**
+ * \var CameraSensorInfo::model
+ * \brief The image sensor model name
+ *
+ * The sensor model name is a free-formed string that uniquely identifies the
+ * sensor model.
+ */
+
+/**
+ * \var CameraSensorInfo::bitsPerPixel
+ * \brief The number of bits per pixel of the image format produced by the
+ * image sensor
+ */
+
+/**
+ * \var CameraSensorInfo::activeAreaSize
+ * \brief The size of the pixel array active area of the sensor
+ */
+
+/**
+ * \var CameraSensorInfo::analogCrop
+ * \brief The portion of the pixel array active area which is read-out and
+ * processed
+ *
+ * The analog crop rectangle top-left corner is defined as the displacement
+ * from the top-left corner of the pixel array active area. The rectangle
+ * horizontal and vertical sizes define the portion of the pixel array which
+ * is read-out and provided to the sensor's internal processing pipeline, before
+ * any pixel sub-sampling method, such as pixel binning, skipping and averaging
+ * take place.
+ */
+
+/**
+ * \var CameraSensorInfo::outputSize
+ * \brief The size of the images produced by the camera sensor
+ *
+ * The output image size defines the horizontal and vertical sizes of the images
+ * produced by the image sensor. The output image size is defined as the end
+ * result of the sensor's internal image processing pipeline stages, applied on
+ * the pixel array portion defined by the analog crop rectangle. Each image
+ * processing stage that performs pixel sub-sampling techniques, such as pixel
+ * binning or skipping, or perform any additional digital scaling concur in the
+ * definition of the output image size.
+ */
+
+/**
+ * \var CameraSensorInfo::pixelRate
+ * \brief The number of pixels produced in a second
+ *
+ * To obtain the read-out time in seconds of a full line:
+ *
+ * \verbatim
+	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
+   \endverbatim
+ */
+
+/**
+ * \var CameraSensorInfo::lineLength
+ * \brief Total line length in pixels
+ *
+ * The total line length in pixel clock periods, including blanking.
+ */
+
+/**
+ * \var CameraSensorInfo::minFrameLength
+ * \brief The minimum allowable frame length in units of lines
+ *
+ * The sensor frame length comprises of active output lines and blanking lines
+ * in a frame. The minimum frame length value dictates the minimum allowable
+ * frame duration of the sensor mode.
+ *
+ * To obtain the minimum frame duration:
+ *
+ * \verbatim
+	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
+   \endverbatim
+ */
+
+/**
+ * \var CameraSensorInfo::maxFrameLength
+ * \brief The maximum allowable frame length in units of lines
+ *
+ * The sensor frame length comprises of active output lines and blanking lines
+ * in a frame. The maximum frame length value dictates the maximum allowable
+ * frame duration of the sensor mode.
+ *
+ * To obtain the maximum frame duration:
+ *
+ * \verbatim
+	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
+   \endverbatim
+ */
+struct CameraSensorInfo {
 	string model;
 
 	uint32 bitsPerPixel;
diff --git a/include/libcamera/ipa/ipa_interface.h b/include/libcamera/ipa/ipa_interface.h
index dfe1b40a..4aefaa71 100644
--- a/include/libcamera/ipa/ipa_interface.h
+++ b/include/libcamera/ipa/ipa_interface.h
@@ -18,8 +18,6 @@ 
 #include <libcamera/geometry.h>
 #include <libcamera/signal.h>
 
-#include "libcamera/internal/camera_sensor.h"
-
 namespace libcamera {
 
 /*
diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
index 52d91db2..87774500 100644
--- a/src/ipa/raspberrypi/raspberrypi.cpp
+++ b/src/ipa/raspberrypi/raspberrypi.cpp
@@ -25,7 +25,6 @@ 
 #include <libcamera/span.h>
 
 #include "libcamera/internal/buffer.h"
-#include "libcamera/internal/camera_sensor.h"
 #include "libcamera/internal/log.h"
 
 #include <linux/bcm2835-isp.h>
diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
index eb84d9eb..170de827 100644
--- a/src/libcamera/camera_sensor.cpp
+++ b/src/libcamera/camera_sensor.cpp
@@ -33,117 +33,6 @@  namespace libcamera {
 
 LOG_DEFINE_CATEGORY(CameraSensor)
 
-/**
- * \struct CameraSensorInfo
- * \brief Report the image sensor characteristics
- *
- * The structure reports image sensor characteristics used by IPA modules to
- * tune their algorithms based on the image sensor model currently in use and
- * its configuration.
- *
- * The reported information describes the sensor's intrinsics characteristics,
- * such as its pixel array size and the sensor model name, as well as
- * information relative to the currently configured mode, such as the produced
- * image size and the bit depth of the requested image format.
- *
- * Instances of this structure are meant to be assembled by the CameraSensor
- * class by inspecting the sensor static properties as well as information
- * relative to the current configuration.
- */
-
-/**
- * \var CameraSensorInfo::model
- * \brief The image sensor model name
- *
- * The sensor model name is a free-formed string that uniquely identifies the
- * sensor model.
- */
-
-/**
- * \var CameraSensorInfo::bitsPerPixel
- * \brief The number of bits per pixel of the image format produced by the
- * image sensor
- */
-
-/**
- * \var CameraSensorInfo::activeAreaSize
- * \brief The size of the pixel array active area of the sensor
- */
-
-/**
- * \var CameraSensorInfo::analogCrop
- * \brief The portion of the pixel array active area which is read-out and
- * processed
- *
- * The analog crop rectangle top-left corner is defined as the displacement
- * from the top-left corner of the pixel array active area. The rectangle
- * horizontal and vertical sizes define the portion of the pixel array which
- * is read-out and provided to the sensor's internal processing pipeline, before
- * any pixel sub-sampling method, such as pixel binning, skipping and averaging
- * take place.
- */
-
-/**
- * \var CameraSensorInfo::outputSize
- * \brief The size of the images produced by the camera sensor
- *
- * The output image size defines the horizontal and vertical sizes of the images
- * produced by the image sensor. The output image size is defined as the end
- * result of the sensor's internal image processing pipeline stages, applied on
- * the pixel array portion defined by the analog crop rectangle. Each image
- * processing stage that performs pixel sub-sampling techniques, such as pixel
- * binning or skipping, or perform any additional digital scaling concur in the
- * definition of the output image size.
- */
-
-/**
- * \var CameraSensorInfo::pixelRate
- * \brief The number of pixels produced in a second
- *
- * To obtain the read-out time in seconds of a full line:
- *
- * \verbatim
-	lineDuration(s) = lineLength(pixels) / pixelRate(pixels per second)
-   \endverbatim
- */
-
-/**
- * \var CameraSensorInfo::lineLength
- * \brief Total line length in pixels
- *
- * The total line length in pixel clock periods, including blanking.
- */
-
-/**
- * \var CameraSensorInfo::minFrameLength
- * \brief The minimum allowable frame length in units of lines
- *
- * The sensor frame length comprises of active output lines and blanking lines
- * in a frame. The minimum frame length value dictates the minimum allowable
- * frame duration of the sensor mode.
- *
- * To obtain the minimum frame duration:
- *
- * \verbatim
-	frameDuration(s) = minFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
-   \endverbatim
- */
-
-/**
- * \var CameraSensorInfo::maxFrameLength
- * \brief The maximum allowable frame length in units of lines
- *
- * The sensor frame length comprises of active output lines and blanking lines
- * in a frame. The maximum frame length value dictates the maximum allowable
- * frame duration of the sensor mode.
- *
- * To obtain the maximum frame duration:
- *
- * \verbatim
-	frameDuration(s) = maxFrameLength(lines) * lineLength(pixels) / pixelRate(pixels per second)
-   \endverbatim
- */
-
 /**
  * \class CameraSensor
  * \brief A camera sensor based on V4L2 subdevices