Message ID | 20200714104212.48683-8-jacopo@jmondi.org |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thanks for your work. On 2020-07-14 12:41:59 +0200, Jacopo Mondi wrote: > Add two methods to the CIO2Device class to retrieve all the supported > PixelFormats and sizes. > > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> > --- > 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..ff436e0dae41 100644 > --- a/src/libcamera/pipeline/ipu3/cio2.cpp > +++ b/src/libcamera/pipeline/ipu3/cio2.cpp > @@ -9,6 +9,7 @@ > > #include <linux/media-bus-format.h> > > +#include <libcamera/geometry.h> > #include <libcamera/formats.h> > #include <libcamera/stream.h> Alphabetical sort includes. With this fixed, Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> > > @@ -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 4fd949f8e513..f905d97fa79d 100644 > --- a/src/libcamera/pipeline/ipu3/cio2.h > +++ b/src/libcamera/pipeline/ipu3/cio2.h > @@ -20,7 +20,9 @@ namespace libcamera { > class CameraSensor; > class FrameBuffer; > class MediaDevice; > +class PixelFormat; > class Request; > +class SizeRange; > class V4L2Subdevice; > struct Size; > 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); > > -- > 2.27.0 > > _______________________________________________ > libcamera-devel mailing list > libcamera-devel@lists.libcamera.org > https://lists.libcamera.org/listinfo/libcamera-devel
diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp index 77f54da47e28..ff436e0dae41 100644 --- a/src/libcamera/pipeline/ipu3/cio2.cpp +++ b/src/libcamera/pipeline/ipu3/cio2.cpp @@ -9,6 +9,7 @@ #include <linux/media-bus-format.h> +#include <libcamera/geometry.h> #include <libcamera/formats.h> #include <libcamera/stream.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 4fd949f8e513..f905d97fa79d 100644 --- a/src/libcamera/pipeline/ipu3/cio2.h +++ b/src/libcamera/pipeline/ipu3/cio2.h @@ -20,7 +20,9 @@ namespace libcamera { class CameraSensor; class FrameBuffer; class MediaDevice; +class PixelFormat; class Request; +class SizeRange; class V4L2Subdevice; struct Size; 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);
Add two methods to the CIO2Device class to retrieve all the supported PixelFormats and sizes. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> --- src/libcamera/pipeline/ipu3/cio2.cpp | 40 ++++++++++++++++++++++++++++ src/libcamera/pipeline/ipu3/cio2.h | 5 ++++ 2 files changed, 45 insertions(+)