Files
external_libcamera/include/libcamera/internal/global_configuration.h
T
Laurent Pinchart 7133680dd7 libcamera: yaml_parser: Split YamlObject from YamlParser
The YamlObject class was designed to represent data parsed from YAML
files. It is outgrowing the initial needs. Move it to a separate file to
prepare for a rename.

Most files that include yaml_parser.h only need access to a YamlObject.
Switch them to yaml_object.h. pipeline_base.cpp was including
yaml_parser.h indirectly through pipeline_base.h, include it directly
now.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>
2026-04-24 18:08:16 +03:00

63 lines
1.4 KiB
C++

/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2024-2025 Red Hat, inc.
*
* Global configuration handling
*/
#pragma once
#include <filesystem>
#include <optional>
#include <string>
#include <string_view>
#include <libcamera/base/utils.h>
#include "libcamera/internal/yaml_object.h"
namespace libcamera {
class GlobalConfiguration
{
public:
using Configuration = const YamlObject &;
GlobalConfiguration();
unsigned int version() const;
Configuration configuration() const;
template<typename T>
std::optional<T> option(
const std::initializer_list<std::string_view> confPath) const
{
const YamlObject *c = &configuration();
for (auto part : confPath) {
c = &(*c)[part];
if (!*c)
return {};
}
return c->get<T>();
}
std::optional<std::vector<std::string>> listOption(
const std::initializer_list<std::string_view> confPath) const;
std::optional<std::string> envOption(
const char *const envVariable,
const std::initializer_list<std::string_view> confPath) const;
std::optional<std::vector<std::string>> envListOption(
const char *const envVariable,
const std::initializer_list<std::string_view> confPath,
const std::string delimiter = ":") const;
private:
bool loadFile(const std::filesystem::path &fileName);
void load();
std::unique_ptr<YamlObject> yamlConfiguration_ =
std::make_unique<YamlObject>();
};
} /* namespace libcamera */