summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/apps/common/stream_options.cpp41
-rw-r--r--src/apps/common/stream_options.h5
2 files changed, 17 insertions, 29 deletions
diff --git a/src/apps/common/stream_options.cpp b/src/apps/common/stream_options.cpp
index 3a5625f5..19dfe051 100644
--- a/src/apps/common/stream_options.cpp
+++ b/src/apps/common/stream_options.cpp
@@ -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 {};
}
diff --git a/src/apps/common/stream_options.h b/src/apps/common/stream_options.h
index 35e4e7c0..fe298c84 100644
--- a/src/apps/common/stream_options.h
+++ b/src/apps/common/stream_options.h
@@ -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);
};