[libcamera-devel] [PATCH v1 1/8] libcamera: stream: Add stream hints to StreamConfiguration
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Mar 7 11:18:59 CET 2023
Quoting Jacopo Mondi via libcamera-devel (2023-03-02 09:39:39)
> Hi Naush
>
> I've seen (and read) the huge backlog on this series, as I don't want
> to start the discussion over I will only review the most trivial
> things if any but I guess the design has been debated already in great
> detail
>
> On Fri, Feb 03, 2023 at 09:44:17AM +0000, Naushir Patuck via libcamera-devel wrote:
> > Add a new hints flags field in the StreamConfiguration structure to allow the
> > application to specify certain intended behavior when driving libcamera.
> > Pipeline handlers are expected to look at these hint flags and may optimise
> > internal operations based on them.
> >
> > Currently, only one flag is listed, MandatoryStream, which the application can
> > set to inform the pipeline handler that a buffer will always be provided on
> > every Request for a given stream.
> >
>
> Just for sake of bikeshedding, the name says "MandatoryStream" but it
> informs the ph that "a buffer will always be provided with every
> request". I would name it "MandatoryBuffer"
Because it's on the StreamConfiguration, My vote would be to stick with
MandatoryStream.
>
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > ---
> > include/libcamera/stream.h | 8 ++++++++
> > src/libcamera/stream.cpp | 25 +++++++++++++++++++++++++
> > 2 files changed, 33 insertions(+)
> >
> > diff --git a/include/libcamera/stream.h b/include/libcamera/stream.h
> > index 29235ddf0d8a..56e5a74b2aab 100644
> > --- a/include/libcamera/stream.h
> > +++ b/include/libcamera/stream.h
> > @@ -13,6 +13,8 @@
> > #include <string>
> > #include <vector>
> >
> > +#include <libcamera/base/flags.h>
> > +
> > #include <libcamera/color_space.h>
> > #include <libcamera/framebuffer.h>
> > #include <libcamera/geometry.h>
> > @@ -51,6 +53,12 @@ struct StreamConfiguration {
> >
> > std::optional<ColorSpace> colorSpace;
> >
> > + enum class Hint {
> > + None = 0,
> > + MandatoryStream = (1 << 0),
> > + };
> > + Flags<Hint> hints;
> > +
> > Stream *stream() const { return stream_; }
> > void setStream(Stream *stream) { stream_ = stream; }
> > const StreamFormats &formats() const { return formats_; }
> > diff --git a/src/libcamera/stream.cpp b/src/libcamera/stream.cpp
> > index 67f308157fbf..9b0e8dd548cf 100644
> > --- a/src/libcamera/stream.cpp
> > +++ b/src/libcamera/stream.cpp
> > @@ -349,6 +349,31 @@ StreamConfiguration::StreamConfiguration(const StreamFormats &formats)
> > * color spaces can be supported and in what combinations.
> > */
> >
> > +/**
> > + * \enum StreamConfiguration::Hint
> > + * \brief List of available hint flags provided by the application for a stream
> > + *
> > + * \var StreamConfiguration::Hint::None
> > + * No hints for this stream.
> > + * \var StreamConfiguration::Hint::MandatoryStream
> > + * Informs the pipeline handler that the application will always provide a
> > + * buffer for the configured stream in every Request. This may ensure the
> > + * pipeline handler does not need any additional stream buffer allocations for
> > + * internal use.
>
> I'm not sure if the last part is actually platform specific or not.
> Other pipeline migh use the hint for other reasons ? It can be changed
> later if/when other PH will eventually use it
I would expect the hint to be consistent on other platforms if it's used.
We would have the same restrictions/requirements.
>
> > + */
> > +
> > +/**
> > + * \var StreamConfiguration::hints
> > + * \brief Application provided StreamConfiguration::Hint flags for specific
> > + * stream behavior
>
> I would just drop "for specific stram behavior"
>
> > + *
> > + * Provides hints from the application to the pipeline handlers on how it
> > + * intends on handling a given configured stream. These hints may alter the
> > + * behavior of the pipeline handlers, for example, by not allocating additional
> > + * buffers for internal use if an application guarantees buffers will be
> > + * provided in every Request for a stream.
>
> This repeats the StreamConfiguration::Hint::MandatoryStream
> documentation.
>
> I would rather describe what happens if a hint is not supported by a
> platform. Will the field be zeroed or adjusted ?
That's an interesting idea. I had presumed hints were 'optional'
directions ... but zeroing out unsupported flags when it gets validated
would make sense as a way for the application to know if something would
actually happen from the flag. But it probably wouldn't make much
difference? I guess it depends on how it's usage grows.
>
> > + */
> > +
> > /**
> > * \fn StreamConfiguration::stream()
> > * \brief Retrieve the stream associated with the configuration
> > --
> > 2.25.1
> >
More information about the libcamera-devel
mailing list