cam: Make use of StreamKeyValueParser
Use the StreamOptionsParser helper to parse stream configuration from the command line. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
693ab88162
commit
18cfea19dc
1 changed files with 7 additions and 61 deletions
|
@ -17,6 +17,7 @@
|
|||
#include "event_loop.h"
|
||||
#include "main.h"
|
||||
#include "options.h"
|
||||
#include "stream_options.h"
|
||||
|
||||
using namespace libcamera;
|
||||
|
||||
|
@ -154,16 +155,7 @@ void CamApp::quit()
|
|||
|
||||
int CamApp::parseOptions(int argc, char *argv[])
|
||||
{
|
||||
KeyValueParser streamKeyValue;
|
||||
streamKeyValue.addOption("role", OptionString,
|
||||
"Role for the stream (viewfinder, video, still, stillraw)",
|
||||
ArgumentRequired);
|
||||
streamKeyValue.addOption("width", OptionInteger, "Width in pixels",
|
||||
ArgumentRequired);
|
||||
streamKeyValue.addOption("height", OptionInteger, "Height in pixels",
|
||||
ArgumentRequired);
|
||||
streamKeyValue.addOption("pixelformat", OptionInteger, "Pixel format",
|
||||
ArgumentRequired);
|
||||
StreamKeyValueParser streamKeyValue;
|
||||
|
||||
OptionsParser parser;
|
||||
parser.addOption(OptCamera, OptionString,
|
||||
|
@ -202,38 +194,7 @@ int CamApp::parseOptions(int argc, char *argv[])
|
|||
|
||||
int CamApp::prepareConfig()
|
||||
{
|
||||
StreamRoles roles;
|
||||
|
||||
if (options_.isSet(OptStream)) {
|
||||
const std::vector<OptionValue> &streamOptions =
|
||||
options_[OptStream].toArray();
|
||||
|
||||
/* Use roles and get a default configuration. */
|
||||
for (auto const &value : streamOptions) {
|
||||
KeyValueParser::Options opt = value.toKeyValues();
|
||||
|
||||
std::string role = opt.isSet("role")
|
||||
? opt["role"].toString()
|
||||
: "viewfinder";
|
||||
|
||||
if (role == "viewfinder") {
|
||||
roles.push_back(StreamRole::Viewfinder);
|
||||
} else if (role == "video") {
|
||||
roles.push_back(StreamRole::VideoRecording);
|
||||
} else if (role == "still") {
|
||||
roles.push_back(StreamRole::StillCapture);
|
||||
} else if (role == "stillraw") {
|
||||
roles.push_back(StreamRole::StillCaptureRaw);
|
||||
} else {
|
||||
std::cerr << "Unknown stream role "
|
||||
<< role << std::endl;
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* If no configuration is provided assume a single video stream. */
|
||||
roles.push_back(StreamRole::VideoRecording);
|
||||
}
|
||||
StreamRoles roles = StreamKeyValueParser::roles(options_[OptStream]);
|
||||
|
||||
config_ = camera_->generateConfiguration(roles);
|
||||
if (!config_ || config_->size() != roles.size()) {
|
||||
|
@ -243,25 +204,10 @@ int CamApp::prepareConfig()
|
|||
}
|
||||
|
||||
/* Apply configuration if explicitly requested. */
|
||||
if (options_.isSet(OptStream)) {
|
||||
const std::vector<OptionValue> &streamOptions =
|
||||
options_[OptStream].toArray();
|
||||
|
||||
unsigned int i = 0;
|
||||
for (auto const &value : streamOptions) {
|
||||
KeyValueParser::Options opt = value.toKeyValues();
|
||||
StreamConfiguration &cfg = config_->at(i++);
|
||||
|
||||
if (opt.isSet("width"))
|
||||
cfg.size.width = opt["width"];
|
||||
|
||||
if (opt.isSet("height"))
|
||||
cfg.size.height = opt["height"];
|
||||
|
||||
/* TODO: Translate 4CC string to ID. */
|
||||
if (opt.isSet("pixelformat"))
|
||||
cfg.pixelFormat = PixelFormat(opt["pixelformat"]);
|
||||
}
|
||||
if (StreamKeyValueParser::updateConfiguration(config_.get(),
|
||||
options_[OptStream])) {
|
||||
std::cerr << "Failed to update configuration" << std::endl;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
switch (config_->validate()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue