[libcamera-devel] [RFC 4/5] libcamera: stream: Add basic stream usage hints definitions

Niklas Söderlund niklas.soderlund at ragnatech.se
Tue Apr 2 02:53:31 CEST 2019


In preparation of reworking how a default configuration is retrieved
from a camera add stream usage hints. The hints will be used by
applications to describe how it intends to use a camera and replace the
Stream IDs role when retrieving default configuration from the camera
using streamConfiguration().

Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
---
 include/libcamera/stream.h | 39 ++++++++++++++++++
 src/libcamera/stream.cpp   | 84 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 123 insertions(+)

diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h
index 3e8e83a2ff245879..445b80de66217934 100644
--- a/include/libcamera/stream.h
+++ b/include/libcamera/stream.h
@@ -35,7 +35,46 @@ private:
 	StreamConfiguration configuration_;
 };
 
+class StreamHint
+{
+public:
+	enum Type {
+		Viewfinder,
+		Video,
+		Still,
+	};
 
+	Type type() const { return type_; }
+
+protected:
+	StreamHint(Type type);
+	StreamHint(Type type, StreamConfiguration hints);
+
+private:
+	Type type_;
+	StreamConfiguration hints_;
+};
+
+class Viewfinder : public StreamHint
+{
+public:
+	Viewfinder(unsigned int width, unsigned int height);
+
+private:
+	static StreamConfiguration initHints(unsigned int width, unsigned int height);
+};
+
+class Video : public StreamHint
+{
+public:
+	Video();
+};
+
+class Still : public StreamHint
+{
+public:
+	Still();
+};
 
 } /* namespace libcamera */
 
diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
index c4943c91b2e6ce13..32f26a1f8e6adb2c 100644
--- a/src/libcamera/stream.cpp
+++ b/src/libcamera/stream.cpp
@@ -102,4 +102,88 @@ Stream::Stream()
  * \return The active configuration of the stream
  */
 
+/**
+ * \class StreamHint
+ * \brief Stream usage hint information
+ *
+ * The StreamHint class carries information about stream usage hints from the
+ * application to a specific pipeline handler implementation. The pipeline
+ * handler shall take the usage hints into account when select which stream
+ * to use for the desired operation.
+ */
+
+/**
+ * \enum StreamHint::Type
+ * \brief List of types of usage hints
+ */
+
+/**
+ * \fn StreamHint::type()
+ * \brief Retrieve the usage hint type
+ * \return The hint type
+ */
+
+/**
+ * \brief Create a stream hint
+ * \param[in] type Stream hint type
+ */
+StreamHint::StreamHint(Type type)
+	: type_(type), hints_()
+{
+}
+
+/**
+ * \brief Create a stream hint with parameters
+ * \param[in] type Stream hint type
+ * \param[in] hints Stream hint parameters
+ */
+StreamHint::StreamHint(Type type, StreamConfiguration hints)
+	: type_(type), hints_(hints)
+{
+}
+
+/**
+ * \class Viewfinder
+ * \brief Stream usage hint for viewfinder
+ */
+
+/**
+ * \brief Create a viewfinder stream hint
+ * \param[in] width Desired view finder width
+ * \param[in] height Desired view finder height
+ */
+Viewfinder::Viewfinder(unsigned int width, unsigned int height)
+	: StreamHint(Type::Viewfinder, initHints(width, height))
+{
+}
+
+StreamConfiguration Viewfinder::initHints(unsigned int width,
+					  unsigned int height)
+{
+	StreamConfiguration hints = {};
+
+	hints.width = width;
+	hints.height = height;
+
+	return hints;
+}
+
+/**
+ * \class Video
+ * \brief Stream usage hint for video
+ */
+Video::Video()
+	: StreamHint(Type::Video)
+{
+}
+
+/**
+ * \class Still
+ * \brief Stream usage hint for still images
+ */
+Still::Still()
+	: StreamHint(Type::Still)
+{
+}
+
 } /* namespace libcamera */
-- 
2.21.0



More information about the libcamera-devel mailing list