[libcamera-devel] [PATCH v3 1/8] cam: Rework how streams configuration is prepared
Niklas Söderlund
niklas.soderlund at ragnatech.se
Sat Apr 6 01:58:35 CEST 2019
In preparation of reworking how a default configuration is retrieved
from a camera separate preparation of stream configuration and
application into two 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>
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
---
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..b5895fae85699b26 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 prepareCameraConfig(std::map<Stream *, StreamConfiguration> *config)
{
- 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 = prepareCameraConfig(&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
More information about the libcamera-devel
mailing list