[libcamera-devel] [RFC 5/5] libcamera: camera: Add support for stream usage hints
Niklas Söderlund
niklas.soderlund at ragnatech.se
Wed Apr 3 01:52:18 CEST 2019
Hi Laurent,
Thanks for your feedback.
On 2019-04-02 18:06:54 +0300, Laurent Pinchart wrote:
> Hi Niklas,
>
> Thank you for the patch.
>
> On Tue, Apr 02, 2019 at 02:53:32AM +0200, Niklas Söderlund wrote:
> > Instead of requesting the default configuration for a set of streams
> > where the application have to figure out which streams provided by the
>
> s/have/has/
>
> > camera is best suited for its intended usage have the library figure
>
> s/usage/usage,/
>
> > this out by using stream usage hints.
> >
> > The application asks the library for a list of streams and a suggested
> > default configuration for them by supplying a list of stream usage
> > hints. Once the list is retrieved the application can try and fine-tune
> > the returned configuration and then try to apply it to the camera.
> >
> > Currently no pipeline handler is prepared to handle usage hints but nor
> > did it make use of the list of Stream IDs which was the previous
> > interface. The main reason for this is that all cameras currently only
> > provide one stream each. This will still be the case but the API will be
> > prepared to expand both pipeline handlers and applications to support
> > multiple streams.
> >
> > Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> > ---
> > include/libcamera/camera.h | 3 ++-
> > src/cam/main.cpp | 2 +-
>
> qcam ? :-)
>
> > src/libcamera/camera.cpp | 30 ++++++++----------------
> > src/libcamera/include/pipeline_handler.h | 2 +-
> > src/libcamera/pipeline/ipu3/ipu3.cpp | 4 ++--
> > src/libcamera/pipeline/uvcvideo.cpp | 6 ++---
> > src/libcamera/pipeline/vimc.cpp | 6 ++---
> > src/libcamera/pipeline_handler.cpp | 4 ++--
> > src/qcam/main_window.cpp | 5 ++--
I see qcam being address in this patch ;-)
> > test/camera/capture.cpp | 5 ++--
> > test/camera/configuration_default.cpp | 17 +++++---------
> > test/camera/configuration_set.cpp | 3 +--
> > test/camera/statemachine.cpp | 4 +---
> > 13 files changed, 34 insertions(+), 57 deletions(-)
[snip]
> > /**
> > - * \brief Retrieve a group of stream configurations
> > - * \param[in] streams A map of stream IDs and configurations to setup
> > + * \brief Retrieve a group of stream configurations according to usage hints
> > + * \param[in] hints A list of stream usage hints
> > *
> > - * Retrieve the camera's configuration for a specified group of streams. The
> > - * caller can specifies which of the camera's streams to retrieve configuration
> > - * from by populating \a streams.
> > + * Retrieve configuration for a set of desired usages. The caller specifies a
> > + * list of usage hints and the camera returns a map of suitable streams and
> > + * a suggested default configuration.
>
> s/a suggested default configuration/their suggested default configurations/
>
> We'll have to expand this eventually.
I agree this will probably needs to be expanded as we learn what pieces
are missing.
>
> There's already one problem I can identify : there's no way for the
> caller to associate streams with the usage hints. One option would be to
> return a std::vector<std::pair<Stream *, StreamConfiguration>> with the
> requirement that the returned vector will have the same order as the
> hints vector. Other options are possible too.
Good catch, for some reason I assumed this was already the case...
I agree your suggestion of using std::vector<std::pair<>> would solve
the issue but it's not a very nice interface for applications to use.
After toying around a bit I think I found an other possible solution.
How about adding a Stream * to StreamConfiguration and returning a
std::vector<StreamConfiguration> where the order is the same as the
hints vector? It would also simplify the API towards applications which
I really like.
The reason this is a std::map currently is due to our organic growth and
that we used Stream * as the way to retrieve default configurations in a
non so smart way as we always only had one stream that worked but now it
seems less smart.
If you think this is a semi good idea I propose I add that on top of
this change to ease review. Let me know what you think.
--
Regards,
Niklas Söderlund
More information about the libcamera-devel
mailing list