[libcamera-devel,v4,11/16] libcamera: stream: StreamConfiguration: Add StreamFormats information

Message ID 20190619025129.21164-12-niklas.soderlund@ragnatech.se
State Accepted
Headers show
Series
  • libcamera: Add support for format information and validation
Related show

Commit Message

Niklas Söderlund June 19, 2019, 2:51 a.m. UTC
Allow StreamFormats to be associated to a StreamConfiguration. The
intention is that pipeline handlers should associate formats to a
StreamConfiguration when it's created in generateConfiguration().

Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/stream.h |  8 ++++----
 src/libcamera/stream.cpp   | 25 +++++++++++++++++++++++++
 2 files changed, 29 insertions(+), 4 deletions(-)

Patch

diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h
index 48daf5ac23f55d85..5b4fea324ce449b1 100644
--- a/include/libcamera/stream.h
+++ b/include/libcamera/stream.h
@@ -35,10 +35,8 @@  private:
 };
 
 struct StreamConfiguration {
-	StreamConfiguration()
-		: stream_(nullptr)
-	{
-	}
+	StreamConfiguration();
+	StreamConfiguration(const StreamFormats &formats);
 
 	unsigned int pixelFormat;
 	Size size;
@@ -47,11 +45,13 @@  struct StreamConfiguration {
 
 	Stream *stream() const { return stream_; }
 	void setStream(Stream *stream) { stream_ = stream; }
+	const StreamFormats &formats() const { return formats_; }
 
 	std::string toString() const;
 
 private:
 	Stream *stream_;
+	StreamFormats formats_;
 };
 
 enum StreamRole {
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index bfb072d691ae0e25..cfa7a327fdd0f1a8 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -270,6 +270,19 @@  SizeRange StreamFormats::range(unsigned int pixelformat) const
  * configured for a single video stream.
  */
 
+StreamConfiguration::StreamConfiguration()
+	: stream_(nullptr)
+{
+}
+
+/**
+ * \brief Construct a configuration with stream formats
+ */
+StreamConfiguration::StreamConfiguration(const StreamFormats &formats)
+	: stream_(nullptr), formats_(formats)
+{
+}
+
 /**
  * \var StreamConfiguration::size
  * \brief Stream size in pixels
@@ -310,6 +323,18 @@  SizeRange StreamFormats::range(unsigned int pixelformat) const
  * \param[in] stream The stream
  */
 
+/**
+ * \fn StreamConfiguration::formats()
+ * \brief Retrieve advisory stream format information
+ *
+ * This method retrieves information about the pixel formats and sizes supported
+ * by the stream configuration. The sizes are advisory and not all of them are
+ * guaranteed to be supported by the stream. Users shall always inspect the size
+ * in the stream configuration after calling CameraConfiguration::validate().
+ *
+ * \return Stream formats information
+ */
+
 /**
  * \brief Assemble and return a string describing the configuration
  *