apps: Return std::optional<> from StreamKeyValueParser::parseRole()

Instead of having bool return type and an out parameter, use
std::optional<libcamera::StreamRole> to return from
StreamKeyValueParser::parseRole().

Meanwhile at it, re-word an existing comment to make it lucid.

Signed-off-by: Barnabás Pőcze <pobrn@protonmail.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Signed-off-by: Umang Jain <umang.jain@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze
2023-02-13 16:43:06 +00:00
committed by Umang Jain
parent 02f0492c55
commit 58e0b6e18c
2 changed files with 17 additions and 29 deletions
+14 -27
View File
@@ -30,10 +30,8 @@ StreamKeyValueParser::StreamKeyValueParser()
KeyValueParser::Options StreamKeyValueParser::parse(const char *arguments)
{
KeyValueParser::Options options = KeyValueParser::parse(arguments);
StreamRole role;
if (options.valid() && options.isSet("role") &&
!parseRole(&role, options)) {
if (options.valid() && options.isSet("role") && !parseRole(options)) {
std::cerr << "Unknown stream role "
<< options["role"].toString() << std::endl;
options.invalidate();
@@ -52,13 +50,8 @@ StreamRoles StreamKeyValueParser::roles(const OptionValue &values)
StreamRoles roles;
for (auto const &value : streamParameters) {
StreamRole role;
/* If role is invalid or not set default to viewfinder. */
if (!parseRole(&role, value.toKeyValues()))
role = StreamRole::Viewfinder;
roles.push_back(role);
/* If a role is invalid default it to viewfinder. */
roles.push_back(parseRole(value.toKeyValues()).value_or(StreamRole::Viewfinder));
}
return roles;
@@ -108,27 +101,21 @@ int StreamKeyValueParser::updateConfiguration(CameraConfiguration *config,
return 0;
}
bool StreamKeyValueParser::parseRole(StreamRole *role,
const KeyValueParser::Options &options)
std::optional<libcamera::StreamRole> StreamKeyValueParser::parseRole(const KeyValueParser::Options &options)
{
if (!options.isSet("role"))
return false;
return {};
std::string name = options["role"].toString();
if (name == "viewfinder") {
*role = StreamRole::Viewfinder;
return true;
} else if (name == "video") {
*role = StreamRole::VideoRecording;
return true;
} else if (name == "still") {
*role = StreamRole::StillCapture;
return true;
} else if (name == "raw") {
*role = StreamRole::Raw;
return true;
}
if (name == "viewfinder")
return StreamRole::Viewfinder;
else if (name == "video")
return StreamRole::VideoRecording;
else if (name == "still")
return StreamRole::StillCapture;
else if (name == "raw")
return StreamRole::Raw;
return false;
return {};
}
+3 -2
View File
@@ -7,6 +7,8 @@
#pragma once
#include <optional>
#include <libcamera/camera.h>
#include "options.h"
@@ -23,6 +25,5 @@ public:
const OptionValue &values);
private:
static bool parseRole(libcamera::StreamRole *role,
const KeyValueParser::Options &options);
static std::optional<libcamera::StreamRole> parseRole(const KeyValueParser::Options &options);
};