3838#include < OgreSharedPtr.h>
3939
4040#include < QObject> // NOLINT cpplint cannot handle include order here
41+ #include < QString> // NOLINT cpplint cannot handle include order here
4142
4243#include < memory>
4344#include < string>
45+ #include < unordered_map>
4446
4547#include < sensor_msgs/msg/image.hpp>
4648
5052#include " rviz_common/properties/float_property.hpp"
5153#include " rviz_common/properties/int_property.hpp"
5254#include " rviz_common/render_panel.hpp"
53- #include " rviz_default_plugins/displays/image/image_transport_display.hpp"
5455#include " rviz_default_plugins/displays/image/ros_image_texture_iface.hpp"
5556#include " rviz_default_plugins/visibility_control.hpp"
57+ #include " get_transport_from_topic.hpp"
58+ #include " image_transport/image_transport.hpp"
59+ #include " image_transport/subscriber_filter.hpp"
60+ #include " rviz_common/ros_topic_display.hpp"
5661#endif
5762
5863namespace Ogre
@@ -70,8 +75,7 @@ namespace displays
7075 * \class ImageDisplay
7176 *
7277 */
73- class RVIZ_DEFAULT_PLUGINS_PUBLIC ImageDisplay
74- : public rviz_default_plugins::displays::ImageTransportDisplay<sensor_msgs::msg::Image>
78+ class RVIZ_DEFAULT_PLUGINS_PUBLIC ImageDisplay : public rviz_common::_RosTopicDisplay
7579{
7680 Q_OBJECT
7781
@@ -81,26 +85,41 @@ class RVIZ_DEFAULT_PLUGINS_PUBLIC ImageDisplay
8185 ~ImageDisplay () override ;
8286
8387 void onInitialize () override ;
84- void update (float wall_dt, float ros_dt) override ;
88+ void update (float wall_dt, float ros_dt);
8589 void reset () override ;
8690
8791public Q_SLOTS:
8892 virtual void updateNormalizeOptions ();
8993
9094protected Q_SLOTS:
91- void subscribe () override ;
95+ virtual void subscribe ();
9296
9397protected:
9498 void onEnable () override ;
9599 void onDisable () override ;
96- void unsubscribe () override ;
97-
100+ virtual void unsubscribe ();
101+ void updateTopic () override ;
102+ void transformerChangedCallback () override ;
103+ void resetSubscription ();
98104 void incomingMessage (const sensor_msgs::msg::Image::ConstSharedPtr & img_msg);
105+ void setTopic (const QString & topic, const QString & datatype) override ;
99106
100107 /* This is called by incomingMessage(). */
101- void processMessage (sensor_msgs::msg::Image::ConstSharedPtr msg) override ;
102-
103- image_transport::Subscriber subscription_;
108+ virtual void processMessage (sensor_msgs::msg::Image::ConstSharedPtr msg);
109+
110+ std::shared_ptr<image_transport::SubscriberFilter> subscription_;
111+ uint32_t messages_received_;
112+ rclcpp::Time subscription_start_time_;
113+ message_filters::Connection subscription_callback_;
114+ const std::unordered_map<std::string, std::string> transport_message_types_ = {
115+ /* *INDENT-OFF* */
116+ {" raw" , " sensor_msgs/msg/Image" },
117+ {" compressed" , " sensor_msgs/msg/CompressedImage" },
118+ {" compressedDepth" , " sensor_msgs/msg/CompressedImage" },
119+ {" theora" , " theora_image_transport/msg/Packet" },
120+ {" zstd" , " sensor_msgs/msg/CompressedImage" },
121+ /* *INDENT-ON* */
122+ };
104123
105124private:
106125 void setupScreenRectangle ();
0 commit comments