[libcamera-devel] [PATCH] libcamera: camera_sensor: Cap resolution to max frame size
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Mar 4 17:59:18 CET 2021
Hi Jacopo,
Thank you for the patch.
On Thu, Mar 04, 2021 at 02:17:09PM +0100, Jacopo Mondi wrote:
> Since commit 96aecfe36508 ("libcamera: camera_sensor: Use active area
> size as resolution") the CameraSensor::resolution() method returned the
> sensor's active pixel area size.
>
> As the CameraSensor::resolution() method is widely used in the library
> code base to retrieve the maximum frame size the sensor can produce,
> in case it is smaller than the pixel area size the returned size cannot
> be used to configure the sensor correctly.
>
> Fix this by returning the maximum frame resolution the sensor can
> produce, or the pixel area size in case the sensor embeds and ISP that
> can upscale and the supported maximum frame size is thus larger that
> the pixel array size.
>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
> include/libcamera/internal/camera_sensor.h | 2 +-
> src/libcamera/camera_sensor.cpp | 14 +++++++++++++-
> 2 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index 71d012f795fe..3e98f71b5e7f 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -53,7 +53,7 @@ public:
> const MediaEntity *entity() const { return entity_; }
> const std::vector<unsigned int> &mbusCodes() const { return mbusCodes_; }
> const std::vector<Size> &sizes() const { return sizes_; }
> - Size resolution() const { return activeArea_.size(); }
> + Size resolution() const;
>
> V4L2SubdeviceFormat getFormat(const std::vector<unsigned int> &mbusCodes,
> const Size &size) const;
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index a04982971616..edc2c27084ed 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -551,10 +551,22 @@ int CameraSensor::initProperties()
> */
>
> /**
> - * \fn CameraSensor::resolution()
> * \brief Retrieve the camera sensor resolution
> + *
> + * The camera sensor resolution is the largest frame size the sensor can produce
> + * or, if the camera sensor embeds and ISP that can up-scale, the pixel area
> + * size.
Should we express it the other way around, with the active pixel area
being the default ?
* The camera sensor resolution is the active pixel area size, clamped to the
* maximum frame size the sensor can produce if it is smaller than the active
* pixel area.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + *
> + * \todo Consider if it desirable to distinguish between the maximum resolution
> + * the sensor can produce (also including upscaled ones) and the actual pixel
> + * array size by splitting this method in two.
> + *
> * \return The camera sensor resolution in pixels
> */
> +Size CameraSensor::resolution() const
> +{
> + return std::min(sizes_.back(), activeArea_.size());
> +}
>
> /**
> * \brief Retrieve the best sensor format for a desired output
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list