[libcamera-devel] [RFC 1/5] cam: Rework how streams configuration is prepared
Jacopo Mondi
jacopo at jmondi.org
Tue Apr 2 09:38:10 CEST 2019
Hi Niklas,
On Tue, Apr 02, 2019 at 02:53:28AM +0200, Niklas Söderlund wrote:
> In preparation of reworking how a default configuration is retrieved
> from a camera separate preparation of stream configuration and applying
> of it into to different functions. Reason for this is that preparation
> of camera configuration will become more complex.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> src/cam/main.cpp | 35 ++++++++++++++++++++---------------
> 1 file changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/src/cam/main.cpp b/src/cam/main.cpp
> index e7490c32f99a01ad..cc5302ca4e72ea6f 100644
> --- a/src/cam/main.cpp
> +++ b/src/cam/main.cpp
> @@ -78,27 +78,27 @@ static int parseOptions(int argc, char *argv[])
> return 0;
> }
>
> -static int configureStreams(Camera *camera, std::set<Stream *> &streams)
> +static int prepare_camera_config(std::map<Stream *, StreamConfiguration> *config)
Why have you here gone for name_with_underscores while the rest of the
code uses camelCaseNames ?
> {
> - KeyValueParser::Options format = options[OptFormat];
> - Stream *id = *streams.begin();
> -
> - std::map<Stream *, StreamConfiguration> config =
> - camera->streamConfiguration(streams);
> + std::set<Stream *> streams = camera->streams();
> + *config = camera->streamConfiguration(streams);
> + Stream *stream = config->begin()->first;
>
> if (options.isSet(OptFormat)) {
> + KeyValueParser::Options format = options[OptFormat];
> +
> if (format.isSet("width"))
> - config[id].width = format["width"];
> + (*config)[stream].width = format["width"];
>
> if (format.isSet("height"))
> - config[id].height = format["height"];
> + (*config)[stream].height = format["height"];
>
> /* TODO: Translate 4CC string to ID. */
> if (format.isSet("pixelformat"))
> - config[id].pixelFormat = format["pixelformat"];
> + (*config)[stream].pixelFormat = format["pixelformat"];
> }
>
> - return camera->configureStreams(config);
> + return 0;
> }
>
> static void requestComplete(Request *request, const std::map<Stream *, Buffer *> &buffers)
> @@ -136,18 +136,23 @@ static void requestComplete(Request *request, const std::map<Stream *, Buffer *>
>
> static int capture()
> {
> - int ret;
> -
> - std::set<Stream *> streams = camera->streams();
> + std::map<Stream *, StreamConfiguration> config;
> std::vector<Request *> requests;
> + int ret;
>
> - ret = configureStreams(camera.get(), streams);
> + ret = prepare_camera_config(&config);
> + if (ret) {
> + std::cout << "Failed to prepare camera configuration" << std::endl;
> + return ret;
> + }
> +
> + ret = camera->configureStreams(config);
> if (ret < 0) {
> std::cout << "Failed to configure camera" << std::endl;
> return ret;
> }
>
> - Stream *stream = *streams.begin();
> + Stream *stream = config.begin()->first;
>
> ret = camera->allocateBuffers();
> if (ret) {
> --
> 2.21.0
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20190402/2725fe90/attachment.sig>
More information about the libcamera-devel
mailing list