diff --git a/libs/dmf-node/include/dmf-node/node.hpp b/libs/dmf-node/include/dmf-node/node.hpp index b8a929f..e028efa 100644 --- a/libs/dmf-node/include/dmf-node/node.hpp +++ b/libs/dmf-node/include/dmf-node/node.hpp @@ -9,6 +9,7 @@ #include #include +#include #include namespace dmf_node { @@ -21,8 +22,8 @@ public: virtual std::vector input_ports() const = 0; virtual std::vector output_ports() const = 0; virtual void configure(const nlohmann::json& params) = 0; - virtual void on_add_writer(const std::string& port_id, mxlFlowWriter writer) = 0; - virtual void on_add_reader(const std::string& port_id, mxlFlowReader reader) = 0; + virtual void on_add_writer(const std::string& port_id, mxlFlowWriter writer) {} + virtual void on_add_reader(const std::string& port_id, mxlFlowReader reader) {} virtual void on_remove_writer(const std::string& port_id) = 0; virtual void on_remove_reader(const std::string& port_id) = 0; virtual void process() = 0; @@ -31,8 +32,15 @@ public: void set_mxl_instance(mxlInstance instance) { mxl_instance_ = instance; } mxlInstance get_mxl_instance() const { return mxl_instance_; } + void set_writer_config(const std::string& port_id, const mxlFlowConfigInfo& config) { writer_configs_[port_id] = config; } + void set_reader_config(const std::string& port_id, const mxlFlowConfigInfo& config) { reader_configs_[port_id] = config; } + const mxlFlowConfigInfo* get_writer_config(const std::string& port_id) const { auto it = writer_configs_.find(port_id); return it != writer_configs_.end() ? &it->second : nullptr; } + const mxlFlowConfigInfo* get_reader_config(const std::string& port_id) const { auto it = reader_configs_.find(port_id); return it != reader_configs_.end() ? &it->second : nullptr; } + private: mxlInstance mxl_instance_ = nullptr; + std::unordered_map writer_configs_; + std::unordered_map reader_configs_; }; } // namespace dmf_node diff --git a/libs/dmf-node/src/node_runner.cpp b/libs/dmf-node/src/node_runner.cpp index fd93b62..1bee049 100644 --- a/libs/dmf-node/src/node_runner.cpp +++ b/libs/dmf-node/src/node_runner.cpp @@ -116,10 +116,10 @@ int NodeRunner::exec(std::unique_ptr node) { spdlog::error("Failed to create flow writer for flow {}: status={}", flow_id, static_cast(status)); return {{"ok", false}, {"error", "failed to create flow writer"}}; } - spdlog::info("Created flow writer on port '{}' flow {} (created={})", port_id, flow_id, created); +spdlog::info("Created flow writer on port '{}' flow {} (created={})", port_id, flow_id, created); flow_resources.push_back({port_id, writer, nullptr}); + node->set_writer_config(port_id, config_info); node->on_add_writer(port_id, writer); - return {{"ok", true}}; }); control_server->register_command("add_reader", [&](const nlohmann::json& msg) -> nlohmann::json { @@ -132,10 +132,12 @@ int NodeRunner::exec(std::unique_ptr node) { spdlog::error("Failed to create flow reader for flow {}: status={}", flow_id, static_cast(status)); return {{"ok", false}, {"error", "failed to create flow reader"}}; } - spdlog::info("Created flow reader on port '{}' flow {}", port_id, flow_id); +spdlog::info("Created flow reader on port '{}' flow {}", port_id, flow_id); flow_resources.push_back({port_id, nullptr, reader}); + mxlFlowConfigInfo config{}; + mxlFlowReaderGetConfigInfo(reader, &config); + node->set_reader_config(port_id, config); node->on_add_reader(port_id, reader); - return {{"ok", true}}; }); control_server->register_command("remove_writer", [&](const nlohmann::json& msg) -> nlohmann::json { diff --git a/nodes/fabric-bridge/src/fabric_bridge_node.cpp b/nodes/fabric-bridge/src/fabric_bridge_node.cpp index 9ad6967..4464b6f 100644 --- a/nodes/fabric-bridge/src/fabric_bridge_node.cpp +++ b/nodes/fabric-bridge/src/fabric_bridge_node.cpp @@ -241,9 +241,10 @@ void FabricBridgeNode::run_target() { } target_ = tgt; - mxlFlowConfigInfo config{}; - mxlFlowWriterGetConfigInfo(*writer_, &config); - grain_rate_ = config.common.grainRate; + auto* config = get_writer_config("video_out"); + if (config) { + grain_rate_ = config->common.grainRate; + } mxlFabricsTargetConfig target_cfg{}; target_cfg.version = MXL_FABRICS_API_VERSION; diff --git a/nodes/fabric-bridge/src/main.cpp b/nodes/fabric-bridge/src/main.cpp index 250abb2..5e12f59 100644 --- a/nodes/fabric-bridge/src/main.cpp +++ b/nodes/fabric-bridge/src/main.cpp @@ -2,10 +2,5 @@ #include int main(int argc, char* argv[]) { - dmf_node::NodeRunner runner; - if (!runner.parse_args(argc, argv)) { - return 1; - } - auto node = std::make_unique(); - return runner.exec(std::move(node)); + return dmf_node::NodeRunner::run(argc, argv); } \ No newline at end of file