From fcff2aae9e6d0a4aa532b408a5be296f896e967b Mon Sep 17 00:00:00 2001 From: Geoff McIver Date: Mon, 30 Aug 2021 15:14:45 +1200 Subject: [PATCH] Port back parameter declared check for compressed image transport subscription --- .../src/compressed_subscriber.cpp | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/compressed_image_transport/src/compressed_subscriber.cpp b/compressed_image_transport/src/compressed_subscriber.cpp index 28a10779..caafcfad 100644 --- a/compressed_image_transport/src/compressed_subscriber.cpp +++ b/compressed_image_transport/src/compressed_subscriber.cpp @@ -67,13 +67,27 @@ void CompressedSubscriber::subscribeImpl( typedef image_transport::SimpleSubscriberPlugin Base; Base::subscribeImpl(node, base_topic, callback, custom_qos); std::string mode; - rcl_interfaces::msg::ParameterDescriptor mode_description; - mode_description.name = "mode"; - mode_description.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING; - mode_description.description = "OpenCV imdecode flags to use"; - mode_description.read_only = false; - mode_description.additional_constraints = "Supported values: [unchanged, gray, color]"; - mode = node->declare_parameter("mode", kDefaultMode, mode_description); + + uint ns_len = node->get_effective_namespace().length(); + std::string param_base_name = base_topic.substr(ns_len); + std::replace(param_base_name.begin(), param_base_name.end(), '/', '.'); + std::string mode_param_name = param_base_name + ".mode"; + + if (!node->has_parameter(mode_param_name)) + { + rcl_interfaces::msg::ParameterDescriptor mode_description; + mode_description.name = mode_param_name; + mode_description.type = rcl_interfaces::msg::ParameterType::PARAMETER_STRING; + mode_description.description = "OpenCV imdecode flags to use"; + mode_description.read_only = false; + mode_description.additional_constraints = "Supported values: [unchanged, gray, color]"; + mode = node->declare_parameter(mode_param_name, kDefaultMode, mode_description); + } + else + { + RCLCPP_DEBUG(logger_, "%s was previously declared", mode_param_name.c_str()); + mode = node->get_parameter(mode_param_name).get_value(); + } if (mode == "unchanged") { config_.imdecode_flag = cv::IMREAD_UNCHANGED;