diff options
-rw-r--r-- | include/libcamera/stream.h | 40 | ||||
-rw-r--r-- | src/libcamera/stream.cpp | 92 |
2 files changed, 132 insertions, 0 deletions
diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h index 970c4796..d0f7b0e1 100644 --- a/include/libcamera/stream.h +++ b/include/libcamera/stream.h @@ -8,6 +8,7 @@ #define __LIBCAMERA_STREAM_H__ #include <libcamera/buffer.h> +#include <libcamera/geometry.h> namespace libcamera { @@ -21,9 +22,48 @@ struct StreamConfiguration { unsigned int bufferCount; }; +class StreamUsage +{ +public: + enum Role { + StillCapture, + VideoRecording, + Viewfinder, + }; + + Role role() const { return role_; } + const Size &size() const { return size_; } + +protected: + explicit StreamUsage(Role role); + StreamUsage(Role role, int width, int height); + +private: + Role role_; + Size size_; +}; + class Stream final { public: + class StillCapture : public StreamUsage + { + public: + StillCapture(); + }; + + class VideoRecording : public StreamUsage + { + public: + VideoRecording(); + }; + + class Viewfinder : public StreamUsage + { + public: + Viewfinder(int width, int height); + }; + Stream(); BufferPool &bufferPool() { return bufferPool_; } const StreamConfiguration &configuration() const { return configuration_; } diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp index c4943c91..85cd5256 100644 --- a/src/libcamera/stream.cpp +++ b/src/libcamera/stream.cpp @@ -61,6 +61,65 @@ namespace libcamera { */ /** + * \class StreamUsage + * \brief Stream usage information + * + * The StreamUsage class describes how an application intends to use a stream. + * Usages are specified by applications and passed to cameras, that then select + * the most appropriate streams and their default configurations. + */ + +/** + * \enum StreamUsage::Role + * \brief Identify the role a stream is intended to play + * \var StreamUsage::StillCapture + * The stream is intended to capture high-resolution, high-quality still images + * with low frame rate. The captured frames may be exposed with flash. + * \var StreamUsage::VideoRecording + * The stream is intended to capture video for the purpose of recording or + * streaming. The video stream may produce a high frame rate and may be + * enhanced with video stabilization. + * \var StreamUsage::Viewfinder + * The stream is intended to capture video for the purpose of display on the + * local screen. The StreamUsage includes the desired resolution. Trade-offs + * between quality and usage of system resources are acceptable. + */ + +/** + * \fn StreamUsage::role() + * \brief Retrieve the stream role + * + * \return The stream role + */ + +/** + * \fn StreamUsage::size() + * \brief Retrieve desired size + * + * \return The desired size + */ + +/** + * \brief Create a stream usage + * \param[in] role Stream role + */ +StreamUsage::StreamUsage(Role role) + : role_(role) +{ +} + +/** + * \brief Create a stream usage with a desired size + * \param[in] role Stream role + * \param[in] width The desired width + * \param[in] height The desired height + */ +StreamUsage::StreamUsage(Role role, int width, int height) + : role_(role), size_(Size(width, height)) +{ +} + +/** * \class Stream * \brief Video stream for a camera * @@ -79,6 +138,39 @@ namespace libcamera { */ /** + * \class Stream::StillCapture + * \brief Describe a still capture usage + */ +Stream::StillCapture::StillCapture() + : StreamUsage(Role::StillCapture) +{ +} + +/** + * \class Stream::VideoRecording + * \brief Describe a video recording usage + */ +Stream::VideoRecording::VideoRecording() + : StreamUsage(Role::VideoRecording) +{ +} + +/** + * \class Stream::Viewfinder + * \brief Describe a viewfinder usage + */ + +/** + * \brief Create a viewfinder usage with a desired dimension + * \param[in] width The desired viewfinder width + * \param[in] height The desired viewfinder height + */ +Stream::Viewfinder::Viewfinder(int width, int height) + : StreamUsage(Role::Viewfinder, width, height) +{ +} + +/** * \brief Construct a stream with default parameters */ Stream::Stream() |