[libcamera-devel] [RFC 4/5] libcamera: stream: Add basic stream usage hints definitions
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Tue Apr 2 16:35:47 CEST 2019
Hi Niklas,
Thank you for the patch.
On Tue, Apr 02, 2019 at 02:53:31AM +0200, Niklas Söderlund wrote:
> 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
Should we name this StreamUsage instead ? I'm not sure the word "hint"
is a really good fit for the API, as these are more than hints. In any
case it would be usage hints, so I think StreamUsage is better than
StreamHint, and StreamUsageHint seems a bit too long.
> +{
> +public:
> + enum Type {
Maybe Role instead or Type ?
> + Viewfinder,
> + Video,
> + Still,
You could go for VideoRecording and StillCapture, to be a bit more
descriptive.
> + };
>
> + Type type() const { return type_; }
> +
> +protected:
> + StreamHint(Type type);
> + StreamHint(Type type, StreamConfiguration hints);
Doesn't this abuse the StreamConfiguration class a bit, shouldn't we use
a size (or possibly format) class ?
> +
> +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);
A bit overkill in my opinion, I don't think we need this helper.
> +};
> +
> +class Video : public StreamHint
> +{
> +public:
> + Video();
> +};
> +
> +class Still : public StreamHint
> +{
> +public:
> + Still();
> +};
Those are very generic names, and may lead to namespace clashes. You
could isolate them in a separate namespace (possibly moving them to the
Stream class), or rename them to StreamUsageViewfinder,
StreamUsageVideoRecording and StreamUsageStillCapture.
I like this overall, but I wonder if it's really worth subclassing
StreamHint.
>
> } /* 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 */
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list