summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2020-06-29 17:51:18 +0200
committerJacopo Mondi <jacopo@jmondi.org>2020-08-03 11:16:16 +0200
commit6db776d55a88440383359910a1ec131db65692bb (patch)
tree673f5dd9b14fc3819877a1ba14f9a97837145973 /src
parentd181856edc7f26a1108072bd024af74c082ac729 (diff)
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>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/ipu3/cio2.cpp40
-rw-r--r--src/libcamera/pipeline/ipu3/cio2.h5
2 files changed, 45 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/cio2.cpp b/src/libcamera/pipeline/ipu3/cio2.cpp
index 77f54da4..abe6d8a5 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"
@@ -44,6 +45,45 @@ CIO2Device::~CIO2Device()
}
/**
+ * \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
* \param[in] index The CIO2 device index
diff --git a/src/libcamera/pipeline/ipu3/cio2.h b/src/libcamera/pipeline/ipu3/cio2.h
index 956355a0..221cf817 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);