libcamera: ipu3: cio2: Report format and sizes

Add two methods to the CIO2Device class to retrieve all the supported
PixelFormats and sizes.

Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Jacopo Mondi
2020-06-29 17:51:18 +02:00
parent d181856edc
commit 6db776d55a
2 changed files with 45 additions and 0 deletions
+40
View File
@@ -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
+5
View File
@@ -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);