MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
Config.cpp
Go to the documentation of this file.
1#include "Config.hpp"
2#include "Core.hpp"
3
5
9
11
12namespace MayaFlux {
13
14namespace {
15 struct JournalConfig {
16 std::string severity; // "TRACE" "DEBUG" "INFO" "WARN" "ERROR" "FATAL"
17 bool sink_to_console { false };
18 std::string log_file; // empty = no file sink
19 std::vector<std::string> disable_components; // names from Journal::Component enum
20 std::vector<std::string> disable_contexts; // names from Journal::Context enum
21
22 static constexpr auto describe()
23 {
24 return std::make_tuple(
25 IO::member("severity", &JournalConfig::severity),
26 IO::member("sink_to_console", &JournalConfig::sink_to_console),
27 IO::member("log_file", &JournalConfig::log_file),
28 IO::member("disable_components", &JournalConfig::disable_components),
29 IO::member("disable_contexts", &JournalConfig::disable_contexts));
30 }
31 };
32
33 struct EngineConfig {
34 Core::GlobalStreamInfo stream;
35 Core::GlobalGraphicsConfig graphics;
36 Core::GlobalInputConfig input;
37 Core::GlobalNetworkConfig network;
38 JournalConfig journal;
39
40 static constexpr auto describe()
41 {
42 return std::make_tuple(
43 IO::member("stream", &EngineConfig::stream),
44 IO::member("graphics", &EngineConfig::graphics),
45 IO::member("input", &EngineConfig::input),
46 IO::member("network", &EngineConfig::network),
47 IO::member("journal", &EngineConfig::journal));
48 }
49 };
50}
51
53{
54 return is_configured();
55}
56}
57
59
61{
63 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing stream info while engine is running may lead to inconsistent state.");
64 }
66}
67
69{
71 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing graphics config while engine is running may lead to inconsistent state.");
72 }
74}
75
77{
79 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing input config while engine is running may lead to inconsistent state.");
80 }
82}
83
85{
87 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing network config while engine is running may lead to inconsistent state.");
88 }
90}
91
96
98{
99 if (!is_engine_configured()) {
100 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Setting node config on context directly.");
101 }
103}
104
106{
107 if (!is_engine_configured()) {
108 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default sample rate");
109 return 48000;
110 }
112}
113
115{
116 if (!is_engine_configured()) {
117 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default buffer size");
118 return 512;
119 }
121}
122
124{
125 if (!is_engine_configured()) {
126 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default number of output channels");
127 return 2;
128 }
130}
131
136
137void set_journal_component_filter(const std::vector<Journal::Component>& component, bool enabled)
138{
139 for (const auto& comp : component) {
141 }
142}
143
144void set_journal_context_filter(const std::vector<Journal::Context>& context, bool enabled)
145{
146 for (const auto& ctx : context) {
148 }
149}
150
151void store_journal_entries(const std::string& file_name)
152{
153 Journal::Archivist::instance().add_sink(std::make_unique<Journal::FileSink>(file_name));
155}
156
158{
159 Journal::Archivist::instance().add_sink(std::make_unique<Journal::ConsoleSink>());
160}
161
162bool load_config_from_file(const std::string& path)
163{
165 auto result = ser.read<EngineConfig>(path);
166 if (!result) {
168 "Failed to load config from {}: {}", path, ser.last_error());
169 return false;
170 }
171 get_global_stream_info() = result->stream;
172 get_global_graphics_config() = result->graphics;
173 get_global_input_config() = result->input;
174 get_global_network_config() = result->network;
175
176 const auto& j = result->journal;
177
178 if (!j.severity.empty()) {
179 auto sev = Reflect::string_to_enum_case_insensitive<Journal::Severity>(j.severity);
180 if (sev) {
182 } else {
184 "Unknown journal severity: {}", j.severity);
185 }
186 }
187 if (j.sink_to_console)
189 if (!j.log_file.empty())
191 for (const auto& name : j.disable_components) {
192 auto comp = Reflect::string_to_enum_case_insensitive<Journal::Component>(name);
193 if (comp) {
194 Config::set_journal_component_filter({ *comp }, false);
195 } else {
197 "Unknown journal component: {}", name);
198 }
199 }
200
201 for (const auto& name : j.disable_contexts) {
202 auto ctx = Reflect::string_to_enum_case_insensitive<Journal::Context>(name);
203 if (ctx) {
204 Config::set_journal_context_filter({ *ctx }, false);
205 } else {
207 "Unknown journal context: {}", name);
208 }
209 }
210
211 return true;
212}
213
214}
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::string log_file
Definition Config.cpp:18
JournalConfig journal
Definition Config.cpp:38
Core::GlobalNetworkConfig network
Definition Config.cpp:37
bool sink_to_console
Definition Config.cpp:17
Core::GlobalStreamInfo stream
Definition Config.cpp:34
Core::GlobalGraphicsConfig graphics
Definition Config.cpp:35
std::vector< std::string > disable_contexts
Definition Config.cpp:20
std::vector< std::string > disable_components
Definition Config.cpp:19
std::string severity
Definition Config.cpp:16
Core::GlobalInputConfig input
Definition Config.cpp:36
Core engine lifecycle and configuration API.
GlobalStreamInfo & get_stream_info()
Gets the current stream configuration.
Definition Engine.hpp:224
void set_node_config(const Nodes::NodeConfig &config)
Sets the node processing configuration.
Definition Engine.cpp:387
GlobalNetworkConfig & get_network_config()
Gets the current network configuration.
Definition Engine.hpp:242
Nodes::NodeConfig & get_node_config()
Gets the current node processing configuration.
Definition Engine.cpp:378
GlobalInputConfig & get_input_config()
Gets the current input configuration.
Definition Engine.hpp:236
GlobalGraphicsConfig & get_graphics_config()
Gets the current graphics configuration.
Definition Engine.hpp:230
std::optional< T > read(const std::string &path)
Read path and deserialize into T.
const std::string & last_error() const
Last error message, empty if no error.
Converts arbitrary C++ types to/from JSON strings and disk files.
void add_sink(std::unique_ptr< Sink > sink)
Add a log sink for output.
void set_component_filter(Component comp, bool enabled)
Enable or disable logging for a specific component.
static Archivist & instance()
Get the singleton instance of the Archivist.
void set_min_severity(Severity min_sev)
Set the minimum severity level for logging.
void set_context_filter(Context ctx, bool enabled)
Enable or disable logging for a specific context.
Core::GlobalGraphicsConfig & get_global_graphics_config()
Gets the graphics configuration from the default engine.
Definition Config.cpp:68
Nodes::NodeConfig & get_node_config()
Definition Config.cpp:92
void set_journal_component_filter(const std::vector< Journal::Component > &component, bool enabled)
Enables or disables logging for specific journal components.
Definition Config.cpp:137
Core::GlobalInputConfig & get_global_input_config()
Gets the input configuration from the default engine.
Definition Config.cpp:76
uint32_t get_buffer_size()
Gets the buffer size from the default engine.
Definition Config.cpp:114
void set_node_config(const Nodes::NodeConfig &config)
Sets the node configuration for the default engine.
Definition Config.cpp:97
bool load_config_from_file(const std::string &path)
Load engine configuration from a JSON file, applying any present fields to the pre-Init config struct...
Definition Config.cpp:162
void store_journal_entries(const std::string &file_name)
Stores journal entries to a file by adding a FileSink to the Archivist.
Definition Config.cpp:151
void set_journal_severity(Journal::Severity severity)
Sets the minimum severity level for journal entries to be logged.
Definition Config.cpp:132
void sink_journal_to_console()
Outputs journal entries to the console by adding a ConsoleSink to the Archivist NOTE: This records th...
Definition Config.cpp:157
void set_journal_context_filter(const std::vector< Journal::Context > &context, bool enabled)
Enables or disables logging for specific journal contexts.
Definition Config.cpp:144
uint32_t get_sample_rate()
Gets the sample rate from the default engine.
Definition Config.cpp:105
Core::GlobalStreamInfo & get_global_stream_info()
Gets the stream configuration from the default engine.
Definition Config.cpp:60
uint32_t get_num_out_channels()
Gets the number of output channels from the default engine.
Definition Config.cpp:123
Core::GlobalNetworkConfig & get_global_network_config()
Gets the network configuration from the default engine.
Definition Config.cpp:84
Globlal configuration for MayaFlux.
Definition Config.cpp:58
constexpr auto member(std::string_view key, T Class::*ptr)
@ Configuration
Configuration and parameter updates.
@ API
MayaFlux/API Wrapper and convenience functions.
bool is_engine_configured()
Checks if the default engine has currently accepted all configurations and initialized all managers.
Definition Config.cpp:52
bool is_configured()
Checks if the default engine has currently accepted all configurations and initialized all managers.
Definition Core.cpp:60
Core::Engine & get_context()
Gets the default engine instance.
Definition Core.cpp:68
Main namespace for the Maya Flux audio engine.
Definition Runtime.cpp:12
Configuration for the InputSubsystem.
Configuration for the NetworkSubsystem.
uint32_t channels
Number of discrete channels in this set.
uint32_t buffer_size
Number of samples per processing block.
uint32_t sample_rate
Number of samples processed per second (Hz)
ChannelConfig output
Configuration for output signal channels.
Comprehensive configuration for digital audio stream processing.
Configuration settings for individual audio nodes.
Definition NodeSpec.hpp:29