[libcamera-devel] [PATCH v4 06/19] libcamera: ipu3: cio2: Report format and sizes
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Jul 30 18:40:47 CEST 2020
Hi Jacopo,
Thank you for the patch.
On Mon, Jul 20, 2020 at 12:47:23PM +0200, Jacopo Mondi wrote:
> Add two methods to the CIO2Device class to retrieve all the supported
> PixelFormats and sizes.
>
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
This feels a bit like an ad-hoc API, probably because it is :-) I'm sure
we'll rework the IPU3 code further, for now it should be fine.
Acked-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/pipeline/ipu3/cio2.cpp | 40 ++++++++++++++++++++++++++++
> src/libcamera/pipeline/ipu3/cio2.h | 5 ++++
> 2 files changed, 45 insertions(+)
>
> diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
> index 77f54da47e28..abe6d8a592d6 100644
> --- a/src/libcamera/pipeline/ipu3/cio2.cpp
> +++ b/src/libcamera/pipeline/ipu3/cio2.cpp
> @@ -10,6 +10,7 @@
> #include <linux/media-bus-format.h>
>
> #include <libcamera/formats.h>
> +#include <libcamera/geometry.h>
> #include <libcamera/stream.h>
>
> #include "libcamera/internal/camera_sensor.h"
> @@ -43,6 +44,45 @@ CIO2Device::~CIO2Device()
> delete sensor_;
> }
>
> +/**
> + * \brief Retrieve the list of supported PixelFormats
> + *
> + * Retrieve the list of supported pixel formats by matching the sensor produced
> + * media bus codes with the formats supported by the CIO2 unit.
> + *
> + * \return The list of supported PixelFormat
> + */
> +std::vector<PixelFormat> CIO2Device::formats() const
> +{
> + if (!sensor_)
> + return {};
> +
> + std::vector<PixelFormat> formats;
> + for (unsigned int code : sensor_->mbusCodes()) {
> + auto it = mbusCodesToPixelFormat.find(code);
> + if (it != mbusCodesToPixelFormat.end())
> + formats.push_back(it->second);
> + }
> +
> + return formats;
> +}
> +
> +/**
> + * \brief Retrieve the list of supported size ranges
> + * \return The list of supported SizeRange
> + */
> +std::vector<SizeRange> CIO2Device::sizes() const
> +{
> + if (!sensor_)
> + return {};
> +
> + std::vector<SizeRange> sizes;
> + for (const Size &size : sensor_->sizes())
> + sizes.emplace_back(size, size);
> +
> + return sizes;
> +}
> +
> /**
> * \brief Initialize components of the CIO2 device with \a index
> * \param[in] media The CIO2 media device
> diff --git a/src/libcamera/pipeline/ipu3/cio2.h b/src/libcamera/pipeline/ipu3/cio2.h
> index 956355a0aa58..221cf817eee9 100644
> --- a/src/libcamera/pipeline/ipu3/cio2.h
> +++ b/src/libcamera/pipeline/ipu3/cio2.h
> @@ -20,8 +20,10 @@ namespace libcamera {
> class CameraSensor;
> class FrameBuffer;
> class MediaDevice;
> +class PixelFormat;
> class Request;
> class Size;
> +class SizeRange;
> class V4L2Subdevice;
> struct StreamConfiguration;
>
> @@ -33,6 +35,9 @@ public:
> CIO2Device();
> ~CIO2Device();
>
> + std::vector<PixelFormat> formats() const;
> + std::vector<SizeRange> sizes() const;
> +
> int init(const MediaDevice *media, unsigned int index);
> int configure(const Size &size, V4L2DeviceFormat *outputFormat);
>
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list