MayaFlux 0.5.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
13
14namespace MayaFlux {
15
16namespace {
17 struct JournalConfig {
18 std::string severity; // "TRACE" "DEBUG" "INFO" "WARN" "ERROR" "FATAL"
19 bool sink_to_console { false };
20 std::string log_file; // empty = no file sink
21 std::vector<std::string> disable_components; // names from Journal::Component enum
22 std::vector<std::string> disable_contexts; // names from Journal::Context enum
23
24 static constexpr auto describe()
25 {
26 return std::make_tuple(
27 Reflect::member("severity", &JournalConfig::severity),
28 Reflect::member("sink_to_console", &JournalConfig::sink_to_console),
29 Reflect::member("log_file", &JournalConfig::log_file),
30 Reflect::member("disable_components", &JournalConfig::disable_components),
31 Reflect::member("disable_contexts", &JournalConfig::disable_contexts));
32 }
33 };
34
35 struct EngineConfig {
36 Core::GlobalStreamInfo stream;
37 Core::GlobalGraphicsConfig graphics;
38 Core::GlobalInputConfig input;
39 Core::GlobalNetworkConfig network;
40 JournalConfig journal;
41
42 static constexpr auto describe()
43 {
44 return std::make_tuple(
45 Reflect::member("stream", &EngineConfig::stream),
46 Reflect::member("graphics", &EngineConfig::graphics),
47 Reflect::member("input", &EngineConfig::input),
48 Reflect::member("network", &EngineConfig::network),
49 Reflect::member("journal", &EngineConfig::journal));
50 }
51 };
52}
53
55{
56 return is_configured();
57}
58}
59
61
63{
65 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing stream info while engine is running may lead to inconsistent state.");
66 }
68}
69
71{
73 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing graphics config while engine is running may lead to inconsistent state.");
74 }
76}
77
79{
81 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing input config while engine is running may lead to inconsistent state.");
82 }
84}
85
87{
89 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Accessing network config while engine is running may lead to inconsistent state.");
90 }
92}
93
98
100{
101 if (!is_engine_configured()) {
102 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Setting node config on context directly.");
103 }
105}
106
108{
109 if (!is_engine_configured()) {
110 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default sample rate");
111 return 48000;
112 }
114}
115
117{
118 if (!is_engine_configured()) {
119 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default buffer size");
120 return 512;
121 }
123}
124
126{
127 if (!is_engine_configured()) {
128 MF_WARN(Journal::Component::API, Journal::Context::Configuration, "Engine is not running. Returning default number of output channels");
129 return 2;
130 }
132}
133
138
139void set_journal_component_filter(const std::vector<Journal::Component>& component, bool enabled)
140{
141 for (const auto& comp : component) {
143 }
144}
145
146void set_journal_context_filter(const std::vector<Journal::Context>& context, bool enabled)
147{
148 for (const auto& ctx : context) {
150 }
151}
152
153void store_journal_entries(const std::string& file_name)
154{
155 Journal::Archivist::instance().add_sink(std::make_unique<Journal::FileSink>(file_name));
157}
158
160{
161 Journal::Archivist::instance().add_sink(std::make_unique<Journal::ConsoleSink>());
162}
163
164bool load_config_from_file(const std::string& path)
165{
167 auto result = ser.read<EngineConfig>(path);
168 if (!result) {
170 "Failed to load config from {}: {}", path, ser.last_error());
171 return false;
172 }
173 get_global_stream_info() = result->stream;
174 get_global_graphics_config() = result->graphics;
175 get_global_input_config() = result->input;
176 get_global_network_config() = result->network;
177
178 const auto& j = result->journal;
179
180 if (!j.severity.empty()) {
181 auto sev = Reflect::string_to_enum_case_insensitive<Journal::Severity>(j.severity);
182 if (sev) {
184 } else {
186 "Unknown journal severity: {}", j.severity);
187 }
188 }
189 if (j.sink_to_console)
191 if (!j.log_file.empty())
193 for (const auto& name : j.disable_components) {
194 auto comp = Reflect::string_to_enum_case_insensitive<Journal::Component>(name);
195 if (comp) {
196 Config::set_journal_component_filter({ *comp }, false);
197 } else {
199 "Unknown journal component: {}", name);
200 }
201 }
202
203 for (const auto& name : j.disable_contexts) {
204 auto ctx = Reflect::string_to_enum_case_insensitive<Journal::Context>(name);
205 if (ctx) {
206 Config::set_journal_context_filter({ *ctx }, false);
207 } else {
209 "Unknown journal context: {}", name);
210 }
211 }
212
213 return true;
214}
215
216}
#define MF_ERROR(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
std::string log_file
Definition Config.cpp:20
JournalConfig journal
Definition Config.cpp:40
Core::GlobalNetworkConfig network
Definition Config.cpp:39
bool sink_to_console
Definition Config.cpp:19
Core::GlobalStreamInfo stream
Definition Config.cpp:36
Core::GlobalGraphicsConfig graphics
Definition Config.cpp:37
std::vector< std::string > disable_contexts
Definition Config.cpp:22
std::vector< std::string > disable_components
Definition Config.cpp:21
std::string severity
Definition Config.cpp:18
Core::GlobalInputConfig input
Definition Config.cpp:38
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:70
Nodes::NodeConfig & get_node_config()
Definition Config.cpp:94
void set_journal_component_filter(const std::vector< Journal::Component > &component, bool enabled)
Enables or disables logging for specific journal components.
Definition Config.cpp:139
Core::GlobalInputConfig & get_global_input_config()
Gets the input configuration from the default engine.
Definition Config.cpp:78
uint32_t get_buffer_size()
Gets the buffer size from the default engine.
Definition Config.cpp:116
void set_node_config(const Nodes::NodeConfig &config)
Sets the node configuration for the default engine.
Definition Config.cpp:99
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:164
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:153
void set_journal_severity(Journal::Severity severity)
Sets the minimum severity level for journal entries to be logged.
Definition Config.cpp:134
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:159
void set_journal_context_filter(const std::vector< Journal::Context > &context, bool enabled)
Enables or disables logging for specific journal contexts.
Definition Config.cpp:146
uint32_t get_sample_rate()
Gets the sample rate from the default engine.
Definition Config.cpp:107
Core::GlobalStreamInfo & get_global_stream_info()
Gets the stream configuration from the default engine.
Definition Config.cpp:62
uint32_t get_num_out_channels()
Gets the number of output channels from the default engine.
Definition Config.cpp:125
Core::GlobalNetworkConfig & get_global_network_config()
Gets the network configuration from the default engine.
Definition Config.cpp:86
Globlal configuration for MayaFlux.
Definition Config.cpp:60
@ Configuration
Configuration and parameter updates.
@ API
MayaFlux/API Wrapper and convenience functions.
constexpr auto member(std::string_view key, T Class::*ptr)
Definition Mirror.hpp:37
bool is_engine_configured()
Checks if the default engine has currently accepted all configurations and initialized all managers.
Definition Config.cpp:54
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