[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