cam: Rework how streams configuration is prepared

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@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Niklas Söderlund 2019-04-02 00:07:16 +02:00
parent d5ca33f6c7
commit 30fe5bde5f

View file

@ -78,27 +78,27 @@ static int parseOptions(int argc, char *argv[])
return 0; return 0;
} }
static int configureStreams(Camera *camera, std::set<Stream *> &streams) static int prepareCameraConfig(std::map<Stream *, StreamConfiguration> *config)
{ {
KeyValueParser::Options format = options[OptFormat]; std::set<Stream *> streams = camera->streams();
Stream *id = *streams.begin(); *config = camera->streamConfiguration(streams);
Stream *stream = config->begin()->first;
std::map<Stream *, StreamConfiguration> config =
camera->streamConfiguration(streams);
if (options.isSet(OptFormat)) { if (options.isSet(OptFormat)) {
KeyValueParser::Options format = options[OptFormat];
if (format.isSet("width")) if (format.isSet("width"))
config[id].width = format["width"]; (*config)[stream].width = format["width"];
if (format.isSet("height")) if (format.isSet("height"))
config[id].height = format["height"]; (*config)[stream].height = format["height"];
/* TODO: Translate 4CC string to ID. */ /* TODO: Translate 4CC string to ID. */
if (format.isSet("pixelformat")) 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) 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() static int capture()
{ {
std::map<Stream *, StreamConfiguration> config;
std::vector<Request *> requests;
int ret; int ret;
std::set<Stream *> streams = camera->streams(); ret = prepareCameraConfig(&config);
std::vector<Request *> requests; if (ret) {
std::cout << "Failed to prepare camera configuration" << std::endl;
return ret;
}
ret = configureStreams(camera.get(), streams); ret = camera->configureStreams(config);
if (ret < 0) { if (ret < 0) {
std::cout << "Failed to configure camera" << std::endl; std::cout << "Failed to configure camera" << std::endl;
return ret; return ret;
} }
Stream *stream = *streams.begin(); Stream *stream = config.begin()->first;
ret = camera->allocateBuffers(); ret = camera->allocateBuffers();
if (ret) { if (ret) {