diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-10-20 01:25:45 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2022-10-24 23:11:37 +0300 |
commit | a8113fb3a89984cc65d51436480cee45b60543e8 (patch) | |
tree | f54e072d0b169004bcf2fc4b6262fccf2759e60a /src/apps/cam/stream_options.cpp | |
parent | 11f5c3ad0561a4e4b1e06f477ab2022c69803ad2 (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.cpp | 134 |
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; -} |