summaryrefslogtreecommitdiff
path: root/src/apps/cam/stream_options.cpp
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-10-20 01:25:45 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-10-24 23:11:37 +0300
commita8113fb3a89984cc65d51436480cee45b60543e8 (patch)
treef54e072d0b169004bcf2fc4b6262fccf2759e60a /src/apps/cam/stream_options.cpp
parent11f5c3ad0561a4e4b1e06f477ab2022c69803ad2 (diff)
apps: Share common source between applications
Multiple source files in the src/apps/cam/ directory are used by cam, qcam and lc-compliance. They are compiled separately for each application. Move them to a new src/apps/common/ directory and compile them in a static library to decrease the number of compilation operations. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/apps/cam/stream_options.cpp')
-rw-r--r--src/apps/cam/stream_options.cpp134
1 files changed, 0 insertions, 134 deletions
diff --git a/src/apps/cam/stream_options.cpp b/src/apps/cam/stream_options.cpp
deleted file mode 100644
index 3a5625f5..00000000
--- a/src/apps/cam/stream_options.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Copyright (C) 2020, Raspberry Pi Ltd
- *
- * stream_options.cpp - Helper to parse options for streams
- */
-#include "stream_options.h"
-
-#include <iostream>
-
-#include <libcamera/color_space.h>
-
-using namespace libcamera;
-
-StreamKeyValueParser::StreamKeyValueParser()
-{
- addOption("role", OptionString,
- "Role for the stream (viewfinder, video, still, raw)",
- ArgumentRequired);
- addOption("width", OptionInteger, "Width in pixels",
- ArgumentRequired);
- addOption("height", OptionInteger, "Height in pixels",
- ArgumentRequired);
- addOption("pixelformat", OptionString, "Pixel format name",
- ArgumentRequired);
- addOption("colorspace", OptionString, "Color space",
- ArgumentRequired);
-}
-
-KeyValueParser::Options StreamKeyValueParser::parse(const char *arguments)
-{
- KeyValueParser::Options options = KeyValueParser::parse(arguments);
- StreamRole role;
-
- if (options.valid() && options.isSet("role") &&
- !parseRole(&role, options)) {
- std::cerr << "Unknown stream role "
- << options["role"].toString() << std::endl;
- options.invalidate();
- }
-
- return options;
-}
-
-StreamRoles StreamKeyValueParser::roles(const OptionValue &values)
-{
- /* If no configuration values to examine default to viewfinder. */
- if (values.empty())
- return { StreamRole::Viewfinder };
-
- const std::vector<OptionValue> &streamParameters = values.toArray();
-
- 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);
- }
-
- return roles;
-}
-
-int StreamKeyValueParser::updateConfiguration(CameraConfiguration *config,
- const OptionValue &values)
-{
- if (!config) {
- std::cerr << "No configuration provided" << std::endl;
- return -EINVAL;
- }
-
- /* If no configuration values nothing to do. */
- if (values.empty())
- return 0;
-
- const std::vector<OptionValue> &streamParameters = values.toArray();
-
- if (config->size() != streamParameters.size()) {
- std::cerr
- << "Number of streams in configuration "
- << config->size()
- << " does not match number of streams parsed "
- << streamParameters.size()
- << std::endl;
- return -EINVAL;
- }
-
- unsigned int i = 0;
- for (auto const &value : streamParameters) {
- KeyValueParser::Options opts = value.toKeyValues();
- StreamConfiguration &cfg = config->at(i++);
-
- if (opts.isSet("width") && opts.isSet("height")) {
- cfg.size.width = opts["width"];
- cfg.size.height = opts["height"];
- }
-
- if (opts.isSet("pixelformat"))
- cfg.pixelFormat = PixelFormat::fromString(opts["pixelformat"].toString());
-
- if (opts.isSet("colorspace"))
- cfg.colorSpace = ColorSpace::fromString(opts["colorspace"].toString());
- }
-
- return 0;
-}
-
-bool StreamKeyValueParser::parseRole(StreamRole *role,
- const KeyValueParser::Options &options)
-{
- if (!options.isSet("role"))
- return false;
-
- 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;
- }
-
- return false;
-}