mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 10:25:05 +03:00
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:
parent
d5ca33f6c7
commit
30fe5bde5f
1 changed files with 19 additions and 14 deletions
|
@ -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) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue