ipa: mojom: Move CameraSensorInfo struct exclusively to IPA IPC

CameraSensorInfo structure is designed to pass in camera sensor related
information from pipeline-handler to IPA. Since the pipeline-handler
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.

Finally, 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>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Umang Jain 2021-05-24 14:50:19 +05:30 committed by Laurent Pinchart
parent ff9276cc62
commit 6449590b63
6 changed files with 112 additions and 131 deletions

View file

@ -14,6 +14,7 @@
#include <libcamera/class.h> #include <libcamera/class.h>
#include <libcamera/controls.h> #include <libcamera/controls.h>
#include <libcamera/geometry.h> #include <libcamera/geometry.h>
#include <libcamera/ipa/core_ipa_interface.h>
#include "libcamera/internal/formats.h" #include "libcamera/internal/formats.h"
#include "libcamera/internal/log.h" #include "libcamera/internal/log.h"
@ -24,22 +25,6 @@ namespace libcamera {
class BayerFormat; class BayerFormat;
class MediaEntity; 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 class CameraSensor : protected Loggable
{ {
public: public:

View file

@ -78,7 +78,7 @@ module libcamera;
uint32 height; uint32 height;
}; };
[skipHeader] struct CameraSensorInfo { struct CameraSensorInfo {
string model; string model;
uint32 bitsPerPixel; uint32 bitsPerPixel;

View file

@ -18,8 +18,6 @@
#include <libcamera/geometry.h> #include <libcamera/geometry.h>
#include <libcamera/signal.h> #include <libcamera/signal.h>
#include "libcamera/internal/camera_sensor.h"
namespace libcamera { namespace libcamera {
/* /*

View file

@ -25,7 +25,6 @@
#include <libcamera/span.h> #include <libcamera/span.h>
#include "libcamera/internal/buffer.h" #include "libcamera/internal/buffer.h"
#include "libcamera/internal/camera_sensor.h"
#include "libcamera/internal/log.h" #include "libcamera/internal/log.h"
#include <linux/bcm2835-isp.h> #include <linux/bcm2835-isp.h>

View file

@ -33,117 +33,6 @@ namespace libcamera {
LOG_DEFINE_CATEGORY(CameraSensor) 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 * \class CameraSensor
* \brief A camera sensor based on V4L2 subdevices * \brief A camera sensor based on V4L2 subdevices

View file

@ -86,4 +86,114 @@ namespace libcamera {
* \brief The stream size in pixels * \brief The stream size in pixels
*/ */
/**
* \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
*/
} /* namespace libcamera */ } /* namespace libcamera */