38
38
#include < OgreSharedPtr.h>
39
39
40
40
#include < QObject> // NOLINT cpplint cannot handle include order here
41
+ #include < QString> // NOLINT cpplint cannot handle include order here
41
42
42
43
#include < memory>
43
44
#include < string>
45
+ #include < unordered_map>
44
46
45
47
#include < sensor_msgs/msg/image.hpp>
46
48
50
52
#include " rviz_common/properties/float_property.hpp"
51
53
#include " rviz_common/properties/int_property.hpp"
52
54
#include " rviz_common/render_panel.hpp"
53
- #include " rviz_default_plugins/displays/image/image_transport_display.hpp"
54
55
#include " rviz_default_plugins/displays/image/ros_image_texture_iface.hpp"
55
56
#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"
56
61
#endif
57
62
58
63
namespace Ogre
@@ -70,8 +75,7 @@ namespace displays
70
75
* \class ImageDisplay
71
76
*
72
77
*/
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
75
79
{
76
80
Q_OBJECT
77
81
@@ -81,26 +85,41 @@ class RVIZ_DEFAULT_PLUGINS_PUBLIC ImageDisplay
81
85
~ImageDisplay () override ;
82
86
83
87
void onInitialize () override ;
84
- void update (float wall_dt, float ros_dt) override ;
88
+ void update (float wall_dt, float ros_dt);
85
89
void reset () override ;
86
90
87
91
public Q_SLOTS:
88
92
virtual void updateNormalizeOptions ();
89
93
90
94
protected Q_SLOTS:
91
- void subscribe () override ;
95
+ virtual void subscribe ();
92
96
93
97
protected:
94
98
void onEnable () override ;
95
99
void onDisable () override ;
96
- void unsubscribe () override ;
97
-
100
+ virtual void unsubscribe ();
101
+ void updateTopic () override ;
102
+ void transformerChangedCallback () override ;
103
+ void resetSubscription ();
98
104
void incomingMessage (const sensor_msgs::msg::Image::ConstSharedPtr & img_msg);
105
+ void setTopic (const QString & topic, const QString & datatype) override ;
99
106
100
107
/* 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
+ };
104
123
105
124
private:
106
125
void setupScreenRectangle ();
0 commit comments